mysql的觸發器同數據庫 多表的數據操做

一.觸發器的基本語法: 數據庫

一、命名規則 併發

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前面還能夠加上事物回滾。 

相關文章
相關標籤/搜索