Latest Post

Tăng thứ hạng và truy cập tự nhiên với 10 phương pháp SEO hay nhất Kiếm Tiền Online (mmo): Khái Niệm và Các Hình Thức Phổ Biến

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

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *