在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ SQLite觸發(fā)器(插入之前/之后)
SQLite觸發(fā)器(刪除之前/之后)
SQLite Union All操作符
SQLite快速入門(mén)
SQLite LIMIT子句
SQLite更新查詢(xún)
SQLite插入查詢(xún)
SQLite創(chuàng)建數(shù)據(jù)庫(kù)
SQLite datetime()函數(shù)
SQLite now函數(shù)和時(shí)間格式化
SQLite左連接
SQLite AVG()函數(shù)
SQLite交叉連接(Cross Join)
SQLite運(yùn)算符
SQLite ORDER BY子句
SQLite聚合函數(shù)
SQLite Union操作符
SQLite是什么?
SQLite安裝
PHP連接SQLite數(shù)據(jù)庫(kù)
SQLite命令大全
SQLite LIKE子句
SQLite OR子句
SQLite內(nèi)連接(Inner Join)
SQLite日期和時(shí)間
SQLite WHERE子句
SQLite刪除表
Python連接SQLite數(shù)據(jù)庫(kù)
SQLite刪除觸發(fā)器
SQLite優(yōu)點(diǎn)和缺點(diǎn)
SQLite連接(JOIN子句)
SQLite數(shù)據(jù)類(lèi)型
SQLite外連接(Outer Join)
SQLite COUNT()函數(shù)
SQLite主鍵
SQLite觸發(fā)器(插入之前/之后)
SQLite HAVING子句
SQLite IN運(yùn)算符
SQLite選擇查詢(xún)
SQLite date()函數(shù)
SQLite MAX()函數(shù)
SQLite刪除查詢(xún)
SQLite分離數(shù)據(jù)庫(kù)
SQLite教程
SQLite GLOB子句
SQLite MIN()函數(shù)
SQLite導(dǎo)入數(shù)據(jù)
SQLite GROUP BY子句
SQLite表達(dá)式
SQLite語(yǔ)法大全
SQLite外鍵
SQLite觸發(fā)器
SQLite導(dǎo)出數(shù)據(jù)
SQLite juliandday()函數(shù)
SQLite創(chuàng)建表
Java連接SQLite數(shù)據(jù)庫(kù)
SQLite SUM()函數(shù)
SQLite特性/為什么要使用SQLite?
SQLite觸發(fā)器(更新之前/之后)
SQLite strftime()函數(shù)日期日間格式化
SQLite附加/選擇數(shù)據(jù)庫(kù)
SQLite DISTINCT子句
SQLite歷史
SQLite time()函數(shù)

SQLite觸發(fā)器(插入之前/之后)

SQLite插入之前或之后觸發(fā)器指定了如何在插入數(shù)據(jù)后創(chuàng)建觸發(fā)器。 假設(shè)有兩個(gè)表:COMPANYAUDIT,在這里要對(duì)向COMPANY表中插入的每條記錄進(jìn)行審計(jì)。如果您已經(jīng)有創(chuàng)建過(guò)一個(gè)COMPANY表,請(qǐng)將其刪除并重新創(chuàng)建。

COMPANY的創(chuàng)建語(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表中插入新記錄,就會(huì)插入日志消息:

AUDIT的創(chuàng)建語(yǔ)句 -

CREATE TABLE audit(  
    EMP_ID INT NOT NULL,
    ACTION_TYPE TEXT NOT NULL,
    ENTRY_DATE TEXT NOT NULL  
);

創(chuàng)建以上兩個(gè)表,如下圖所示 -

SQLite觸發(fā)器:AFTER INSERT

在插入操作后,使用以下語(yǔ)法是在COMPANY表上創(chuàng)建名為“audit_log”的觸發(fā)器。

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

這里,IDAUDIT表行記錄的ID,EMP_ID是來(lái)自COMPANY表的ID,DATE字段是用于在COMPANY表中創(chuàng)建記錄時(shí)保留時(shí)間戳。

現(xiàn)在向COMPANY表中插入一些記錄,觸發(fā)器將自動(dòng)在AUDIT表中創(chuàng)建審核日志記錄。

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)  
VALUES (1, 'Maxsu', 22, 'Haikou', 40000.00);

執(zhí)行上面語(yǔ)句后,同時(shí)會(huì)在AUDIT表中創(chuàng)建一條記錄。 這只是因?yàn)樵?code>COMPANY表上的INSERT操作上創(chuàng)建的觸發(fā)器?,F(xiàn)在查詢(xún)AUDIT表中的記錄數(shù)據(jù)。

SELECT * FROM AUDIT;

執(zhí)行上面語(yǔ)句,結(jié)果如下所示 -

如何列出/查看觸發(fā)器?

可以使用查詢(xún)語(yǔ)句從sqlite_master表中來(lái)查詢(xún)列出/查看觸發(fā)器。

SELECT name FROM sqlite_master  
WHERE type = 'trigger';

執(zhí)行上面語(yǔ)句,得到以下結(jié)果 -

從上面結(jié)果中,可以看到觸發(fā)器的名稱(chēng)。還可以使用AND子句列出特定表上的觸發(fā)器。

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

執(zhí)行上面查詢(xún),得到以下結(jié)果 -

SQLite觸發(fā)器:BEFORE INSERT

如果要在插入數(shù)據(jù)之前創(chuàng)建觸發(fā)器,可以使用以下語(yǔ)句 -

CREATE TRIGGER befor_ins BEFORE INSERT   
ON COMPANY  
BEGIN  
INSERT INTO AUDIT(EMP_ID, ACTION_TYPE ,ENTRY_DATE) VALUES (new.ID, 'BEFORE INSERT', datetime('now'));  
END;

創(chuàng)建完成上面的觸發(fā)器后,現(xiàn)在向COMPANY表中插入一條數(shù)據(jù)記錄。

INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)  
VALUES (2, 'Minsu', 28, 'Guangzhou', 35000.00);
``

現(xiàn)在,已經(jīng)創(chuàng)建了兩個(gè)觸發(fā)器,一個(gè)是**BEFORE INSERT**,另一個(gè)是:**AFTER INSERT**,因此在向`COMPANY`表插入第二條記錄時(shí),`AUDIT`表中有生成兩個(gè)記錄。

```sql
SELECT * FROM AUDIT;

檢查創(chuàng)建的觸發(fā)器:

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

執(zhí)行上面語(yǔ)句,得到以下結(jié)果 -

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

以上面查詢(xún)的結(jié)果中,可以看到已創(chuàng)建的兩個(gè)觸發(fā)器。