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 Delete Trigger trong MySQL

Trong bài này chúng ta sẽ tìm hiểu Before Delete Trigger trong MySQL, đây là loại trigger sẽ xảy ra trước khi hệ thống thực hiện lệnh DELETE xóa dữ liệu.

Nếu bạn đã đọc những bài trước thì bài này quá đơn giản, bởi bản chất hoạt động của trigger là giống nhau, chỉ khác nhau ở sự kiện châm ngòi trigger mà thôi.

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.

.1 Giới thiệu Before Delete Trigger trong MySQL

Before Delete Trigger trong MySQL sẽ được gọi tự động thì bạn chạy câu lệnh delete, và nó sẽ thực hiện trước khi MySQL thực hiên câu lệnh delete đó.

Dưới đây là cú pháp cơ bản của nó:

CREATE TRIGGER trigger_name
    BEFORE DELETE
    ON table_name FOR EACH ROW
trigger_body

Trong đó trigger_name là tên của trigger mà bạn muốn đặt, table_name là tên của table mà bạn gắn trigger này.

Riêng trigger_body chính là nội dung xử lý quan trọng nhất, và nếu có nhiều lệnh thì bạn sẽ đặt trong cặp BEGIN .. END.

DELIMITER $$

CREATE TRIGGER trigger_name
    BEFORE DELETE
    ON table_name FOR EACH ROW
BEGIN
    -- statements
END$$    

Trong trigger này bạn có thể truy cập đến các giá trị OLD nhưng không thể thay đổi chúng. Riêng NEW thì không có bởi vì ta đang thực hiện câu lệnh Delete.

MySQL BEFORE DELETE Trigger png

2. Ví dụ Before Delete Trigger trong MySQL

Hãy thực hành một ví dụ về Before Delete Trigger bạn sẽ thấy dễ hiểu hơn.

Tạo table

Đầu tiên hãy tạo table Salaries lưu trữ thông tin lương của các nhân viên.

DROP TABLE IF EXISTS Salaries;

CREATE TABLE Salaries (
    employeeNumber INT PRIMARY KEY,
    validFrom DATE NOT NULL,
    amount DEC(12 , 2 ) NOT NULL DEFAULT 0
);

Tiếp theo hãy thêm một vai dòng dữ liệu để qua phần tiếp theo kiểm thử trigger.

INSERT INTO salaries(employeeNumber,validFrom,amount)
VALUES
    (1002,'2000-01-01',50000),
    (1056,'2000-01-01',60000),
    (1076,'2000-01-01',70000);

Bây giờ hãy tạo thêm bảng SalaryArchives dùng để lưu trữ lịch sử mức lương của nhân viên đã bị xóa.

DROP TABLE IF EXISTS SalaryArchives;    

CREATE TABLE SalaryArchives (
    id INT PRIMARY KEY AUTO_INCREMENT,
    employeeNumber INT PRIMARY KEY,
    validFrom DATE NOT NULL,
    amount DEC(12 , 2 ) NOT NULL DEFAULT 0,
    deletedAt TIMESTAMP DEFAULT NOW()
);

Tạo trigger

Chương trình Trigger dưới đây sẽ thêm một dòng cần xóa vào bảng SalaryArchives.

DELIMITER $$

CREATE TRIGGER before_salaries_delete
BEFORE DELETE
ON salaries FOR EACH ROW
BEGIN
    INSERT INTO SalaryArchives(employeeNumber,validFrom,amount)
    VALUES(OLD.employeeNumber,OLD.validFrom,OLD.amount);
END$$    

DELIMITER ;

Tên của trigger là before_salaries_delete, dòng BEFORE DELETE cho thấy đây là loại Before Delete Trigger. Dòng ON salaries khai báo trigger sẽ hoạt động trên table này.

Kiểm tra trigger

Ta hãy chạy một câu lệnh delete để xem có dòng nào được tự động thêm trong bảng SalaryArchives không nhé.

DELETE FROM salaries 
WHERE employeeNumber = 1002;

Hãy chạy câu Select để xem dữ liệu thế nào.

SELECT * FROM SalaryArchives;   

MySQL BEFORE DELETE Trigger example png

Trigger before_salaries_delete đã tự động gọi nên nhân viên có ID là 1002 được thêm vào bảng này.

Bây giò ta hãy xóa hai dòng còn lại bằng cách chạy câu SQL Delete tất cả.

DELETE FROM salaries;

Nếu như trigger hoạt động ổn định thì sẽ xuất hiện thêm 2 dòng nữa trong bảng SalaryArchives. Cùng xem kết quả thế nào nhé.

SELECT * FROM SalaryArchives;

MySQL BEFORE DELETE Trigger example 2 png

Trigger đã hoạt động thêm hai lần vì lệnh Delete ở trên đã thực hiện xóa 2 lần.

Như vậy là mình đã hướng dẫn xong cách sử dụng Before Delete Trigger trong MySQL, hy vọng bạn hiểu loại trigger này. Bài tiếp theo ta sẽ học về After Delete.

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