Trang này giải thích cách cập nhật dữ liệu hiện có trong cơ sở dữ liệu MySQL.
Vì vậy, chúng tôi đã thêm dữ liệu vào cơ sở dữ liệu của mình. Nhưng bây giờ chúng tôi nhận ra rằng dữ liệu của chúng tôi có sai sót. Táo đã được chỉ định một
UnitId
trong tổng số 1
- nhưng đây phải là 2
.
Bạn có thể xem điều này tại đây:
Không vấn đề gì. Chúng tôi sẽ chỉ cập nhật hồ sơ đó.
UPDATE
Tuyên bố
UPDATE
của SQL cho phép chúng tôi cập nhật dữ liệu trong cơ sở dữ liệu của chúng tôi. Chúng tôi có thể sử dụng câu lệnh này để thay đổi ID đơn vị từ 1
thành 2
. Để thực hiện việc này, chúng tôi sử dụng WHERE
để chỉ định bản ghi chính xác mà chúng tôi cần cập nhật. Như thế này:
UPDATE Fruit SET UnitId = 2 WHERE FruitId = 1;
Nói chung, bạn nên thực hiện UPDATE
, để chỉ định trường ID của bản ghi mà bạn đang cố cập nhật (hoặc bất kỳ khóa chính của nó là gì). Điều này giúp bảo vệ khỏi việc vô tình cập nhật / các bản ghi sai. Trong ví dụ này, chúng tôi biết rằng táo có FruitId
trong tổng số 1
. Nhưng không phải lúc nào bạn cũng có thể biết ID của bản ghi mà bạn đang cố gắng cập nhật. Trong trường hợp đó, bạn có thể làm như sau:
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple' AND UnitId = 1;
Chúng ta có thể theo dõi một trong hai điều đó bằng SELECT
tuyên bố và đây là kết quả:
Lưu ý rằng DateUpdated cột cũng đã được cập nhật, mặc dù chúng tôi không chỉ định bản cập nhật cho cột đó. Điều này là do, khi chúng tôi tạo bảng, chúng tôi đặt cột đó được cập nhật với ngày / giờ hiện tại mỗi khi có bản cập nhật cho bản ghi.
Đây là mã chúng tôi đã sử dụng khi tạo cột đó:
DateUpdated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Cụ thể hơn, đó là ON UPDATE CURRENT_TIMESTAMP
dẫn đến cột vừa được cập nhật khi chúng tôi chạy UPDATE
tuyên bố.
Cập nhật An toàn
Chúng tôi có thể dễ dàng xây dựng UPDATE
của chúng tôi lệnh như thế này (không có AND UnitId = 1
):
UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple';
Tuy nhiên, bạn có thể gặp phải lỗi sau nếu cố gắng thực hiện điều đó:
Chế độ cập nhật an toàn
Nếu bạn gặp phải lỗi trên, đó là do kết nối MySQL của bạn đang chạy ở chế độ Cập nhật An toàn. Điều này giúp ngăn chúng tôi vô tình ghi đè một lượng lớn dữ liệu. Trên thực tế, nếu chúng ta đã quên bao gồm WHERE
mệnh đề chúng tôi sẽ cập nhật từng bản ghi trong bảng!
Có, việc chạy mã sau sẽ dẫn đến mọi bản ghi trong bảng của chúng tôi sẽ được cập nhật thành Banana :
UPDATE Fruit SET FruitName = 'Banana'
Vì vậy, có lợi ích thực sự khi chạy ở chế độ Cập nhật An toàn.
Tuy nhiên, nếu bạn thực sự cần thực hiện truy vấn đó (hoặc nếu tất cả trái cây của bạn thực sự đã biến thành chuối), bạn có thể thực hiện một trong những cách sau:
- Sửa đổi truy vấn của bạn để bao gồm
KEY
cột. Chúng tôi đã làm điều này trong các ví dụ ở đầu trang này. - Tắt chế độ Cập nhật An toàn.
Tắt chế độ cập nhật an toàn
Nếu bạn thấy rằng bạn cần thực hiện UPDATE
hoạt động mà không sử dụng KEY
, bạn luôn có thể tắt chế độ Cập nhật An toàn.
Để tắt chế độ Cập nhật An toàn, hãy chạy lệnh sau trước khi chạy UPDATE
của bạn tuyên bố:
set sql_safe_updates = 0;
Bạn nên khôi phục cài đặt về trạng thái trước đó sau khi hoàn tất - đặc biệt là với các cài đặt có thể có tác động rộng rãi như cài đặt này.
Để bật chế độ Cập nhật An toàn, hãy chạy như sau:
set sql_safe_updates = 1;
Trên thực tế, bạn có thể chạy mọi thứ cùng một lúc, như sau:
set sql_safe_updates = 0; UPDATE Fruit SET UnitId = 2 WHERE FruitName = 'Apple'; select * from Fruit; set sql_safe_updates = 1;
Cập nhật nhiều trường
Bạn có thể cập nhật nhiều trường bằng cách sử dụng dấu phẩy để phân tách từng phép gán trường. Như thế này:
UPDATE Fruit SET FruitName = 'Red Grapes', Inventory = '11' WHERE FruitId = 5;
Kết quả: