Study Web

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:

StaffIDStaffNameGenderBranchID
(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:

StaffIDStaffNameGenderBranchID
1Alice BrownF101
2Bob SmithM102
3Kim LeeOther (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;
⚠️ NGUY HIỂM: Quên WHERE trong UPDATE!
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.

⚠️ NGUY HIỂM: Quên WHERE trong DELETE!
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 ROLLBACK nế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.