Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cập nhật bảng khác khi INSERT với TRIGGER trong MySQL

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 DemoTable2
  • FOR 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.