Giới thiệu
Trigger AFTER INSERT trên bảng A tự động chèn/cập nhật dữ liệu vào bảng B.
1. Tạo 2 bảng
mysql> create table DemoTable1 (
-> Id int,
-> FirstName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)
mysql> create table DemoTable2 (
-> EmployeeId int,
-> EmployeeName varchar(20)
-> );
Query OK, 0 rows affected (0.51 sec)
2. Tạo trigger
mysql> DELIMITER //
mysql> CREATE TRIGGER updateDemoOnInsert
-> AFTER INSERT ON DemoTable2
-> FOR EACH ROW BEGIN
-> insert into DemoTable1 values(110, 'Adam');
-> END
-> //
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;
Giải thích:
AFTER INSERT: Kích hoạt sau khi INSERT thành công trên DemoTable2FOR EACH ROW: Chạy cho mỗi hàng được chèn- Trong trigger có thể dùng
NEW.columnđể lấy giá trị hàng mới chèn
3. Chèn vào bảng 2
mysql> insert into DemoTable2 values(101, 'Mike'); Query OK, 1 row affected (0.22 sec)
4. Kiểm tra bảng 2
mysql> select * from DemoTable2;
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 101 | Mike | +------------+--------------+ 1 row in set (0.00 sec)
5. Kiểm tra bảng 1 (tự động được chèn)
mysql> select * from DemoTable1;
+------+-----------+ | Id | FirstName | +------+-----------+ | 110 | Adam | +------+-----------+ 1 row in set (0.00 sec)
Ví dụ thực tế hơn (dùng NEW):
CREATE TRIGGER audit_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (table_name, action, record_id, created_at)
VALUES ('employees', 'INSERT', NEW.id, NOW());
END;
Lưu ý: Trigger làm chậm INSERT. Tránh logic phức tạp trong trigger.