觸發(fā)器是一種數(shù)據(jù)庫代碼,在特定事件(插入、更新、刪除)發(fā)生時自動執(zhí)行。觸發(fā)器的語法包含觸發(fā)器名稱、表名稱和觸發(fā)時機(before/after)以及事件類型(insert/update/delete)。觸發(fā)器類型包括 before 和 after,事件類型包括 insert、update 和 delete。觸發(fā)器可用于數(shù)據(jù)完整性驗證、審計記錄、自動任務(wù)和業(yè)務(wù)邏輯。例如,可以創(chuàng)建觸發(fā)器在插入新行時記錄插入時間,以確保數(shù)據(jù)的一致性。
SQL 觸發(fā)器的使用和語法
什么是觸發(fā)器?
觸發(fā)器是數(shù)據(jù)庫中的一段代碼,當(dāng)數(shù)據(jù)庫中的特定事件發(fā)生時自動觸發(fā)執(zhí)行。它們用于在數(shù)據(jù)發(fā)生變化時執(zhí)行自定義操作。
觸發(fā)器的語法
SQL 中觸發(fā)器的語法如下:
<code>CREATE TRIGGER trigger_name ON table_name FOR INSERT | UPDATE | DELETE AS BEGIN -- 觸發(fā)器代碼... END;</code>
登錄后復(fù)制
觸發(fā)器的類型
根據(jù)觸發(fā)時機,觸發(fā)器可分為以下類型:
BEFORE
觸發(fā)器:在事件發(fā)生之前執(zhí)行。
AFTER
觸發(fā)器:在事件發(fā)生之后執(zhí)行。
根據(jù)事件類型,觸發(fā)器可分為:
INSERT
觸發(fā)器:在插入新行時觸發(fā)。
UPDATE
觸發(fā)器:在更新現(xiàn)有行時觸發(fā)。
DELETE
觸發(fā)器:在刪除行時觸發(fā)。
觸發(fā)器的使用場景
觸發(fā)器廣泛用于以下場景:
數(shù)據(jù)完整性驗證:確保數(shù)據(jù)符合特定規(guī)則(例如,非空約束、唯一性約束)。
審計和記錄:跟蹤數(shù)據(jù)庫中的變化并記錄用戶活動。
自動任務(wù):在數(shù)據(jù)更改時自動執(zhí)行特定任務(wù)(例如,發(fā)送電子郵件通知)。
業(yè)務(wù)邏輯:實現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則,例如計算 derived column 或維護關(guān)聯(lián)表。
示例
以下是一個示例觸發(fā)器,用于在向 users
表中插入新行時記錄插入時間:
<code class="sql">CREATE TRIGGER insert_timestamp BEFORE INSERT ON users AS BEGIN SET NEW.created_at = CURRENT_TIMESTAMP(); END;</code>
登錄后復(fù)制
當(dāng)插入新行到 users
表時,insert_timestamp
觸發(fā)器會在插入之前執(zhí)行,并自動將當(dāng)前時間戳設(shè)置為新建行的 created_at
字段。