MySQL 觸發器例子(兩張表同步增加和刪除)

2021-07-30 12:01:28 字數 1825 閱讀 2808

以下兩個例子來自:

實測有效,但是原帖的分隔符不正確,因此稍作修改。

例子1:

建立兩個表,目的是在乙個表裡新增一條記錄,另乙個表也新增一條記錄:

drop table if exists tab1;

create table tab1(

tab1_id varchar(11)

);drop table if exists tab2;

create table tab2(

tab2_id varchar(11)

);建立觸發器:t_afterinsert_on_tab1

作用:增加tab1表記錄後自動將記錄增加到tab2表中

delimiter || 

drop trigger if exists t_afterinsert_on_tab1 ||

create trigger t_afterinsert_on_tab1 

after insert on tab1 for each row

begin

insert into tab2(tab2_id) values(new.tab1_id); --new表示tab1表中剛新增的的記錄

end||

delimiter ;

測試:insert into tab1(tab1_id) values('0001');

檢視結果:

例子2:

建立兩個表,目的是在乙個表裡刪除一條記錄,另乙個表也刪除一條記錄:

delimiter || 

drop trigger if exists t_afterdelete_on_tab1||

create trigger t_afterdelete_on_tab1

after delete on tab1 for each row

begin

delete from tab2 where tab2_id=old.tab1_id; --old表示tab1表中剛被刪除的記錄

end||delimiter ;

測試:delete from tab1 where tab1_id='0001';

看看結果

以下內容來自:

after觸發器—是在記錄操縱之後觸發,是先完成資料的增刪改,再觸發,觸發的語句晚於監視的增刪改操作,無法影響前面的增刪改動作

before觸發器—是在記錄操縱之前觸發,是先完成觸發,再增刪改,觸發的語句先於監視的增刪改,我們就有機會判斷,修改即將發生的操作,如:我們在觸發之前需要判斷new值和old值的大小或關係,如果滿足要求就觸發,不通過就修改再觸發;如:表之間定義的有外來鍵,在刪除主鍵時,必須要先刪除外來鍵表,這時就有先後之分,這裡before相當於設定了斷點,我們可以處理刪除外來鍵。

對於insert語句, 只有new是合法的;

對於delete語句,只有old才合法;

對於update語句,new、old可以同時使用。

MySQL 觸發器例子(兩張表同步增加和刪除)

以下兩個例子來自 實測有效,但是原帖的分隔符不正確,因此稍作修改。其中old表示tab2 被動觸發 new表示tab1 主動觸發,外部應用程式在此表裡執行insert語句 例子1 建立兩個表,目的是在乙個表裡新增一條記錄,另乙個表也新增一條記錄 drop table if exists tab1 c...

MySQL 觸發器例子(兩張表同步增加和刪除)

以下兩個例子來自 實測有效,但是原帖的分隔符不正確,因此稍作修改。其中old表示tab2 被動觸發 new表示tab1 主動觸發,外部應用程式在此表裡執行insert語句 例子1 建立兩個表,目的是在乙個表裡新增一條記錄,另乙個表也新增一條記錄 drop table if exists tab1 c...

MySQL實現兩張表資料的同步

有兩張表a和b,要求往a裡面插入一條記錄的同時要向b裡面也插入一條記錄,向b裡面插入一條記錄的同時也向a插入一條記錄。兩張表的結構不同,需要將其中幾個字段對應起來。可以用下面的觸發器實現。表a的觸發器 begin set disable 1 if disable 1 and not exists s...