INSERT, UPDATE, DELETE
Nội dung bài · 5 mục
- 1.Khái niệm
- 2.Ví dụ
- 3.Thử ngay
- 4.Lỗi hay gặp
- 5.Tóm tắt
Có khách mới đăng ký, sản phẩm tăng giá, một dòng hàng bị nhập nhầm. Ba việc
này tương ứng với ba câu lệnh thay đổi dữ liệu. Chúng dễ viết, nhưng chỉ cần
quên một dòng WHERE là sửa nhầm cả bảng.
Khái niệm
➕ INSERT: câu lệnh thêm một dòng mới vào bảng.
✏️ UPDATE: câu lệnh sửa giá trị trong những dòng thoả điều kiện WHERE.
🗑️ DELETE: câu lệnh xoá những dòng thoả điều kiện WHERE.
Ví dụ
INSERT INTO customers (name, email, city)
VALUES ('Em', 'em@shop.vn', 'Huế');
UPDATE products
SET price = 5500
WHERE product_id = 1;
DELETE FROM order_lines
WHERE line_id = 6;INSERTliệt kê tên cột rồi giá trị theo đúng thứ tự đó. Cột không được liệt kê thì nhận NULL hoặc giá trị mặc định.UPDATE ... SET cột = giá_trịsửa được nhiều cột, cách nhau bằng dấu phẩy.SETdùng được giá trị cũ của cột:SET stock = stock - 1.WHEREcủaUPDATEvàDELETEgiống hệtWHEREcủaSELECT.
Các khối trong bài này sửa dữ liệu mẫu. Thử xong mỗi khối, chạy ROLLBACK;
để huỷ (bài Transaction sẽ giải thích).
Thử ngay
Tăng giá 10% cho mọi sản phẩm dưới 10.000đ, rồi xem lại:
UPDATE products
SET price = price * 1.1
WHERE price < 10000;
SELECT name, price
FROM products
ORDER BY product_id;Đoán trước khi chạy: những món nào đổi giá, và giá mới là bao nhiêu?
Xem kết quả
| NAME | PRICE |
|---|---|
| Bút bi | 5500 |
| Vở | 12000 |
| Balo | 350000 |
| Thước | 7700 |
| Máy tính | 450000 |
Chỉ Bút bi và Thước đổi giá. Vở giá 12000, không dưới 10.000đ nên giữ nguyên.
Lỗi hay gặp
UPDATE quên WHERE. Câu lệnh vẫn chạy, không báo lỗi gì, nhưng sửa
mọi dòng trong bảng.
-- SAI — mọi sản phẩm đều thành 5500đ
UPDATE products SET price = 5500;-- ĐÚNG — chỉ sửa đúng sản phẩm cần sửa
UPDATE products SET price = 5500
WHERE product_id = 1;DELETE quên WHERE. Tương tự, cả bảng bị xoá sạch. Thói quen an toàn:
viết SELECT với cùng điều kiện WHERE trước, thấy đúng những dòng cần xoá
rồi mới đổi thành DELETE.
-- SAI — xoá hết mọi dòng hàng
DELETE FROM order_lines;-- ĐÚNG — chỉ xoá dòng hàng nhập nhầm
DELETE FROM order_lines WHERE line_id = 6;Tóm tắt
INSERT INTO bảng (cột...) VALUES (giá_trị...)thêm dòng mới.UPDATE bảng SET cột = giá_trị WHERE ...sửa các dòng thoả điều kiện.DELETE FROM bảng WHERE ...xoá các dòng thoả điều kiện.- Không có
WHEREthìUPDATEvàDELETEtác động lên cả bảng. Chạy thửSELECTvới cùngWHEREtrước.
Tự kiểm tra
0/3 câuKhách số 2 đổi email thành binh2@shop.vn. Câu nào đúng?
Nhập thêm 20 cây bút (product_id = 1) vào kho. Viết thế nào?
Trước khi chạy DELETE FROM orders WHERE status = 'CANCELLED', thói quen nào an toàn nhất?