一.觸發器的基本語法: 數據庫
一、命名規則 併發
CREATE TRIGGER BEFORE<觸發器名稱> <{//觸發器必須有名字,最多64個字符,可能後面會附有分隔符 函數
| AFTER } //觸發器觸發時間是在事件以前觸發仍是以後觸發(也能夠在過程當中觸發) 性能
{ spa
INSERT | UPDATE | DELETE //觸發器三種事件 事件
} 事務
ON <表名稱>FOR EACH ROW<觸發器SQL語句> //語句能夠是任何合法的語句,包括複合語句,可是這裏的語句受的限制和函數的同樣 文檔
二、觸發器的建立 同步
不能給同一張表的同一個事件安排兩個觸發器,可是能夠給同張表定義多個觸發器(如:在同一張表對Insert事件定義一個觸發器,對update再定義一個觸發器) io
三、基本的設置
給觸發器設置權限: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前面還能夠加上事物回滾。