MySQL Triggers là gì?
MySQL Triggers là một thành phần của hệ quản lý cơ sở dữ liệu MySQL, chúng được kết nối với một bảng cụ thể. Khi có các sự kiện như INSERT, UPDATE hoặc DELETE diễn ra trong bảng, Trigger sẽ tự động kích hoạt và thực hiện các hành động được xác định trước đó. Triggers có thể được kích hoạt trước hoặc sau khi sự kiện diễn ra.
Để biết thêm chi tiết về việc sử dụng MySQL Triggers, bạn có thể tham khảo tài liệu chính thức của MySQL.
Lưu ý rằng để sử dụng MySQL Triggers, bạn cần có đặc quyền SUPERUSER trong MySQL. Do đó, không nên sử dụng Shared Hosting để triển khai Triggers. Thay vào đó, bạn nên sử dụng các dịch vụ như VPS Hosting (Virmach, HostUS) hoặc Cloud Hosting (Vultr, DigitalOcean, Linode) để đảm bảo bạn có quyền truy cập và quản lý các Trigger một cách hiệu quả.
Hướng dẫn tạo bảng History sử dụng MySQL Triggers
Một ví dụ cho cách sử dụng Triggers trong MySQL là tạo 1 bảng History để lưu lại lịch sử thay đổi của 1 bảng CSDL.
– Đầu tiên chúng ta tạo một bảng có tên là data chứa dữ liệu người dùng
CREATE TABLE data ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, fullname VARCHAR(255) NOT NULL, website VARCHAR(255) NOT NULL, created_date TIMESTAMP, updated_date TIMESTAMP );
– Tạo một bảng khác sử dụng để lưu lịch sử thay đổi của bảng data là bảng data_history
CREATE TABLE data_history ( data_history_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, data_id INT UNSIGNED NOT NULL, fullname VARCHAR(255) NOT NULL, website VARCHAR(255) NOT NULL, created_date TIMESTAMP, updated_date TIMESTAMP );
– Tạo MySQL Triggers cho từng sự kiện INSERT, UPDATE, DELETE trên bảng data
DELIMITER $ CREATE TRIGGER data_insert_history AFTER INSERT ON data FOR EACH ROW BEGIN INSERT INTO data_history ( data_id, fullname, website, created_date, updated_date ) VALUES( NEW.data_id, NEW.fullname, NEW.website, NEW.created_date, NEW.updated_date ); END$ DELIMITER ;
DELIMITER $ CREATE TRIGGER data_update_history AFTER UPDATE ON data FOR EACH ROW BEGIN INSERT INTO data_history ( data_id, fullname, website, created_date, updated_date ) VALUES( NEW.data_id, NEW.fullname, NEW.website, NEW.created_date, NEW.updated_date ); END$ DELIMITER ;
DELIMITER $ CREATE TRIGGER data_delete_history AFTER DELETE ON data FOR EACH ROW BEGIN INSERT INTO data_history ( data_id, fullname, website, created_date, updated_date, deleted_date ) VALUES( OLD.data_id, OLD.fullname, OLD.website, OLD.created_date, OLD.updated_date, NOW() ); END$ DELIMITER ;
Kết quả:
Thử test với câu lệnh Insert, update và delete
INSERT INTO `data` (`data_id`, `fullname`, `website`) VALUES ('1', 'Nguyen Van A', 'https://vinasupport.com'); UPDATE `data` SET `fullname`='Nguyen Van B' WHERE `data_id`='1'; DELETE FROM `data` WHERE `data_id`='1';
Kết quả sau khi Test trên bảng data_history