After Insert Trigger trong MySQL - MySQL nâng cao
Trong bài này chúng ta sẽ tìm hiểu After Insert Trigger trong MySQL, đây là loại trigger được gọi sau khi dữ liệu được insert vào table. Như thường lệ, chúng ta sẽ học cú pháp của nó trước, sau đó sẽ làm một vài ví dụ với các bước test trigger kỹ càng trước khi public vào dự án. ...
Trong bài này chúng ta sẽ tìm hiểu After Insert Trigger trong MySQL, đây là loại trigger được gọi sau khi dữ liệu được insert vào table.
Như thường lệ, chúng ta sẽ học cú pháp của nó trước, sau đó sẽ làm một vài ví dụ với các bước test trigger kỹ càng trước khi public vào dự án.
1. Cú pháp After Insert Trigger trong MySQL
After Insert Trigger sẽ được tự động gọi sau khi sự kiện insert xảy ra và hoàn thành.
Cú pháp dưới đây sẽ giúp bạn tạo được After Insert Trigger.
CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW trigger_body
Trong cú pháp này thì bạn chú ý lệnh AFTER INSERT
, nó giúp MySQL phân biệt được đây là loại After Insert Trigger.
Nếu bạn có nhiều dòng lệnh trong phần body thì hãy đặt nó trong cặp BEGIN .. BODY
.
DELIMITER $$ CREATE TRIGGER trigger_name AFTER INSERT ON table_name FOR EACH ROW BEGIN -- statements END$$ DELIMITER ;
Với loại trigger này bạn có thể truy xuất được giá trị của NEW nhưng không thay đổi được chúng, bởi bản chất nó đã insert xong rồi. Riêng đối với OLD thì không được vì nó không hỗ trợ trong loại INSERT
Trigger.
2. Ví dụ After Insert Trigger trong MySQL
Chúng ta sẽ làm các bước tương tự như bài trước, nhưng sẽ tạo một một số table mới và thao tác trên đó.
Tạo database
Bạn hãy chạy lệnh SQL dưới đây để tạo bảng members
.
DROP TABLE IF EXISTS members; CREATE TABLE members ( id INT AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(255), birthDate DATE, PRIMARY KEY (id) );
Tiếp theo tạo thêm bảng reminders
để lưu trữ tin nhắn nhắc nhở cho các thành viên.
DROP TABLE IF EXISTS reminders; CREATE TABLE reminders ( id INT AUTO_INCREMENT, memberId INT, message VARCHAR(255) NOT NULL, PRIMARY KEY (id , memberId) );
Tạo trigger
Đoạn code trigger dưới đây sẽ thêm một tin nhắn vào bảng reminders
nếu người dùng không nhập dữ liệu cho field birthDate
.
DELIMITER $$ CREATE TRIGGER after_members_insert AFTER INSERT ON members FOR EACH ROW BEGIN IF NEW.birthDate IS NULL THEN INSERT INTO reminders(memberId, message) VALUES(new.id,CONCAT('Hi ', NEW.name, ', please update your date of birth.')); END IF; END$$ DELIMITER ;
Mình có sử dụng lệnh if else để kiểm tra giá trị NEW.birthDate
có null hay không, nếu null thì thêm một dòng tin nhắn cho member đó.
Test Trigger
Ok, bước cuối cùng và quan trọng nhất là test xem trigger hoạt động có ổn định hay không. Khá đơn giản, ta chỉ cần thêm một vài dòng dữ liệu và xem data của 2 table là được.
Mình sẽ thêm 2 dòng dữ liệu, trong đó có 1 dòng ngày sinh có giá trị null.
INSERT INTO members(name, email, birthDate) VALUES ('John Doe', 'john.doe@example.com', NULL), ('Jane Doe', 'jane.doe@example.com','2000-01-01');
Dữ liệu lúc này trong bảng members sẽ như sau:
Nếu trigger hoạt động thì trong bảng reminders
phải sẽ được thêm một record tin nhắn, và đó chính là dòng đầu tiên.
SELECT * FROM reminders;
Dữ liệu trả về là:
Như vậy là trigger đã hoạt động đúng, bạn không còn lo lắng gì khi public nó cho dự án của mình.
Như vậy trong bài này mình đã hướng dẫn xong cách sử dụng After Insert Trigger trong MySQL. Sẽ rất đơn giản cho những bài sau khi bạn thực sự hiểu nguyên tắc hoạt động của bài này và bài trước.