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 ý ạ.

Lệnh Create Trigger trong MySQL

Trong bài này bạn sẽ được học cách sử dụng lệnh Create Trigger trong MySQL, với lệnh này bạn có thể dùng để tạo ra một trigger mới bất kì.

Nếu bạn chưa biết khái niệm Trigger là gì thì mình có thể nói sơ lược như sau: Trigger là trình kích hoạt, sẽ được kích hoạt khi một tác động nào đó vào nó.

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.

Trong MySQL Trigger có nghĩa là một đoạn code SQL xử lý một chức năng nào đó, nó hoạt động ngầm và được chạy khi một trong các tác động như Insert / Update / Delete vào table.

Ví dụ: Bạn muốn khi thêm một nhân viên mới thì sẽ gửi 1 tin nhắn đến người dùng. Như vậy bạn sẽ viết trigger vào table employee, khi sự kiện insert xảy ra thì đồng thời nó sẽ thêm luôn một dòng dữ liệu vào bảng message.

1. Cách dùng lệnh Create Trigger trong MySQL

Lênh CREATE TRIGGER sẽ giúp bạn tạo ra một trigger mới, bằng cách sử dụng cú pháp sau:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE| DELETE }
ON table_name FOR EACH ROW
trigger_body;

Trong đó:

  • trigger_name là tên của trigger mà bạn muốn đặt.
  • INSERT | UPDATE| DELETE: Mỗi trigger sẽ được gắn cho một trong ba hành động này.
  • BEFORE | AFTER: Nếu bạn chọn Before thì trigger sẽ chạy trước khi hành động xảy ra, ngược lại After là sau hành động xảy ra.
  • ON table_name là table sẽ được gắn trigger này.
  • FOR EACH ROW là sẽ duyệt qua từng row.

Phần trigger_body chính là nội dung xử lý khi xảy ra sự kiện. Ta sẽ dựa vào hai biến tạm là OLD và NEW để biết đâu là dữ liệu cũ va đâu là dữ liệu mới.

Ví dụ: Khi cập nhật thông tin khách hàng thì lưu thông tin cũ vào một table backup. Lúc này để lấy thông tin cũ thì bạn sử dụng OLD.ten_field, còn thông tin mới chuẩn bị update là NEW.ten_field.

Tham khảo bảng mô tả dưới đây để biết được khi nào thì hai biến đó tồn tại.

Trigger Event OLD NEW
INSERT No Yes
UPDATE Yes Yes
DELETE Yes No

2. Ví dụ tạo Trigger trong MySQL

Trigger nói chung không khó nếu bạn hiểu bản chất của nó. Và đương nhiên để học được thì bạn phải tìm hiểu qua Procedure.

Bước 1: Hãy tạo một table employees có cấu trúc như sau.

employees png

Sau đó bạn tạo thêm một table tên là employees_audit, table này chứa thông tin cũ mà bạn đã cập nhật cho khách hàng.

CREATE TABLE employees_audit (
    id INT AUTO_INCREMENT PRIMARY KEY,
    employeeNumber INT NOT NULL,
    lastname VARCHAR(50) NOT NULL,
    changedat DATETIME DEFAULT NULL,
    action VARCHAR(50) DEFAULT NULL
);

Bây giờ mình sẽ tạo một Trigger như sau:

  • Đặt tên là before_employee_update.
  • Chọn cách hoạt động là BEFORE UPDATE.
  • Gắn vào bảng employees.
EATE TRIGGER before_employee_update 
    BEFORE UPDATE ON employees
    FOR EACH ROW 
 INSERT INTO employees_audit
 SET action = 'update',
     employeeNumber = OLD.employeeNumber,
     lastname = OLD.lastname,
     changedat = NOW();

Như bạn thấy, mình sử dụng OLD.lastnameOLD.employeeNumber để lấy thông tin cũ trong table employees.

Chạy lệnh này xong mình dùng lệnh SHOW TRIGGERS để xem trong hệ thóng có không.

SHOW TRIGGERS;

MySQL CREATE TRIGGER show triggers png

Ngoài ra, nếu bạn xem lược đồ bằng MySQL Workbench thì chọn employees > triggers bạn sẽ thấy trigger before_employee_update như trong ảnh chụp màn hình bên dưới:

MySQL create trigger example jpg

Sau đó hãy thử cập nhật một row bất kì trong table employees.

UPDATE employees 
SET 
    lastName = 'Phan'
WHERE
    employeeNumber = 1056;

Cuối cùng, truy vấn bảng employees_audit để kiểm tra xem kích hoạt có được kích hoạt bởi câu lệnh UPDATE không:

SELECT * FROM employees_audit;

Kết quả đã xuất hiện một dòng dữ liệu trong bảng này, mặc dù mình không hề chạy lệnh insert trên nó.

MySQL CREATE TRIGGER example 20 result png

Như vậy là bạn đã tạo và chạy thử thành công một trigger trong MySQL. Với trigger này thì sau này mỗi khi bạn update bảng employees thì sẽ xuất hiện một dòng data mới trong bảng employees_audit.

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