1. 程式人生 > >MySQL中的觸發器

MySQL中的觸發器

 一.什麼是觸發器?

 觸發器不是由人來執行操作的,而是在執行某一條MySQL語句時自動觸發執行的。

二.觸發器的優點和缺點

 優點:可以使得資料庫中的某些指令得到一致性的協調。

 缺點:1.每個表只能定義一種觸發器

         2.多人合作開發時,很容易搞不清楚那些表有觸發器,哪個觸發器觸發了。

      3.和儲存過程一樣觸發器的移植性很差

三.建立一個觸發器

3.1建立一個簡單的觸發器

語法:create  trigger  觸發器名稱   (before | after)  (insert |  update  |   delete)   on   表名    for   each  row  執行語句

   

解析:(before | after)  (insert |  update  |   delete)   on   表名   這是在表中執行插入或者刪除或者更改這三個操作之前或者之後設定一個觸發器。來看下面的例子:

現在有一張倉庫表和一張倉庫進貨記錄表。當我們的倉庫插入一個記錄時,我們的倉庫記錄表也通過觸發器插入一個記錄。

建立表:

#倉庫表
create table if not exists Warehouse(
pro_name varchar(10) not null,
pro_id int primary key auto_increment,
pro_intime date 
not null );
#進貨記錄表
create table if not exists intime(
in_hosue_time datetime not null
);

建立觸發器:

delimiter //
create trigger in_time before insert on warehouse for each row insert into intime values (curtime());
//

解釋:首先也是和儲存過程定義一樣,為了防止遇到分號;就停止編譯。

   在warehouse(倉庫表)中建立一個插入的觸發器在插入warehouse表之前在intime(進貨時間表)中插入一個時間。

現在來執行:

insert into Warehouse values("方便麵",10001,"2018-05-09");
select * from intime;
select * from intime;

 結果:

in_hosue_time

'2018-09-27 18:39:04'

3.2建立一個具有多條執行語句的觸發器

使用begin 和 end 來隔離即可

3.3注意點

1.首先一張表只能有一種觸發器:那麼操作型別有三種:插入、刪除、更新,執行順序有兩種:after、before。3*2=6,也就是說一張表最多有6種觸發器。

2.觸發器中start transcation、commit、rollback、call等關鍵字。

四.刪除觸發器

 語法:drop trigger 觸發器名稱

 例子:

drop trigger in_time;