觸發(fā)器是一種數(shù)據(jù)庫(kù)對(duì)象,可在表上的特定事件(插入、更新或刪除)發(fā)生時(shí)自動(dòng)執(zhí)行 sql 語(yǔ)句。其作用包括:維護(hù)數(shù)據(jù)完整性,確保表中數(shù)據(jù)符合特定規(guī)則自動(dòng)執(zhí)行任務(wù),如發(fā)送電子郵件、更新其他表實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯提高性能,避免重復(fù)執(zhí)行相同任務(wù)
MySQL 觸發(fā)器的作用
MySQL 觸發(fā)器是一種數(shù)據(jù)庫(kù)對(duì)象,它允許在表上的特定事件(例如 INSERT、UPDATE 或 DELETE)發(fā)生時(shí)自動(dòng)執(zhí)行一組 SQL 語(yǔ)句。
觸發(fā)器有哪些作用?
觸發(fā)器有以下主要作用:
維護(hù)數(shù)據(jù)完整性:觸發(fā)器可以確保表中的數(shù)據(jù)始終保持特定規(guī)則,例如確保列的唯一性或值域限制。
自動(dòng)執(zhí)行任務(wù):觸發(fā)器可以在數(shù)據(jù)修改后自動(dòng)執(zhí)行諸如發(fā)送電子郵件、更新其他表或調(diào)用存儲(chǔ)過(guò)程等任務(wù)。
實(shí)現(xiàn)業(yè)務(wù)邏輯:觸發(fā)器可以用于實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯,這些邏輯可能難以或不可能通過(guò)簡(jiǎn)單的 SQL 語(yǔ)句來(lái)實(shí)現(xiàn)。
提高性能:觸發(fā)器可以通過(guò)避免在每個(gè)數(shù)據(jù)修改語(yǔ)句中重復(fù)執(zhí)行相同的任務(wù)來(lái)提高性能。
觸發(fā)器的結(jié)構(gòu)
一個(gè)觸發(fā)器由以下部分組成:
觸發(fā)類型:指定在哪個(gè)事件上觸發(fā)觸發(fā)器,例如 INSERT、UPDATE 或 DELETE。
觸發(fā)時(shí)間:指定是在事件之前(BEFORE)還是之后(AFTER)觸發(fā)觸發(fā)器。
觸發(fā)體:包含要執(zhí)行的 SQL 語(yǔ)句的觸發(fā)器代碼塊。
使用觸發(fā)器
要?jiǎng)?chuàng)建觸發(fā)器,可以使用以下語(yǔ)法:
CREATE TRIGGER trigger_name BEFORE/AFTER [INSERT|UPDATE|DELETE] ON table_name FOR EACH ROW BEGIN -- 觸發(fā)器代碼 END;
登錄后復(fù)制
示例
以下觸發(fā)器確保表 users 中的 username 列始終唯一:
CREATE TRIGGER unique_username BEFORE INSERT ON users FOR EACH ROW BEGIN IF EXISTS (SELECT 1 FROM users WHERE username = NEW.username) THEN SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'Username already exists'; END IF; END;
登錄后復(fù)制