MySQL筆記(MYSQL觸發器)

2021-05-23 23:13:07 字數 1613 閱讀 9509

當執行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日誌,如果在不使用觸發器的情況下,你需...