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

After Insert Trigger trong MySQL

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.

Mục lục

  • 1. Cú pháp After Insert Trigger trong MySQL
  • 2. Ví dụ After Insert Trigger trong MySQL
    • Tạo database
    • Tạo trigger
    • Test Trigger

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.

Bài viết này được đăng tại [tranvanbinh.vn]

1
2
3
4
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.

1
2
3
4
5
6
7
8
9
10
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.

MySQL AFTER INSERT Trigger png

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.

1
2
3
4
5
6
7
8
9
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.

1
2
3
4
5
6
7
8
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.

1
2
3
4
5
6
7
8
9
10
11
12
13
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.

1
2
3
4
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:

MySQL AFTER INSERT Trigger example png

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.

1
SELECT * FROM reminders;

Dữ liệu trả về là:

MySQL AFTER INSERT Trigger Output png

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.

=============================
* 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

=============================
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