Câu lệnh UPDATE
trong MySQL được sử dụng để cập nhật dữ liệu đã tồn tại trong bảng. Hướng dẫn này sẽ bao gồm tất cả các trường hợp, từ ví dụ cơ bản đến nâng cao, với giải thích chi tiết và minh họa đầy đủ.
UPDATE
Cú pháp cơ bản của câu lệnh UPDATE
trong MySQL là:
table_name
Câu lệnh trên sẽ cập nhật giá trị email
thành '[email protected]'
cho dòng có id = 1
.
Bạn có thể cập nhật nhiều cột cùng lúc bằng cách liệt kê chúng trong câu lệnh SET
.
Giả sử bạn muốn cập nhật cả tên và email của người dùng có id = 2
:
name
Câu lệnh trên sẽ cập nhật giá trị của cột email
cho tất cả các dòng trong bảng users
.
Bạn có thể sử dụng WHERE
để chỉ định một hoặc nhiều điều kiện cho việc cập nhật dữ liệu.
Nếu bạn muốn cập nhật tên của tất cả người dùng có email thuộc miền @example.com
:
name
Câu lệnh trên sẽ cộng thêm 10 vào giá trị hiện tại của cột stock
cho sản phẩm có product_id = 101
.
Bạn có thể sử dụng hàm CASE
để cập nhật giá trị khác nhau dựa trên các điều kiện khác nhau cho các dòng khác nhau trong cùng một câu lệnh UPDATE
.
Giả sử bạn muốn cập nhật bảng users
sao cho người dùng có id = 1
có tên mới là 'Alice', và người dùng có id = 2
có tên mới là 'Bob':
name
Nếu customer_id = 5
không tồn tại trong bảng customers
, câu lệnh này sẽ trả về lỗi.
Bạn có thể cập nhật dữ liệu trong một bảng dựa trên dữ liệu từ bảng khác thông qua việc kết hợp (JOIN) hai bảng trong câu lệnh UPDATE
.
Giả sử bạn có bảng products
và suppliers
, và bạn muốn cập nhật tên nhà cung cấp (supplier_name
) trong bảng products
dựa trên dữ liệu từ bảng suppliers
:
products
Câu lệnh trên sẽ chỉ cập nhật 5 dòng đầu tiên có status = 'pending'
thành 'processed'
.
ORDER BY
MySQL cho phép bạn kết hợp ORDER BY
với UPDATE
để sắp xếp các dòng được cập nhật theo một thứ tự nhất định.
Giả sử bạn muốn cập nhật các dòng có status = 'pending'
theo thứ tự thời gian từ cũ nhất đến mới nhất:
status = 'pending'
Câu lệnh trên sẽ cập nhật cột price
của sản phẩm có product_id = 101
về giá trị mặc định là 100.
UPDATE IGNORE
Nếu bạn muốn MySQL bỏ qua các lỗi (ví dụ, vi phạm khóa ngoại hoặc khóa duy nhất) trong khi cập nhật, bạn có thể sử dụng UPDATE IGNORE
.
Giả sử bạn có bảng users
với cột email
là duy nhất. Bạn có thể sử dụng UPDATE IGNORE
để bỏ qua lỗi khi cập nhật nếu có vi phạm:
email
Câu lệnh trên sẽ cập nhật nội dung của tệp mới vào bảng files
.
UPDATE
WHERE
được lập chỉ mục để tăng hiệu suất.LIMIT
nếu bạn chỉ cần cập nhật một số lượng dòng nhỏ.EXPLAIN
: Để kiểm tra cách MySQL thực hiện câu lệnh UPDATE
, bạn có thể sử dụng EXPLAIN
trước câu lệnh.UPDATE
Trong ví dụ này, bạn cập nhật tên phòng ban (department_name
) cho nhân viên có employee_id = 123
từ bảng departments
dựa trên giá trị department_id
trong cả hai bảng.
Sử dụng một truy vấn con (subquery
) trong phần SET
hoặc WHERE
của câu lệnh UPDATE
để cập nhật dữ liệu dựa trên kết quả của một truy vấn khác.
Giả sử bạn muốn cập nhật lương (salary
) của nhân viên bằng với mức lương cao nhất trong cùng một phòng ban (department_id
).
department_id = 5
Câu lệnh trên sẽ tăng lương cho nhân viên dựa trên cấp bậc, với mức tăng khác nhau tùy thuộc vào chức danh.
FOREIGN KEY
) và tính toàn vẹn dữ liệuKhi làm việc với các bảng có ràng buộc khóa ngoại, bạn cần đặc biệt chú ý đến việc cập nhật các cột liên quan đến khóa ngoại. Để tránh vi phạm ràng buộc, bạn có thể sử dụng ON UPDATE CASCADE
.
Giả sử bạn có hai bảng orders
và customers
, với customer_id
là khóa ngoại trong bảng orders
. Khi bạn cập nhật customer_id
trong bảng customers
, các bản ghi tương ứng trong bảng orders
cũng sẽ được cập nhật tự động.
customer_id
Câu lệnh này sẽ tự động cập nhật customer_id
trong bảng orders
cho các đơn hàng liên quan mà không cần phải làm thủ công.
UPDATE
và JOIN
Bạn có thể cập nhật nhiều bảng cùng một lúc bằng cách sử dụng JOIN
để liên kết các bảng và thực hiện cập nhật trên cả hai.
Giả sử bạn muốn cập nhật đồng thời bảng employees
và bảng salaries
, dựa trên điều kiện của department_id
.
employees
Câu lệnh trên sẽ chọn ra 10 nhân viên có lương thấp nhất trong phòng ban department_id = 2
và tăng lương cho họ thêm 500.
Kể từ MySQL 5.7, bạn có thể lưu trữ và cập nhật dữ liệu JSON trong các bảng của mình. Cập nhật dữ liệu JSON đòi hỏi phải sử dụng các hàm đặc biệt như JSON_SET
, JSON_REPLACE
, hoặc JSON_REMOVE
.
Giả sử bạn có bảng employees
với cột profile
lưu trữ dữ liệu JSON, và bạn muốn cập nhật địa chỉ của một nhân viên cụ thể.
address
Câu lệnh trên sẽ cập nhật nội dung file vào cột file_content
cho tài liệu có document_id = 101
.
AUTO_INCREMENT
)Trực tiếp cập nhật giá trị của cột có kiểu AUTO_INCREMENT
là không được phép trong MySQL. Tuy nhiên, bạn có thể điều chỉnh giá trị tự động tăng bằng cách sử dụng truy vấn ALTER TABLE
.
Giả sử bạn có bảng products
với cột product_id
là AUTO_INCREMENT
, và bạn muốn điều chỉnh giá trị tiếp theo của cột này.
product_id
Trigger này sẽ tự động trừ số lượng hàng tồn kho mỗi khi có cập nhật đơn hàng mới.
Composite Primary Key
)Trong một số trường hợp, bảng của bạn có thể có khóa chính là tổ hợp của nhiều cột. Khi đó, việc cập nhật dữ liệu yêu cầu bạn chỉ định cả hai cột của khóa chính.
Giả sử bạn có bảng project_assignments
với khóa chính là tổ hợp của hai cột employee_id
và project_id
. Bạn có thể cập nhật trạng thái dự án cho một nhân viên như sau:
employee_id = 1
Câu lệnh này cập nhật thời gian đăng nhập cuối cùng cho những người dùng đã đăng nhập trong vòng 7 ngày qua.
Trên đây là tổng hợp tất cả các trường hợp nâng cao của câu lệnh UPDATE
trong MySQL, giúp bạn làm việc với dữ liệu một cách linh hoạt và hiệu quả trong nhiều tình huống phức tạp.