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

Before Insert Trigger trong MySQL

Trong bài này mình ta sẽ tìm hiểu Before Insert Trigger trong MySQL, thông qua đó bạn sẽ nắm rõ hơn cách tao một trigger xử lý trước khi insert dữ liệu vào database.

Mục lục

  • 1. Tìm hiểu Before Insert Trigger trong MySQL
  • 2. Ví dụ Before Insert Trigger trong MySQL
    • Tạo database
    • Tạo Trigger
    • Test trigger

1. Tìm hiểu Before Insert Trigger trong MySQL

Giống như tên gọi của nó, đây là loại trigger sẽ được gọi trước khi insert dữ liệu vào table, điều này khác hoàn toàn với After Trigger.

Cú pháp dưới đây giúp bạn tạo ra loại trigger này:

1
2
3
4
CREATE TRIGGER trigger_name
    BEFORE INSERT
    ON table_name FOR EACH ROW
trigger_body;

Về cú pháp cơ bản thì chúng ta đã được học ở bài trước, riêng bài này thì công thức xác định rõ là loại BEFORE INSERT.

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

Nếu trong trigger của bạn có nhiều câu lệnh SQL thì phải đặt nó trong cặp BEGIN .. END nhé.

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
 
CREATE TRIGGER trigger_name
    BEFORE INSERT
    ON table_name FOR EACH ROW
BEGIN
    -- statements
END$$   
 
DELIMITER ;

Lưu ý rằng trong loại trigger này bạn có thể truy cập lấy dữ liệu mới, nhưng riêng dữ liệu cũ là không được bởi vì bản chất nó chưa đụng gì tới dữ liệu cũ nên không được lưu vết. Tức là dùng NEW.field_name thì được, OLD.field_name là không được.

MySQL BEFORE INSERT Trigger png

2. Ví dụ Before Insert Trigger trong MySQL

Chúng ta sẽ tạo một before insert trigger để ...

Tạo database

Đầu tiên mình tạo một table có tên là WorkCenters như sau:

1
2
3
4
5
6
7
DROP TABLE IF EXISTS WorkCenters;
 
CREATE TABLE WorkCenters (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    capacity INT NOT NULL
);

Tiếp theo mình tạo một bảng WorkCenterStats để lưu trữ tổng công suất làm việc.

1
2
3
4
5
DROP TABLE IF EXISTS WorkCenterStats;
 
CREATE TABLE WorkCenterStats(
    totalCapacity INT NOT NULL
);

Tạo Trigger

Bây giờ mình tạo một before insert trigger, khi thêm một dữ liệu mới vào table WorkCenterStats thì sẽ cập nhật tổng công suất làm việc.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER $$
 
CREATE TRIGGER before_workcenters_insert
BEFORE INSERT
ON WorkCenters FOR EACH ROW
BEGIN
    DECLARE rowcount INT;
     
    SELECT COUNT(*)
    INTO rowcount
    FROM WorkCenterStats;
     
    IF rowcount > 0 THEN
        UPDATE WorkCenterStats
        SET totalCapacity = totalCapacity + new.capacity;
    ELSE
        INSERT INTO WorkCenterStats(totalCapacity)
        VALUES(new.capacity);
    END IF;
 
END $$
 
DELIMITER ;

Đoạn code trên xảy ra hai trường hợp:

Nếu thêm vào lần đầu tiên thì ta phải sử dụng lệnh insert, lúc này capacity chính là giá trị nhập vào luôn.

1
2
INSERT INTO WorkCenterStats(totalCapacity)
VALUES(new.capacity);

Nếu thêm vào các lần tiếp theo thì ta update cộng dồn capacity lên.

1
2
UPDATE WorkCenterStats
SET totalCapacity = totalCapacity + new.capacity;

Test trigger

Bây giờ hãy thử insert một vài dòng dữ liệu vào để xem trigger có hoạt động không nhé.

Đầu tiên mình chạy lệnh thêm dữ liệu như sau:

1
2
INSERT INTO WorkCenters(name, capacity)
VALUES('Mold Machine',100);

Tiếp theo truy vấn vào table WorkCenterStats xem có gì trong đó không.

1
SELECT * FROM WorkCenterStats;

MySQL BEFORE INSERT Trigger Example png

Tuyệt vời, dữ liệu đã tự động thêm vào.

Hãy thử insert thêm một dòng dữ liệu nữa nhé.

1
2
INSERT INTO WorkCenters(name, capacity)
VALUES('Packing',200);

Chạy câu lệnh này xong thì totalCapacity phải có giá trị 300. Và đúng như thế thật.

MySQL BEFORE INSERT Trigger Example 2 png

Như vậy là trigger đã hoạt động đúng. Đây là các bước test quan trọng để kiểm tra trigger có hoạt động tốt hay không.

Trên là cách tạo before insert trigger trong MySQL. Nội dung khá đơn giản, bạn chỉ việc làm theo từng bước là sẽ hiểu được bài. Chúc bạn thực hiện thành công!

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