觸發器介紹
用途:當我們希望使用者在使用資料庫時(增刪改查),資料庫會自動執行一些命令,而不是人為的去敲命令,或者是開發人員在**裡寫命令。
場景:我們希望使用者在對錶進行修改時,可以把修改同步到另一張表
實現:假設現有一張表stu1,為了方便,我們建立另一張表stu2,然後讓stu2的內容始終與stu1的保持同步
建立stu2的sql:create table stu2 like stu1;
建立觸發器
1. 建立觸發器的語法
mysql>create trigger trigger_name
->trigger_time
->trigger_event on tb_name
->for each row
->trigger_stmt;
解釋:trigger_name:觸發器的名稱;
trigger_time:觸發時機,取值為before 或者after;
trigger_event:觸發時間,取值為insert, update或者delete;
tb_name:建立觸發器的表名;
for each row:表示任何一條記錄上的操作滿足觸發事件都會觸發該觸發器,也就是說觸發器的觸發頻率是針對每一行資料觸發一次。
trigger_stmt:觸發器事件,可以是一條sql語句,也可以是begin和end包含的多條語句;
2. 建立insert型觸發器
例子:建立觸發器,用於向測試表stu1中新增記錄後自動將記錄備份到stu2中。
先將預設的結尾符號;改為//
mysql>delimiter //mysql>create trigger afterinsert_on_stu1->after->insert on stu1->for each row->begin->insert into stu2 (id, name) values (new.id, new.name);->end //mysql>delimiter ;
注:delimiter // :因為資料庫中預設是以分號";"當做結尾的,但是因為觸發器中也會包含分號,為了讓資料庫區分,所以這兒使用delimiter命令來修改資料庫中結尾的符號為//,使用完後,也可以使用命令delimiter ;改回來,(命令和分號之間是有空格的)
3. 建立delete型觸發器
mysql>create trigger afterdelete_on_stu1->after->delete on stu1->for each row->begin->delete from stu2 where id=old.id;->end //
注:mysql中定義了new和old來表示觸發器所在表中觸發了觸發器的哪一行
在insert型觸發器中,new用來表示將要(before)或已經(after)插入的新資料
在update型觸發器中,old用來表示將要或者已經被修改的原資料,new用來表示將要或已經被修改的新資料
在delete型觸發器中,old用來表示將要或已經被修改的原資料
new關鍵字的用法:new.columnname,old用法類似
old是唯讀的,而new可以在觸發器中使用set賦值,這樣就不會再次觸發觸發器了。
檢視觸發器
1. 使用show triggers檢視
這是我之前在其他表中建立的insert和delete觸發器
2. 在information_schema.triggers表中檢視觸發器
information_schema是mysql資料庫預設就建立的乙個資料庫,triggers是該資料庫下的一張表
使用觸發器
執行順序:觸發器的執行順序依次是before觸發器、行操作、after,過程**錯的話,將不會執行後面的操作,事務表出錯可以回滾,非事務表不能回滾。
刪除觸發器
語法:drop trigger [if exists] [schema_name.]trigger_name
if exists是可選引數,加了這個引數,如果要刪除的觸發器不存在的話,那麼不會報錯,而是返回乙個警告
例如:刪除資料表stu1中的delete觸發器
mysql>drop trigger stu1.afterdelete_on_stu1;
下面是刪除某個不存在的觸發器時,使用if exists和不使用的區別
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...
my sql 觸發器 MySQL檢視觸發器
檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...