Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: [SQL 9.3] Trigger ghi AuditLog khi đổi trạng thái khách hàng

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 9: Stored Procedure & Trigger (cơ bản) — khóa SQL

    Tạo trigger trg_Customers_StatusAudit trên bảng Customers, kích hoạt sau khi UPDATE. Với mỗi khách hàng mà status thật sự thay đổi (giá trị mới khác giá trị cũ) ghi một dòng vào AuditLog(customer_id, old_status, new_status). Cập nhật cột khác (ví dụ city) hoặc gán lại đúng trạng thái cũ thì không ghi log. Cột log_id, changed_at tự sinh — không cần điền.

    • SQL Server: dùng inserted (giá trị mới) và deleted (giá trị cũ), ghép theo customer_id; một câu UPDATE có thể đổi nhiều khách hàng.
    • MySQL: FOR EACH ROW, so sánh OLD.status và NEW.status.

    Hệ thống chấm chạy vài câu UPDATE (đổi trạng thái nhiều khách hàng, đổi city, đổi trạng thái lần thứ hai cho cùng khách hàng) rồi in customer_id, old_status, new_status của AuditLog theo customer_id, log_id.

    • Định dạng đầu vào:

      Bảng Customers(customer_id, status), AuditLog(log_id, customer_id, old_status, new_status, changed_at).

    • Định dạng đầu ra:

      customer_id, old_status, new_status (TAB), sắp theo customer_id rồi log_id.

    Ví dụ:

    Đầu vào:

    Đầu ra:

    1	ACTIVE	INACTIVE
    1	INACTIVE	ACTIVE
    5	NEW	ACTIVE
    7	ACTIVE	INACTIVE

    Giải thích:

    KH4 đã INACTIVE nên không ghi log; KH1 đổi 2 lần nên có 2 dòng log; KH2 chỉ đổi city nên không có log.

    Chủ đề

    📊 SQLSQLSQL: Buổi 9 – Stored Procedure & TriggerTất cả môn học

    Đang tải editor...