Physical Implementation in MySQL
Data Manipulation Language (DML)
Thao tác dữ liệu với INSERT, UPDATE, DELETE trong MySQL. Bao gồm cú pháp đầy đủ, ví dụ thực tế với bảng trước/sau, và tầm quan trọng của COMMIT và mệnh đề WHERE.
Data Manipulation Language (DML)
DML là tập lệnh SQL dùng để thay đổi dữ liệu trong các bảng đã tồn tại. Ba lệnh cốt lõi là INSERT, UPDATE, và DELETE.
1. INSERT — Thêm dòng mới
Cú pháp đầy đủ
INSERT INTO table_name (col1, col2, col3, ...) VALUES (val1, val2, val3, ...);
Ví dụ từ case study — Bảng Staff
Trước khi INSERT — bảng Staff trống:
| StaffID | StaffName | Gender | BranchID |
|---|---|---|---|
| (no rows) | |||
INSERT INTO Staff (StaffID, StaffName, Gender, BranchID) VALUES (1, 'Alice Brown', 'F', 101); INSERT INTO Staff (StaffID, StaffName, Gender, BranchID) VALUES (2, 'Bob Smith', 'M', 102); INSERT INTO Staff (StaffID, StaffName, BranchID) VALUES (3, 'Kim Lee', 103);
Sau khi INSERT:
| StaffID | StaffName | Gender | BranchID |
|---|---|---|---|
| 1 | Alice Brown | F | 101 |
| 2 | Bob Smith | M | 102 |
| 3 | Kim Lee | Other (DEFAULT) | 103 |
Dòng 3 không có Gender → dùng giá trị DEFAULT là 'Other'.
INSERT nhiều dòng cùng lúc
INSERT INTO Staff (StaffID, StaffName, Gender, BranchID)
VALUES (4, 'David Tan', 'M', 101),
(5, 'Emma Wilson', 'F', 102),
(6, 'Frank Chen', 'M', 103);
2. UPDATE — Sửa dữ liệu hiện có
Cú pháp
UPDATE table_name SET col1 = val1, col2 = val2, ... WHERE condition;
Ví dụ: Cập nhật một cột
Trước UPDATE — Alice Brown ở BranchID 101:
UPDATE Staff SET BranchID = 104 WHERE StaffID = 1;
Sau UPDATE — Alice Brown chuyển sang BranchID 104.
Ví dụ: Cập nhật nhiều cột cùng lúc
UPDATE Staff
SET StaffName = 'Alice Johnson',
Gender = 'F',
BranchID = 105
WHERE StaffID = 1;
UPDATE Staff SET BranchID = 104;→ Lệnh này cập nhật TẤT CẢ dòng trong bảng Staff! Không có cách hoàn tác nếu không dùng transaction.
3. DELETE — Xóa dữ liệu
Cú pháp
DELETE FROM table_name WHERE condition; COMMIT;
Ví dụ: Xóa một nhân viên
Trước DELETE — 3 nhân viên trong bảng.
DELETE FROM Staff WHERE StaffID = 3; COMMIT;
Sau DELETE — Kim Lee (StaffID=3) đã bị xóa, chỉ còn Alice và Bob.
DELETE FROM Staff;→ Xóa TOÀN BỘ dữ liệu trong bảng Staff! COMMIT sẽ làm cho điều này không thể hoàn tác.
4. Ràng buộc Foreign Key khi DELETE
Nếu bảng có Foreign Key tham chiếu, bạn phải xóa dữ liệu theo đúng thứ tự (child trước, parent sau):
DELETE FROM PropertyInspection WHERE StaffID = 3; DELETE FROM Staff WHERE StaffID = 3; COMMIT;
Nếu xóa Staff trước khi xóa PropertyInspection, MySQL sẽ báo lỗi vi phạm FK constraint.
5. COMMIT — Xác nhận thay đổi
Lệnh COMMIT xác nhận vĩnh viễn các thay đổi DML vào database. Bạn nên:
- Kiểm tra kết quả trước khi COMMIT
- Dùng
ROLLBACKnếu phát hiện lỗi (trước khi COMMIT) - Chỉ COMMIT khi chắc chắn dữ liệu đúng
INSERT INTO Staff (StaffID, StaffName, Gender, BranchID) VALUES (7, 'Grace Park', 'F', 101); SELECT * FROM Staff WHERE StaffID = 7; COMMIT;
6. AUTO_INCREMENT
Thay vì tự quản lý ID, dùng AUTO_INCREMENT:
CREATE TABLE PropertyInspection (
InspectionID INT NOT NULL AUTO_INCREMENT,
PropertyID INT NOT NULL,
InspDate DATE NOT NULL,
PRIMARY KEY (InspectionID)
);
INSERT INTO PropertyInspection (PropertyID, InspDate)
VALUES (201, '2025-03-15');
InspectionID sẽ tự động là 1, 2, 3... mà không cần cung cấp.