VieTopik
Tiếng HànTiếng AnhIT
  • Góc học tập
Tải app
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
SQL với OracleThay đổi dữ liệu
Bài 11/16
5 phút

INSERT, UPDATE, DELETE

Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 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;
  • INSERT liệ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.
  • SET dùng được giá trị cũ của cột: SET stock = stock - 1.
  • WHERE của UPDATE và DELETE giống hệt WHERE của SELECT.

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ó WHERE thì UPDATE và DELETE tác động lên cả bảng. Chạy thử SELECT với cùng WHERE trước.

Tự kiểm tra

0/3 câu
Câu 1

Khách số 2 đổi email thành binh2@shop.vn. Câu nào đúng?

Câu 2

Nhập thêm 20 cây bút (product_id = 1) vào kho. Viết thế nào?

Câu 3

Trước khi chạy DELETE FROM orders WHERE status = 'CANCELLED', thói quen nào an toàn nhất?

SubqueryCREATE TABLE và ràng buộc

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt