關於Mysql 觸發器

2021-07-14 22:04:51 字數 3349 閱讀 9946

首先,測試版本 mysql 5.6。

然後再看觸發器的語法

create

[definer = ]

triggertrigger_name

trigger_timetrigger_event

ontbl_namefor each row

trigger_body

trigger_time:

trigger_event:

這個是聯機文件裡面查到的資料。其實語法也挺簡單。下面上栗子

首先我們先建立2個測試表

create

table

`test` (

`id`

int(11) not

null

auto_increment,

`col1`

varchar(50) default

null

, `col2`

varchar(50) default

null

, `col3`

int(11) default

null

, `col4`

float

default

null,

primary

key(`id`)

) engine

=innodb auto_increment=

5default charset=

utf8;

create

table

`testtri` (

`id`

int(11) not

null

auto_increment,

`col1`

varchar(50) default

null

, `col2`

varchar(50) default

null

, `col3`

int(11) default

null

, `col4`

float

default

null,

primary

key(`id`)

) engine

=innodb auto_increment=

5default charset=utf8;

因為只是用於測試,結構上我就隨便建了,就建立乙個自增列主鍵就ok了。

然後在testtri表建立乙個觸發器(建立乙個最簡單的觸發器奏是這樣子,簡單吧╮(╯_╰)╭)

drop

trigger

ifexists

tr_testtri;

delimiter

//create

trigger tr_testtri after insert

on testtri for

each row

begin

insert

into test(col1,col2,col3,col4) values (1,2,3,5

);end

//delimiter ;

然後再 testtri 上面新增一行記錄,明顯,很順利地,test表也增加了一行記錄。

insert into testtri (col1,col2,col3,col4) values (1,2,3,4);

結果 test 和 testtri 都寫入了一行的記錄。

正常的情況就寫到這裡了。當然羅 insert 是這樣玩,update/delete 也是這樣玩, before /after 在mysql 裡面也只是執行順序問題而已。

然後我就測試了集中情況。

1 觸發器自行遞迴,在表 testtri 建立乙個觸發器,觸發內容就是往 testtri 寫入一條記錄。做一下實驗

drop

trigger

ifexists

tr_testtri;

delimiter

//create

trigger tr_testtri after insert

on testtri for

each row

begin

insert

into tr_testtri(col1,col2,col3,col4) values (1,2,3,5

);end

//delimiter ;

建立成功,語法上並沒有任何問題。然後新增一行記錄

所以驗證了不能自己遞迴自己。

2 2個表相互迴圈遞迴,在test 和 testtri 都建立乙個觸發器,相互寫入資料

drop

trigger

ifexists

tr_testtri;

delimiter

//create

trigger tr_testtri after insert

on testtri for

each row

begin

insert

into test(col1,col2,col3,col4) values (1,2,3,5

);end

//delimiter ;

drop

trigger

ifexists

tr_testtri2;

delimiter

//create

trigger tr_testtri2 after insert

on test for

each row

begin

insert

into testtri(col1,col2,col3,col4) values (1,2,3,6

);end

//delimiter ;

建立成功,語法上並沒有任何問題。然後新增一行記錄
insert into testtri (col1,col2,col3,col4) values (1,2,3,4);

然後華麗麗地又報錯了。

證明這種迴圈引用也是不被允許的。

做了乙個這樣的簡單實驗。證明了mysql 在觸發器裡面不適宜玩太高階的邏輯,不然真的不知道到底錯誤是怎樣出現的。但是相對來說,對於程式的控制也會容易一些,也是有友好的一面~

ps:在下對mysql 不甚熟練~還請大家指導

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...

my sql 觸發器 MySQL檢視觸發器

檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...