觸發器是與表有關的資料庫物件,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性。
舉個例子,比如你現在有兩個表【使用者表】和【日誌表】,當乙個使用者被建立的時候,就需要在日誌表中插入建立的log日誌,如果在不使用觸發器的情況下,你需要編寫程式語言邏輯才能實現,但是如果你定義了乙個觸發器,觸發器的作用就是當你在使用者表中插入一條資料的之後幫你在日誌表中插入一條日誌資訊。當然觸發器並不是只能進行插入操作,還能執行修改,刪除。
create trigger trigger_name trigger_time trigger_event on tb_name for each row trigger_stmt
trigger_name:觸發器的名稱
tirgger_time:觸發時機,為before或者after
trigger_event:觸發事件,為insert、delete或者update
tb_name:表示建立觸發器的表明,就是在哪張表上建立觸發器
trigger_stmt:觸發器的程式體,可以是一條sql語句或者是用begin和end包含的多條語句
所以可以說mysql建立以下六種觸發器:
before insert,before delete,before update
after insert,after delete,after update
create trigger 觸發器名 before|after 觸發事件
on 表名 for each row
begin
執行語句列表
end
其中,begin與end之間的執行語句列表引數表示需要執行的多個語句,不同語句用分號隔開
一般情況下,mysql預設是以 ; 作為結束執行語句,與觸發器中需要的分行起衝突
為解決此問題可用delimiter,如:delimiter ||,可以將結束符號變成||
當觸發器建立完成後,可以用delimiter ;來將結束符號變成;
觸發器型別
new和old的使用
insert
new 表示將要或者已經新增的資料
update
用來表示將要或者已經被刪除的資料,new將要或者已經被修改的資料
delete
old表示將要或者已經被刪掉的資料
1 student
create table `student` (
`id` int(11) unsigned not null auto_increment,
`name` varchar(255) character set utf8mb4 default null,
`add_time` int(11) default null,
primary key (`id`),
key `name` (`name`(250)) using btree
) engine=myisam auto_increment=1000001 default charset=latin1;
2 logs
create table `logs` (
`id` int(11) not null auto_increment,
`log` varchar(255) default null comment '日誌說明',
primary key (`id`)
) engine=innodb default charset=utf8mb4 comment='日誌表';
delimiter $
create trigger user_log after insert on users for each row
begin
declare s1 varchar(40)character set utf8;
declare s2 varchar(20) character set utf8;#後面發現中文字元編碼出現亂碼,這裡設定字符集
set s2 = " is created";
set s1 = concat(new.name,s2); #函式concat可以將字串連線
insert into logs(log) values(s1);
end $
delimiter ;
觸發器會有以下兩種限制:
1.觸發程式不能呼叫將資料返回客戶端的儲存程式,也不能使用採用call語句的動態sql語句,但是允許儲存程式通過引數將資料返回觸發程式,也就是儲存過程或者函式通過out或者inout型別的引數將資料返回觸發器是可以的,但是不能呼叫直接返回資料的過程。
2.不能再觸發器中使用以顯示或隱式方式開始或結束事務的語句,如start trans-action,commit或rollback。
注意事項:mysql的觸發器是按照before觸發器、行操作、after觸發器的順序執行的,其中任何一步發生錯誤都不會繼續執行剩下的操作,如果對事務表進行的操作,如果出現錯誤,那麼將會被回滾,如果是對非事務表進行操作,那麼就無法回滾了,資料可能會出錯。
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
觸發器 MSSQL常用操作
這裡只打算講解四部分了,也就最簡單 最常用的四部分。1 觸發器。定義 何為觸發器?在sql server裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。sql server ...
觸發器 MSSQL常用操作
這裡只打算講解四部分了,也就最簡單 最常用的四部分。1 觸發器。定義 何為觸發器?在 sql server 裡面也就是對某乙個表的一定的操作,觸發某種條件,從而執行的一段程式。觸發器是乙個特殊的儲存過程。常見的觸發器有三種 分別應用於insert update delete 事件。sql serve...