Hướng dẫn create trigger mysql workbench - tạo bàn làm việc mysql kích hoạt
MySQL Triggers là gì?MySQL Triggers là một đối tượng CSDL trong MySQL được liên kết với một bảng. Khi một sự kiện INSERT, UPDATE, DELETE xảy ra trong bảng CSDL thì Trigger sẽ được kích hoạt và thực thi một nhiệm vụ mà bạn mong muốn. Triggers có thể được kích hoạt trước và sau khi sự kiện đó được thực hiện. Show Để hiểu thêm về định nghĩa, các bạn vui lòng tham khảo tài liệu chính thống của MySQL. Yêu cầu chính để chạy MySQL Triggers là có các đặc quyền của MySQL SUPERUSER. Vì vậy để có thể sử dụng MySQL Triggers các bạn không nên sử dụng Shared Hosting, mà hãy sử dụng VPS Hosting (Virmach, HostUS) hoặc Cloud Hosting (Vultr, DigitalOcean, Linode) Hướng dẫn tạo bảng History sử dụng MySQL TriggersMộ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ùngdata 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_historydata_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 I. Trigger là gì?Trigger là một đối tượng được định danh trong CSDL và được gắn chặt với một sự kiện xảy ra trên một bảng nào đó (điều này có nghĩa là nó sẽ được tự động thực thi khi xảy ra một sự kiện trên một bảng). Các sự kiện này bao gồm: INSERT, UPDATE hay DELETE một bảng. là một đối tượng được định danh trong CSDL và được gắn chặt với một sự kiện xảy ra trên một bảng nào đó (điều này có nghĩa là nó sẽ được tự động thực thi khi xảy ra một sự kiện trên một bảng). Các sự kiện này bao gồm: INSERT, UPDATE hay DELETE một bảng. Trigger được đưa vào MySQL từ phiên bản 5.0.2 được đưa vào MySQL từ phiên bản 5.0.2 II. Tại sao lại sử dụng Trigger?Trigger được thực thi tự động khi xuất hiện một hành động thay đổi trong bảng, nên người ta có thể ứng dụng trigger để tạo ra các công việc tự động thay cho việc phải làm thủ công bằng tay như: kiểm tra dữ liệu, đồng bộ hóa dữ liệu, đảm bảo các mối quan hệ giữa các bảng... được thực thi tự động khi xuất hiện một hành động thay đổi trong bảng, nên người ta có thể ứng dụng trigger để tạo ra các công việc tự động thay cho việc phải làm thủ công bằng tay như: kiểm tra dữ liệu, đồng bộ hóa dữ liệu, đảm bảo các mối quan hệ giữa các bảng... III. Ưu nhược điểm của trigger- Ưu điểm: – Dễ dàng kiểm tra tính toàn vẹn của csdl. – Trigger có thể bắt lỗi logic nghiệp vụ (business logic) ở mức csdl. – Có thể dùng trigger là một cách khác để thay thế việc thực hiện những công việc hẹn theo giờ theo lịch. – Trigger rất hiệu quả khi được sử dụng để kiểm soát những thay đổi của dữ liệu trong bảng. - Nhược điểm: – Trigger chỉ là một phần mở rộng của việc kiểm tra tính hợp lệ của dữ liệu chứ không thay thế được hoàn toàn công việc này. – Trigger hoạt động ngầm ở trong csdl, không hiển thị ở tầng giao diện. Do đó, khó chỉ ra được điều gì xảy ra ở tầng csdl. – Trigger thực hiện các update lên bảng dữ liệu vì thế nó làm gia tăng lượng công việc lên csdl và làm cho hệ thống chạy chậm. IV. Hoạt động của trigger trong MySQLKhi bạn tạo ra một trigger trong MySQL thì định nghĩa của nó được lưu trong tập tin có phần mở rộng là ‘.TRG’ tại thư mục của csdl.
Chúng ta có thể mở ra và chỉnh sửa. Một số giới hạn cần chú ý khi sử dụng trigger:
V. Tạo triggerCú pháp:
Giải thích:
Chúng ta đã có bảng products trong csdl với cấu trúc như sau:
Viết trigger, bất cứ khi nào xảy ra việc thay đổi dữ liệu trên bảng products thì những thay đổi đó sẽ được ghi nhận và được đưa vào lưu ở một bảng khác. Chúng ta tạo một bảng mới thực hiện chức năng này với cấu trúc như sau:
Để theo dõi nhưng thay đổI chỉnh sửa của products chúng ta tạo ra một trigger theo dõi lệnh update trên trường dữ liệu này. 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 );0 Bây giờ chúng ta test thử câu lệnh update: 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 );1 sau đó ta thấy table products đã thay đổi 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 );2 và table products_tmp đã lưu item đã chỉnh sửa. 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 );3 oke, vậy là trigger đã tạo thành công. VI. Quản lý trigger trong MySQLQuản lý các trigger được tạo ra trong csdl là một thao tác cần nắm vững. MySQL cho phép chúng ta xem danh sách các trigger có trong csdl bằng các câu lệnh sau:
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 );4
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 );5 KL: Việc quản lý data có dung lượng lớn không hề đơn giản, không phải ai cũng sử dụng 1 cách thuần thục. Rất có thể sẽ có người xóa nhầm trong CSDL, Sẽ gây ảnh hưởng không nhỏ, nếu dữ liệu đó quan trọng. Dùng trigger có thể lấy lại những dữ liệu đã bị xóa. Có thể theo dõi ai đó xóa, sửa, xóa ngày nào , giờ nào. Tuy nhiên chúng ta cũng cần lưu ý, tạo nhiều Trigger thực hiện các update lên bảng dữ liệu nó làm gia tăng lượng công việc lên csdl và làm cho hệ thống chạy chậm. |