Thứ Tư, 26 tháng 7, 2023

Lệnh Create Trigger trong MySQL

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 EventOLDNEW
INSERTNoYes
UPDATEYesYes
DELETEYesNo

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.

employees png

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;

MySQL CREATE TRIGGER show triggers png

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:

MySQL create trigger example jpg

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ó.

MySQL CREATE TRIGGER example 20 result png

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

=============================
Lệnh Create Trigger trong MySQL, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master