Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cập nhật nhiều hàng cùng lúc với một mệnh đề WHERE trong MySQL dùng IN()

Khi cần cập nhật cùng một giá trị cho nhiều hàng được xác định bởi danh sách ID hoặc giá trị cụ thể, MySQL cung cấp toán tử IN() trong mệnh đề WHERE. Cách này giúp viết gọn một câu lệnh UPDATE duy nhất thay vì nhiều câu lệnh riêng lẻ.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1420 (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName VARCHAR(20),
    LastName VARCHAR(20),
    Age INT
);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('Chris', 'Brown', 23);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('David', 'Miller', 22);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('John', 'Smith', 24);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('John', 'Doe', 21);
mysql> INSERT INTO DemoTable1420 (FirstName, LastName, Age) VALUES ('Adam', 'Smith', 25);

Dữ liệu ban đầu:

mysql> SELECT * FROM DemoTable1420;
+----+-----------+----------+------+
| Id | FirstName | LastName | Age  |
+----+-----------+----------+------+
|  1 | Chris     | Brown    |   23 |
|  2 | David     | Miller   |   22 |
|  3 | John      | Smith    |   24 |
|  4 | John      | Doe      |   21 |
|  5 | Adam      | Smith    |   25 |
+----+-----------+----------+------+

Cập nhật nhiều hàng với IN()

Cập nhật FirstName và LastName cho các hàng có Id là 1, 3, 4, 5:

mysql> UPDATE DemoTable1420
    SET FirstName = 'Carol', LastName = 'Taylor'
    WHERE Id IN (1, 3, 4, 5);

Kết quả sau cập nhật:

mysql> SELECT * FROM DemoTable1420;
+----+-----------+----------+------+
| Id | FirstName | LastName | Age  |
+----+-----------+----------+------+
|  1 | Carol     | Taylor   |   23 |
|  2 | David     | Miller   |   22 |
|  3 | Carol     | Taylor   |   24 |
|  4 | Carol     | Taylor   |   21 |
|  5 | Carol     | Taylor   |   25 |
+----+-----------+----------+------+

Ưu điểm của cách này

  • Hiệu năng: Chỉ thực hiện một lần quét bảng và một lần ghi log transaction.
  • Đơn giản: Code ngắn gọn, dễ đọc, dễ bảo trì.
  • An toàn: Giảm thiểu rủi ro lỗi so với chạy nhiều câu UPDATE riêng biệt.

Mẹo: Danh sách trong IN() cũng có thể là kết quả của một subquery: WHERE Id IN (SELECT Id FROM OtherTable WHERE ...).