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: