http://vietjack.com/sqlite/index.jsp Copyright © vietjack.com Trigger SQLite Các Trigger SQLite hàm callback, mà tự động thực hiện/triệu hồi xuất kiện sở liệu Sau số điểm quan trọng Trigger SQLite: • Trigger SQLite xác định để kích hoạt DELETE, INSERT UPDATE bảng liệu cụ thể UPDATE xuất cột cụ thể trông bảng • Tại thời điểm này, SQLite hỗ trợ Trigger dạng FOR EACH ROW, không hỗ trợ Trigger dạng FOR EACH STATEMENT Vì thế, việc xác định FOR EACH ROW tùy ý • Cả mệnh đề WHERE hành động Trigger truy cập phần tử hàng chèn, bị xóa cập nhật sử dụng tham chiếu theo mẫu NEW.column-name OLD.column-name, với column-name tên cột từ bảng mà Trigger gắn kết với • Nếu cung cấp mệnh đề WHERE, lệnh SQLite xác định thực thi cho hàng mà mệnh đề WHERE true Nếu khơng có mệnh đề WHERE nào, lệnh SQLite thực thi cho tất hàng • Từ khóa BEFORE AFTER xác định hành động Trigger thực thi • Các Trigger tự động bị xóa bảng, mà chúng gắn kết với, bị xóa • Bảng để sửa đổi phải tồn sở liệu với bảng view mà Trigger gắn kết • Một hàm SQLite đặc biệt hàm RAISE() sử dụng bên Trigger để tạo ngoại lệ (exception) Cú pháp Cú pháp để tạo Trigger SQLite sau: CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name Trigger logic goes here END; ON table_name BEGIN http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/sqlite/index.jsp Copyright © vietjack.com Ở đây, event_name INSERT, DELETE UPDATE bảng table_name Bạn xác định FOR EACH ROW cách tùy ý sau tên bảng Sau cú pháp để tạo Trigger hoạt động UPDATE nhiều cột cụ thể bảng: CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name table_name BEGIN Trigger logic goes here END; ON Ví dụ Giả sử tình bạn muốn dùng tính Audit Trial (kiểm tra dấu vết) cho ghi chèn bảng COMPANY tạo (xóa bảng bạn có) sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY TEXT NOT NULL, AGE INT NOT NULL, CHAR(50), SALARY REAL ); NOT NULL, ADDRESS NAME Để thực Audit Trial, tạo bảng AUDIT, với thông báo log chèn vào entry tạo ghi vào bảng COMPANY sqlite> CREATE TABLE AUDIT( NULL ); EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT Ở đây, ID Record ID bảng AUDIT, EMP_ID ID mà đến từ bảng COMPANY DATE giữ Timestamp ghi tạo bảng COMPANY Bây giờ, tạo Trigger bảng COMPANY sau: sqlite> CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END; INSERT INTO Lúc này, bắt đầu công việc thực sự: bắt đầu chèn ghi vào bảng COMPANY cho kết tạo ghi audit log bảng AUDIT Giả sử tạo ghi sau: sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); Trong bảng COMPANY, ta có ghi sau: http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/sqlite/index.jsp Copyright © vietjack.com ID -California NAME -20000.0 AGE ADDRESS SALARY -Paul 32 Cùng lúc đó, ghi tạo bảng AUDIT Bản ghi kết Trigger, mà tạo hoạt động INSERT bảng COMPANY Tương tự, bạn tạo Trigger hoạt động UPDATE DELETE tùy theo yêu cầu bạn EMP_ID 06:26:00 ENTRY_DATE - 2013-04-05 Liệt kê Trigger SQLite Bạn liệt kê Trigger từ bảng sqlite_masert sau: sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger'; Lệnh liệt kê entry là: name audit_log Nếu bạn muốn liệt kê Trigger bảng cụ thể, bạn sử dụng mệnh đề AND với tên bảng, sau: sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'COMPANY'; Lệnh liệt kê entry là: name audit_log Xóa Trigger SQLite Lệnh DROP SQLite sử dụng để xóa Trigger tồn sqlite> DROP TRIGGER trigger_name; http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ... sau: sqlite> SELECT name FROM sqlite_ master WHERE type = 'trigger' AND tbl_name = 'COMPANY'; Lệnh liệt kê entry là: name audit_log Xóa Trigger SQLite Lệnh DROP SQLite sử dụng để xóa Trigger. .. SQLite Bạn liệt kê Trigger từ bảng sqlite_ masert sau: sqlite> SELECT name FROM sqlite_ master WHERE type = 'trigger' ; Lệnh liệt kê entry là: name audit_log Nếu bạn muốn liệt kê Trigger bảng cụ... sau tên bảng Sau cú pháp để tạo Trigger hoạt động UPDATE nhiều cột cụ thể bảng: CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name table_name BEGIN Trigger logic goes here END; ON