Trigger trong MySQL là một cơ chế tự động thực hiện một tập các câu lệnh SQL khi có một sự kiện cụ thể xảy ra trong cơ sở dữ liệu, chẳng hạn như thêm, cập nhật, hoặc xóa dữ liệu. Nó giúp bạn tự động hóa các quy trình, bảo vệ tính toàn vẹn dữ liệu, và thực hiện các thao tác phức tạp mà không cần can thiệp thủ công.
INSERT
, UPDATE
, hoặc DELETE
. Trigger có thể được thiết lập để kích hoạt trước hoặc sau khi sự kiện xảy ra:
UPDATE
, INSERT
, DELETE
, hoặc gọi đến các thủ tục.Cú pháp để tạo một trigger trong MySQL:
orders
orders
.orders
.COMMIT
hoặc ROLLBACK
.Trigger giúp bạn tự động hóa các tác vụ lặp lại, đảm bảo tính toàn vẹn dữ liệu và dễ dàng quản lý sự phức tạp trong hệ thống cơ sở dữ liệu.
Dưới đây là các ví dụ chi tiết về Trigger trong MySQL, bao gồm các loại trigger khác nhau như BEFORE INSERT
, AFTER INSERT
, BEFORE UPDATE
, AFTER UPDATE
, BEFORE DELETE
, và AFTER DELETE
. Những ví dụ này sẽ giúp bạn hiểu rõ hơn cách sử dụng trigger trong các tình huống thực tế.
BEFORE INSERT
Trigger BEFORE INSERT
được kích hoạt trước khi một bản ghi mới được chèn vào bảng. Trigger này có thể được sử dụng để thực hiện kiểm tra hoặc thay đổi dữ liệu trước khi chèn.
Khi một người dùng đăng ký mới, ta muốn tự động điền giá trị mặc định cho trường created_at
nếu người dùng không cung cấp.
created_at
orders
, dữ liệu đơn hàng sẽ được ghi lại vào bảng order_history
.BEFORE UPDATE
Trigger BEFORE UPDATE
được kích hoạt trước khi một bản ghi được cập nhật. Nó có thể được sử dụng để kiểm tra hoặc thay đổi dữ liệu trước khi bản ghi thực sự được cập nhật.
Trong hệ thống quản lý nhân viên, nếu cập nhật mức lương của nhân viên, bạn muốn đảm bảo rằng mức lương không được giảm xuống dưới mức lương hiện tại.
AFTER UPDATE
order_history
sau khi đơn hàng được cập nhật.BEFORE DELETE
Trigger BEFORE DELETE
được kích hoạt trước khi một bản ghi bị xóa. Nó có thể được sử dụng để kiểm tra hoặc thực hiện các tác vụ trước khi dữ liệu bị xóa.
Trước khi xóa một tài khoản người dùng, chúng ta muốn ghi lại thông tin của người dùng đó vào bảng deleted_users
.
deleted_users
orders
, các mục tương ứng trong bảng order_items
cũng sẽ bị xóa theo.BEFORE INSERT
với kiểm tra điều kiệnTrigger này có thể dùng để kiểm tra dữ liệu đầu vào trước khi chèn. Ví dụ, bạn muốn đảm bảo rằng không ai có thể đăng ký người dùng với tuổi nhỏ hơn 18.
AFTER INSERT
Các Trigger trong MySQL giúp bạn tự động hóa nhiều quy trình quản lý cơ sở dữ liệu phức tạp, bảo đảm tính toàn vẹn dữ liệu và tự động thực hiện các tác vụ cần thiết khi có sự thay đổi trong bảng. Tùy thuộc vào nhu cầu, bạn có thể chọn loại trigger phù hợp (BEFORE/AFTER INSERT, UPDATE, DELETE) để đảm bảo hoạt động tối ưu.