Bạn sẽ cần phải viết các điều kiện rất phức tạp nếu bạn muốn cập nhật nhiều hơn hai hàng. Trong trường hợp như vậy, bạn có thể sử dụng phương pháp INSERT .. ON DUPLICATE KEY UPDATE
INSERT into `mytable` [id, fruit, drink, food]
VALUES
[1, 'orange', 'water', 'pizza'],
[2, 'strawberry', 'wine', 'fish'],
[3, 'peach', 'jiuce', 'cake']
ON DUPLICATE KEY UPDATE
fruit = VALUES[fruit],
drink = VALUES[drink],
food = VALUES[food];
Để cập nhật nhiều hàng trong một cột, hãy sử dụng câu lệnh CASE. Trước tiên chúng ta hãy tạo một bảng -
mysql> create table updateMultipleRowsDemo -> [ -> StudentId int, -> StudentMathScore int -> ]; Query OK, 0 rows affected [0.63 sec]
Sau đây là truy vấn để chèn các bản ghi vào bảng bằng cách sử dụng lệnh chèn -
mysql> insert into updateMultipleRowsDemo values[10001,67]; Query OK, 1 row affected [0.14 sec] mysql> insert into updateMultipleRowsDemo values[10002,69]; Query OK, 1 row affected [0.15 sec] mysql> insert into updateMultipleRowsDemo values[10003,89]; Query OK, 1 row affected [0.14 sec] mysql> insert into updateMultipleRowsDemo values[10004,99]; Query OK, 1 row affected [0.13 sec] mysql> insert into updateMultipleRowsDemo values[10005,92]; Query OK, 1 row affected [0.13 sec]
Sau đây là truy vấn để hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select -
mysql> select * from updateMultipleRowsDemo;
Điều này sẽ tạo ra đầu ra sau -
+-----------+------------------+ | StudentId | StudentMathScore | +-----------+------------------+ | 10001 | 67 | | 10002 | 69 | | 10003 | 89 | | 10004 | 99 | | 10005 | 92 | +-----------+------------------+ 5 rows in set [0.00 sec]
Đây là truy vấn để cập nhật nhiều hàng trong một cột trong MySQL -
mysql> UPDATE updateMultipleRowsDemo -> SET StudentMathScore= CASE StudentId -> WHEN 10001 THEN 45 -> WHEN 10002 THEN 52 -> WHEN 10003 THEN 67 -> END -> WHERE StudentId BETWEEN 10001 AND 10003; Query OK, 3 rows affected [0.19 sec] Rows matched: 3 Changed: 3 Warnings: 0
Hãy để chúng tôi kiểm tra giá trị được cập nhật hay không -
mysql> select * from updateMultipleRowsDemo;
Điều này sẽ tạo ra đầu ra sau
+-----------+------------------+ | StudentId | StudentMathScore | +-----------+------------------+ | 10001 | 45 | | 10002 | 52 | | 10003 | 67 | | 10004 | 99 | | 10005 | 92 | +-----------+------------------+ 5 rows in set [0.00 sec]
Trong bài tập này, chúng ta sẽ học cách cập nhật nhiều hàng với các giá trị khác nhau trong một truy vấn. Giả sử chúng tôi có hồ sơ nhân viên sau và chúng tôi muốn cập nhật số điện thoại của một số nhân viên -
CREATE TABLE IF NOT EXISTS `empdata` [
`id` int[11] NOT NULL AUTO_INCREMENT,
`name` char[25] NOT NULL,
`email` varchar[100] NOT NULL,
`phone` int[11] NOT NULL,
PRIMARY KEY [`id`]
] ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
INSERT INTO `empdata` [`id`, `name`, `email`, `phone`] VALUES
[1, 'Anjali', This email address is being protected from spambots. You need JavaScript enabled to view it.', 878433948],
[2, 'Priska', This email address is being protected from spambots. You need JavaScript enabled to view it.', 493905490],
[3, 'Abhi', This email address is being protected from spambots. You need JavaScript enabled to view it.', 403022139],
[4, 'Joya', This email address is being protected from spambots. You need JavaScript enabled to view it.', 342345329],
[5, 'Ammy', This email address is being protected from spambots. You need JavaScript enabled to view it.', 239848342],
[6, 'Lussi', This email address is being protected from spambots. You need JavaScript enabled to view it.', 490290331];
Cách tốt nhất để cập nhật nhiều hàng chỉ trong một câu lệnh là sử dụng câu lệnh CASE WHEN ELSE. Trong trường hợp này, câu lệnh sẽ cập nhật trường hợp khớp và kết thúc theo cách khác, như-
UPDATE 'table_name'
SET 'field_name' = CASE 'id'
WHEN '1' THEN 'value 1'
WHEN '2' THEN 'value 2'
WHEN '3' THEN 'value 3'
ELSE 'field_name'
END
Ở đây, 'table_name' là tên bảng MySQL, 'field_name' là tên cột
Truy vấn cập nhật để cập nhật số điện thoại của một số nhân viên như sau -
UPDATE empdata SET phone = CASE
WHEN id=1 THEN '840932345'
WHEN id=2 THEN '890040908'
WHEN id=3 THEN '675748389'
WHEN id=6 THEN '909030309'
ELSE phone
END;
hãy kiểm tra dữ liệu cập nhật -
SELECT * FROM 'empdata';
+----+--------+--------------------+-----------+
| id | name | email | phone |
+----+--------+--------------------+-----------+
| 6 | Lussi | This email address is being protected from spambots. You need JavaScript enabled to view it. | 909030309 |
| 4 | Joya | This email address is being protected from spambots. You need JavaScript enabled to view it. | 342345329 |
| 5 | Ammy | This email address is being protected from spambots. You need JavaScript enabled to view it. | 239848342 |
| 2 | Priska | This email address is being protected from spambots. You need JavaScript enabled to view it. | 890040908 |
| 3 | Abhi | This email address is being protected from spambots. You need JavaScript enabled to view it. | 675748389 |
| 1 | Anjali | This email address is being protected from spambots. You need JavaScript enabled to view it. | 840932345 |
+----+--------+--------------------+-----------+
Bài tập MySQL liên quan
MySQL nốiMySQL Nhận ngày hiện tại, người dùng, phiên bản
MySQL Nhận giá trị tối đa
Quản trị viên MySQL
mệnh đề mysql where
Thứ tự MySQL theo
MySQL nhận được sự khác biệt giữa hai ngày
Kết hợp mẫu MySQL
MySQL tham gia
Biểu thức chính quy MySQL
MySQL xóa hàng trùng lặp
Nhận mức lương cao thứ n khi sử dụng MySQL
Hiển thị hàng thứ n từ MySQL
Cam kết và khôi phục trong mysql
MySQL CHỌN top 5
MySQL hiển thị các hàng thay thế