- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Insert SQL
Câu lệnh Insert thông thường, chèn dữ liệu vào bảng.
insert into tab1 set field1='val1', field2='val2',..
Có thể viết field và value một nơi.
INSERT INTO ins_duplicate VALUES (1,'Antelope');
Chèn thêm nhiều dòng dữ liệu vào bảng, liệt kê giá trị của fields theo từng record.
INSERT INTO ins_duplicate VALUES (1,'Aardvark'), (2,'Cheetah'), (3,'Zebra');
Kết quả duyệt bảng:
SELECT * FROM ins_duplicate; +----+----------+ | id | animal | +----+----------+ | 1 | Aardvark | | 2 | Cheetah | | 3 | Zebra | +----+----------+
Bảng có 1 primary key
Lệnh insert kết hợp với thuộc tính ON DUPLICATE KEY UPDATE
vẫn mang nghĩa sửa đổi bản ghi vào bảng. Tìm giá trị của trường khóa (primary field), nếu đã tồn tại thì cập nhật lại record còn không thì thêm mới , chỉ đơn giản sử dụng một dòng sql duy nhất giúp bạn thực hiện 2 công việc, một mục tiêu trúng một trong 2 đích.
INSERT INTO ins_duplicate VALUES (4,'Gorilla') ON DUPLICATE KEY UPDATE animal='Gorilla';
Không chỉ định fields sau tên bảng mặc định sử dụng toàn bộ thứ tự fields của table. Hoặc chỉ định giá trị field cụ thể cái này thuộc về cấu trúc insert rồi mình nhắc lại thôi:
INSERT INTO ins_duplicate(id,animal) VALUES (4,'Gorilla') ON DUPLICATE KEY UPDATE animal='Gorilla';
Các chuỗi sau từ VALUES là giá trị thiết lập cho fields, chính mệnh đề ‘ON DUPLICATE KEY UPDATE’ có vai trò giống như Update
.
Nếu không tìm thấy key id=4 thì thực hiện lệnh insert bình thường. Chạy lệnh cho ra kết quả record mới id=4.
+----+----------+ | id | animal | +----+----------+ | 1 | Aardvark | | 2 | Cheetah | | 3 | Zebra | | 4 | Gorilla | +----+----------+
Sử dụng lệnh Insert thông thường với primary key (id) bạn thiết lập, nếu trùng key sql sẽ báo lỗi:
INSERT INTO ins_duplicate VALUES (1,'Antelope'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Tuy nhiên bạn có thể gọi lệnh INSERT ON DUPLICATE KEY UPDATE
sẽ có tác dụng vừa cập nhật và thêm mới bản ghi mà không cần phải sử lệnh 2 lệnh: update và insert. Giúp cải thiện tốc độ sử lý sql.
INSERT INTO ins_duplicate VALUES (1,'Antelope') ON DUPLICATE KEY UPDATE animal='Antelope'; Query OK, 2 rows affected (0.09 sec)
Bây giờ bạn thử kiểm tra lại dòng id=1 giá trị field animal đã bị sửa đổi.
SELECT * FROM ins_duplicate; +----+----------+ | id | animal | +----+----------+ | 1 | Antelope | | 2 | Cheetah | | 3 | Zebra | | 4 | Gorilla | +----+----------+
Đối với table có 2 primary key
Thêm unique field và thiết lập giá trị cho trường này lấy giá trị primary key ‘id’ tương ứng cộng thêm 10, sử dụng các lệnh sql sau:
ALTER TABLE ins_duplicate ADD id2 INT; UPDATE ins_duplicate SET id2=id+10; ALTER TABLE ins_duplicate ADD UNIQUE KEY(id2);
Ví dụ sau, tìm thấy record khớp giá trị của 2 field gồm: key và field khác nhưng key thứ 2 không khớp với cùng record đó, tuy nhiên lại tồn tại trong record khác của bảng. Kết quả chạy lệnh chỉ 1 dòng bản ghi đầu tiên được tìm thấy, được thay đổi dữ liệu.
INSERT INTO ins_duplicate VALUES (2,'Lion',13) ON DUPLICATE KEY UPDATE animal='Lion'; Query OK, 2 rows affected, 1 warning (0.06 sec) SHOW WARNINGS; +-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Note | 1592 | Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe | +-------+------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ SELECT * FROM ins_duplicate; +----+----------+------+ | id | animal | id2 | +----+----------+------+ | 1 | Antelope | 11 | | 2 | Lion | 12 | | 3 | Zebra | 13 | | 4 | Gorilla | 14 | +----+----------+------+
Có 2 key tranh dành nhau, thì giá trị primary key đầu tiên tìm thấy sẽ được cập nhật không căn cứ ưu tiên key viết trước hay sau. Ở đây key có giá trị ‘2’ tìm thấy đầu tiên là ‘id’. Câu lệnh này không khuyến khích áp dụng cho table có 2 primary key.
TH1 viết theo tự tự primary key
TH2 viết ngược lại primary key
Kết quả đều sửa vào record có id=’2′.
Ứng dụng to lớn của ON DUPLICATE KEY UPDATE là tìm và sửa đổi hoặc thêm mới dữ liệu một cách linh hoạt. Sau khi định hình các record được tìm thấy, lệnh sẽ làm việc trên từng các record đó. Ví dụ sau cập nhật lại field ‘t2’ có giá trị = id+t1
INSERT INTO ins_duplicate (id,t1,t2) VALUES (1,2,5),(4,5,6) ON DUPLICATE KEY UPDATE t2=VALUES(id)+VALUES(t1);
Xóa bản ghi
Xóa một hoặc nhiều dòng dữ liệu ra khỏi bảng chúng ta có lệnh delete
.
delete from table1 where id in (1,2,3,4,5)
Cập nhật dữ liệu
Thay đổi giá trị các fields của một hay nhiều dòng dữ liệu thì sử dụng câu lệnh update, ví dụ:
update table1 set field1='value1',field2='value2',..
Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Quang Huy says
Các câu lệnh sql cơ bản và nâng cao