Trong bài này bạn sẽ được học cách sử dụng lệnh Create Trigger trong MySQL, với lệnh này bạn có thể dùng để tạo ra một trigger mới bất kì.
Nếu bạn chưa biết khái niệm Trigger là gì thì mình có thể nói sơ lược như sau: Trigger là trình kích hoạt, sẽ được kích hoạt khi một tác động nào đó vào nó.
Trong MySQL Trigger có nghĩa là một đoạn code SQL xử lý một chức năng nào đó, nó hoạt động ngầm và được chạy khi một trong các tác động như Insert / Update / Delete vào table.
Ví dụ: Bạn muốn khi thêm một nhân viên mới thì sẽ gửi 1 tin nhắn đến người dùng. Như vậy bạn sẽ viết trigger vào table employee, khi sự kiện insert xảy ra thì đồng thời nó sẽ thêm luôn một dòng dữ liệu vào bảng message.
Bài viết này được đăng tại tranvanbinh.vn
Mục lục
- 1. Cách dùng lệnh Create Trigger trong MySQL
- 2. Ví dụ tạo Trigger trong MySQL
1. Cách dùng lệnh Create Trigger trong MySQL
Lênh CREATE TRIGGER
sẽ giúp bạn tạo ra một trigger mới, bằng cách sử dụng cú pháp sau:
1 2 3 4 | CREATE TRIGGER trigger_name {BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON table_name FOR EACH ROW trigger_body; |
Trong đó:
trigger_name
là tên của trigger mà bạn muốn đặt.INSERT | UPDATE| DELETE
: Mỗi trigger sẽ được gắn cho một trong ba hành động này.BEFORE | AFTER
: Nếu bạn chọn Before thì trigger sẽ chạy trước khi hành động xảy ra, ngược lại After là sau hành động xảy ra.ON table_name
là table sẽ được gắn trigger này.FOR EACH ROW
là sẽ duyệt qua từng row.
Phần trigger_body
chính là nội dung xử lý khi xảy ra sự kiện. Ta sẽ dựa vào hai biến tạm là OLD và NEW để biết đâu là dữ liệu cũ va đâu là dữ liệu mới.
Ví dụ: Khi cập nhật thông tin khách hàng thì lưu thông tin cũ vào một table backup. Lúc này để lấy thông tin cũ thì bạn sử dụng OLD.ten_field
, còn thông tin mới chuẩn bị update là NEW.ten_field
.
Tham khảo bảng mô tả dưới đây để biết được khi nào thì hai biến đó tồn tại.
Trigger Event | OLD | NEW |
INSERT | No | Yes |
UPDATE | Yes | Yes |
DELETE | Yes | No |
2. Ví dụ tạo Trigger trong MySQL
Trigger nói chung không khó nếu bạn hiểu bản chất của nó. Và đương nhiên để học được thì bạn phải tìm hiểu qua Procedure.
Bước 1: Hãy tạo một table employees
có cấu trúc như sau.
Sau đó bạn tạo thêm một table tên là employees_audit
, table này chứa thông tin cũ mà bạn đã cập nhật cho khách hàng.
1 2 3 4 5 6 7 | CREATE TABLE employees_audit ( id INT AUTO_INCREMENT PRIMARY KEY , employeeNumber INT NOT NULL , lastname VARCHAR (50) NOT NULL , changedat DATETIME DEFAULT NULL , action VARCHAR (50) DEFAULT NULL ); |
Bây giờ mình sẽ tạo một Trigger như sau:
- Đặt tên là
before_employee_update
. - Chọn cách hoạt động là
BEFORE UPDATE
. - Gắn vào bảng
employees
.
1 2 3 4 5 6 7 8 | EATE TRIGGER before_employee_update BEFORE UPDATE ON employees FOR EACH ROW INSERT INTO employees_audit SET action = 'update' , employeeNumber = OLD.employeeNumber, lastname = OLD.lastname, changedat = NOW(); |
Như bạn thấy, mình sử dụng OLD.lastname
và OLD.employeeNumber
để lấy thông tin cũ trong table employees
.
Chạy lệnh này xong mình dùng lệnh SHOW TRIGGERS
để xem trong hệ thóng có không.
1 | SHOW TRIGGERS; |
Ngoài ra, nếu bạn xem lược đồ bằng MySQL Workbench thì chọn employees > triggers bạn sẽ thấy trigger before_employee_update như trong ảnh chụp màn hình bên dưới:
Sau đó hãy thử cập nhật một row bất kì trong table employees
.
1 2 3 4 5 | UPDATE employees SET lastName = 'Phan' WHERE employeeNumber = 1056; |
Cuối cùng, truy vấn bảng employees_audit
để kiểm tra xem kích hoạt có được kích hoạt bởi câu lệnh UPDATE không:
1 | SELECT * FROM employees_audit; |
Kết quả đã xuất hiện một dòng dữ liệu trong bảng này, mặc dù mình không hề chạy lệnh insert trên nó.
Như vậy là bạn đã tạo và chạy thử thành công một trigger trong MySQL. Với trigger này thì sau này mỗi khi bạn update bảng employees
thì sẽ xuất hiện một dòng data mới trong bảng employees_audit
.
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================