VIEW
STORED PROCEDURE
INDEX
FULL TEXT SEARCH
TRIGGER
TIPS
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

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.

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.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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

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.

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

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:

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.

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.

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.

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.

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:

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.

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

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!

Cùng chuyên mục:

Hàm ENCRYPT trong MySQL

Hàm ENCRYPT trong MySQL

Cách sử dụng ENCRYPT trong MySQL

Hàm MD5 trong MySQL

Hàm MD5 trong MySQL

Cách sử dụng MD5 trong MySQL

Hàm OLD_PASSWORD trong MySQL

Hàm OLD_PASSWORD trong MySQL

Cách sử dụng OLD_PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Hàm PASSWORD trong MySQL

Cách sử dụng PASSWORD trong MySQL

Hàm ASCII trong MySQL

Hàm ASCII trong MySQL

Cách sử dụng ASCII trong MySQL

Hàm CHAR_LENGTH trong MySQL

Hàm CHAR_LENGTH trong MySQL

Cách sử dụng CHAR_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Hàm CHARACTER_LENGTH trong MySQL

Cách sử dụng CHARACTER_LENGTH trong MySQL

Hàm CONCAT trong MySQL

Hàm CONCAT trong MySQL

Cách sử dụng CONCAT trong MySQL

Hàm CONCAT_WS trong MySQL

Hàm CONCAT_WS trong MySQL

Cách sử dụng CONCAT_WS trong MySQL

Hàm FIELD trong MySQL

Hàm FIELD trong MySQL

Cách sử dụng FIELD trong MySQL

Hàm FIND_IN_SET trong MySQL

Hàm FIND_IN_SET trong MySQL

Cách sử dụng FIND_IN_SET trong MySQL

Hàm FORMAT trong MySQL

Hàm FORMAT trong MySQL

Cách sử dụng FORMAT trong MySQL

Hàm INSERT trong MySQL

Hàm INSERT trong MySQL

Cách sử dụng INSERT trong MySQL

Hàm INSTR trong MySQL

Hàm INSTR trong MySQL

Cách sử dụng INSTR trong MySQL

Hàm LCASE trong MySQL

Hàm LCASE trong MySQL

Cách sử dụng LCASE trong MySQL

Hàm LEFT trong MySQL

Hàm LEFT trong MySQL

Cách sử dụng LEFT trong MySQL

Hàm LENGTH trong MySQL

Hàm LENGTH trong MySQL

Cách sử dụng LENGTH trong MySQL

Hàm LOCATE trong MySQL

Hàm LOCATE trong MySQL

Cách sử dụng LOCATE trong MySQL

Hàm LOWER trong MySQL

Hàm LOWER trong MySQL

Cách sử dụng LOWER trong MySQL

Hàm LPAD trong MySQL

Hàm LPAD trong MySQL

Cách sử dụng LPAD trong MySQL

Top