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