MySQL觸發器

一.觸發器的基本語法:

1、命名規則

CREATE TRIGGER BEFORE<觸發器名稱> <{//觸發器必須有名字,最多64個字符,可能後面會附有分隔符

  | AFTER }  //觸發器觸發時間是在事件之前觸發還是之後觸發(也可以在過程中觸發)

INSERT | UPDATE | DELETE  //觸發器三種事件

}

ON <表名稱>FOR EACH ROW<觸發器SQL語句>  //語句可以是任何合法的語句,包括複合語句,但是這裏的語句受的限制和函數的一樣

2、觸發器的創建

不能給同一張表的同一個事件安排兩個觸發器,但是可以給同張表定義多個觸發器(如:在同一張表對Insert事件定義一個觸發器,對update再定義一個觸發器)

3、基本的設置

給觸發器設置權限:Gank create trigger on <表名> to 用戶。


回收權限:Revoke create trigger on 表明 from 用戶

刪除觸發器:drop TRIGGER 觸發器

MyISAM:不支持事務,用於只讀程序提高性能  
InnoDB:支持ACID事務、行級鎖、併發  
Berkeley DB:支持事務 

二:觸發器語句

背景:在不修改原工程的情況去做安卓端和服務端的同步操作。爲已經存在的項目裏面的數據庫建張表ict_table_version,然後在需要同步的表上加上一個字段version。​(同步方案看文檔)。

在需要同步的表上創建觸發器。當表進行事物操作時,此表上的rowversion字段取最大值+1,同時ict_table_version表裏面的version+1。語句:

CREATE TRIGGER ilt_tak_trigger before update //after出錯不知爲何

ON ilt_tak

FOR each row

begin

SET new.rowversion = (select max(rowversion)+1 from ict_tak) ;//new是獲取前期記錄標識。對於Insert語句,只有new是合法的,對於deleted語句,只有old是合法的。對於update語句兩者都可以使用。

UPDATE ict_table_version  SET version = version+1 WHERE table_name='ict_tak';//對其它表操作

end

注意在操作兩條語句間沒有用“and”而是用“;”

在End前面加上exception  when...then...異常處理語句  End 對異常進行處理。同樣,在End前面還可以加上事物回滾。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章