14/08/2018, 11:42

Trigger trong SQLite

Các Trigger trong SQLite là các hàm callback, mà tự động được thực hiện/triệu hồi khi một xuất hiện một sự kiện trong cơ sở dữ liệu. Sau đây là một số điểm quan trọng về Trigger trong SQLite: Cú pháp Cú pháp cơ bản để tạo một Trigger trong SQLite là như sau: CREATE TRIGGER ...

Các Trigger trong SQLite là các hàm callback, mà tự động được thực hiện/triệu hồi khi một xuất hiện một sự kiện trong cơ sở dữ liệu. Sau đây là một số điểm quan trọng về Trigger trong SQLite:

Cú pháp

Cú pháp cơ bản để tạo một Trigger trong SQLite là như sau:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;

Ở đây, event_name có thể là INSERT, DELETE và UPDATE trên bảng table_name. Bạn có thể xác định FOR EACH ROW một cách tùy ý sau tên bảng.

Sau đây là cú pháp để tạo một Trigger trên một hoạt động UPDATE trên một hoặc nhiều cột cụ thể của một bảng:

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
 -- Trigger logic goes here....
END;

Ví dụ

Giả sử một tình huống khi bạn muốn dùng tính năng Audit Trial (kiểm tra dấu vết) cho mỗi bản ghi đang được chèn trong bảng COMPANY được tạo mới như dưới đây (xóa bảng này nếu bạn đã có).

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Để thực hiện Audit Trial, chúng ta sẽ tạo một bảng mới là AUDIT, với các thông báo log sẽ được chèn vào bất cứ khi nào một entry tạo một bản ghi mới vào bảng COMPANY này.

sqlite> CREATE TABLE AUDIT(
    EMP_ID INT NOT NULL,
    ENTRY_DATE TEXT NOT NULL
);

Ở đây, ID là Record ID của bảng AUDIT, và EMP_ID là ID mà đến từ bảng COMPANY và DATE sẽ giữ Timestamp khi bản ghi được tạo trong bảng COMPANY. Bây giờ, chúng ta tạo một Trigger trên bảng COMPANY này như sau:

sqlite> CREATE TRIGGER audit_log AFTER INSERT 
ON COMPANY
BEGIN
   INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

Lúc này, chúng ta sẽ bắt đầu công việc thực sự: bắt đầu chèn bản ghi vào trong bảng COMPANY và sẽ cho kết quả là tạo một bản ghi audit log trong bảng AUDIT. Giả sử chúng ta tạo bản ghi như sau:

sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

Trong bảng COMPANY, ta sẽ có bản ghi sau:

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0

Cùng lúc đó, một bản ghi sẽ được tạo trong bảng AUDIT. Bản ghi này là kết quả của một Trigger, mà chúng ta đã tạo trên hoạt động INSERT trên bảng COMPANY. Tương tự, bạn có thể tạo các Trigger trên các hoạt động UPDATE và DELETE tùy theo yêu cầu của bạn.

EMP_ID      ENTRY_DATE
----------  -------------------
1           2013-04-05 06:26:00

Liệt kê Trigger trong SQLite

Bạn có thể liệt kê các Trigger từ bảng sqlite_masert như sau:

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger';

Lệnh trên sẽ chỉ liệt kê một entry là:

name
----------
audit_log

Nếu bạn muốn liệt kê các Trigger trên một bảng cụ thể, bạn sử dụng mệnh đề AND với tên bảng, như sau:

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';

Lệnh trên sẽ chỉ liệt kê một entry là:

name
----------
audit_log

Xóa Trigger trong SQLite

Lệnh DROP trong SQLite có thể được sử dụng để xóa một Trigger đang tồn tại.

sqlite> DROP TRIGGER trigger_name;

Follow fanpage của team https://www.facebook.com/vietjackteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Các bài học SQLite phổ biến khác tại code24h:

0