Ba cách thay đổi dữ liệu
Trong nhóm DML, `INSERT` **thêm** bản ghi, `UPDATE` **sửa** giá trị ở bản ghi đã có, còn `DELETE` **xóa** bản ghi. Các lệnh này làm đổi dữ liệu chứ không tự đổi cấu trúc trường của bảng.
Ví dụ bảng **TacGia** ban đầu có `T01` — An, `T02` — Bình. Các câu sau được xem là **ba bước liên tiếp trên bản sao thử nghiệm**:
```sql
INSERT INTO TacGia
(MaTacGia, TenTacGia)
VALUES ('T03', 'Chi');
UPDATE TacGia
SET TenTacGia = 'Bình An'
WHERE MaTacGia = 'T02';
DELETE FROM TacGia
WHERE MaTacGia = 'T03';
```
Sau bước một có thêm T03. Sau bước hai T02 đổi tên, T01 giữ nguyên. Sau bước ba T03 bị xóa; bảng còn T01 — An và T02 — Bình An.
Điều kiện quyết định hàng bị tác động
`WHERE MaTacGia = 'T02'` giới hạn lệnh UPDATE vào đúng hàng T02; điều kiện ở DELETE giới hạn việc xóa vào T03. Nếu bỏ WHERE, lệnh có thể tác động **mọi hàng** của bảng. Trước khi cập nhật dữ liệu thật, cần kiểm phạm vi hàng định sửa hoặc xóa và quyền thực hiện.
Trong một CSDL có quan hệ, xóa bản ghi còn được bảng khác tham chiếu có thể bị từ chối hoặc xử lí theo quy tắc khóa ngoài đã đặt. Ví dụ T03 ở trên không được bản nhạc nào dùng nên thao tác xóa chạy được trong bộ dữ liệu thử.
Bài luyện
Sau ba lệnh trong ví dụ chạy theo thứ tự, bảng TacGia còn hàng nào?
T02 đã sửa tên, T03 đã bị xóa.
T02 không còn tên Bình và T03 đã xóa.
T01, T02 vẫn tồn tại.
DELETE chỉ nhắm T03.
Lời giải
INSERT thêm T03; UPDATE đổi tên T02 thành Bình An; DELETE xóa T03. T01 không bị tác động, nên cuối cùng còn T01 — An và T02 — Bình An.
Bài luyện
Trong lệnh UPDATE TacGia SET TenTacGia = 'Bình An' WHERE MaTacGia = 'T02', WHERE có vai trò gì?
UPDATE không tạo trường.
Điều kiện chọn hàng T02.
Không có DROP TABLE.
T02 là mã bản ghi, không là tên tài khoản.
Lời giải
WHERE MaTacGia = T02 chọn hàng có mã T02 để UPDATE thay tên. Hàng T01 không thỏa điều kiện nên giữ nguyên.
Bài luyện
Vì sao không nên bỏ WHERE khỏi lệnh DELETE khi chỉ muốn xóa T03?
DELETE dùng để xóa hàng.
WHERE chỉ là điều kiện chọn hàng.
Điều kiện là phần xác định T03; thiếu nó phạm vi xóa rộng hơn.
WHERE không đổi mã.
Lời giải
DELETE FROM TacGia WHERE MaTacGia = T03 chỉ xóa T03. Nếu bỏ điều kiện WHERE, lệnh không còn giới hạn hàng cần xóa và có thể xóa toàn bộ bảng.
Đang học