當執行delete、update或insert操作時,可以使用觸發器來觸發某些操作。
建立觸發器:
create trigger trigger_name trigger_time trigger_event on tbl_name
for each row trigger_stmt
其中 trigger_name是觸發器名,
trigger_time:before,after
trigger_event:insert、update、delete
tbl_name:關聯的表名
注意,insert除了插入操作,load data也能啟用該事件。對於同一trigger_event,不能有兩個相同trigger_time的觸發器。
trigger_stmt:觸發器被啟用時執行的語句,可以使用單條語句,也可以使用begin——end這樣的復合語句。
例如:mysql> create table account (acct_num int, amount decimal(10,2));
mysql> create trigger ins_sum before insert on account
-> for each row set @sum = @sum + new.amount;
mysql> set @sum = 0;
mysql> insert into account values(5,12.5);
mysql> select @num;
在該例子中,關鍵字new.col_name在insert觸發程式中引用;
另外乙個關鍵字old.col_name可用於delete中
new和old均可用於update觸發程式中。
old命令的列為唯讀的,new命名的列,如果具有select許可權,可引用它,如果在before出發程式中,具有update許可權,可使用set new.col_name = value的方法,在插入前更改值
另乙個例子:
mysql> delimiter //
mysql> create trigger upd_check before update on account
-> for each row
-> begin
-> if new.amount < 0 then
-> set new.amount = 0;
-> elseif new.amount > 100 then
-> set new.amount = 100;
-> end if;
-> end;//
mysql> delimiter ;
當然,這裡可以先定義儲存程式,然後在觸發器內call儲存程式,這樣就可以對儲存程式進行復用。
刪除觸發器:
drop trogger trigger_name
需要注意以下幾點:
1.mysql觸發器針對行來操作,因此當處理大資料集的時候可能效率很低。
2.觸發器不能保證原子性,例如在myisam中,當乙個更新觸發器在更新乙個表後,觸發對另外乙個表的更新,若觸發器失敗,不會回滾第乙個表的更新。innodb中的
觸發器和操作則是在乙個事務中完成,是原子操作。
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...
my sql 觸發器 MySQL檢視觸發器
檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...
mysql 觸發器定義 mysql觸發器
什麼是觸發器 觸發器是與表有關的資料庫物件,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性。舉個例子,比如你現在有兩個表 使用者表 和 日誌表 當乙個使用者被建立的時候,就需要在日誌表中插入建立的log日誌,如果在不使用觸發器的情況下,你需...