SQLite觸發(fā)器(更新之前/之后)指定了如何在更新數(shù)據(jù)后執(zhí)行觸發(fā)器操作。 假設(shè)有兩個(gè)表company和audit,在這里要對(duì)在company表中的每個(gè)記錄更新時(shí)進(jìn)行審核。
創(chuàng)建company表的語(yǔ)句 -
CREATE TABLE company(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
創(chuàng)建一個(gè)名為audit的新表,用于在company表中有更新時(shí)插入日志消息。
CREATE TABLE audit(
EMP_ID INT NOT NULL,
ACTION_TYPE TEXT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
創(chuàng)建更新后的觸發(fā)器:
使用以下語(yǔ)法創(chuàng)建名為“after_up”的觸發(fā)器,在COMPANY表上更新操作后觸發(fā)此觸發(fā)器。
CREATE TRIGGER after_up AFTER UPDATE
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ACTION_TYPE, ENTRY_DATE) VALUES (new.ID, 'AFTER UPDATE', datetime('now'));
END;
現(xiàn)在更新一條記錄數(shù)據(jù),如下:
UPDATE COMPANY SET ADDRESS = 'Shenzhen' WHERE ID = 1;
查看已創(chuàng)建的觸發(fā)器 -
SELECT name FROM sqlite_master WHERE type = 'trigger';
執(zhí)行上面語(yǔ)句,看到以下結(jié)果 -

如果要?jiǎng)?chuàng)建在更新數(shù)據(jù)之前的觸發(fā)器,請(qǐng)參考以下語(yǔ)句 -
CREATE TRIGGER befor_up BEFORE UPDATE
ON COMPANY
BEGIN
INSERT INTO AUDIT(EMP_ID, ACTION_TYPE, ENTRY_DATE) VALUES (new.ID, old.ADDRESS , datetime('now'));
END;
注意:上面的兩個(gè)關(guān)鍵字:
new和old,它們分別表示新插入的行記錄和表中已存在行記錄。
現(xiàn)在更新一條記錄數(shù)據(jù),如下:
UPDATE COMPANY SET ADDRESS = 'Beijing' WHERE ID = 1;
查詢審計(jì)表:audit中的記錄信息,如下所示 -
sqlite> select * from audit;
1|AFTER INSERT|2017-05-25 13:39:32
2|BEFORE INSERT|2017-05-25 13:41:50
2|AFTER INSERT|2017-05-25 13:41:50
1|AFTER UPDATE|2017-05-25 14:14:00
1|Shenzhen|2017-05-25 14:18:19 -- 使用舊行的Address值寫入
1|AFTER UPDATE|2017-05-25 14:18:19
sqlite>
執(zhí)行上面語(yǔ)句創(chuàng)建觸發(fā)器,查看上面創(chuàng)建的觸發(fā)器 -
SELECT name FROM sqlite_master WHERE type = 'trigger';
執(zhí)行上面語(yǔ)句,得到以下結(jié)果 -
