mysql 不象其它有些資料庫可以在觸發器中丟擲異常來中斷當然觸發器的執行以阻止相應的sql語句的執行。在mysql的目錄版本中還無法直接丟擲異常。這樣我們如何實現呢?
下面是一種實現的方法。思路就是想辦法在觸發器中利用乙個出錯的語句來中斷**的執行。
mysql
>
create
table
t_control(id
intprimary
key);
query ok,
0rows affected (
0.11
sec)
mysql
>
insert
into
t_control
values(1
);query ok,
1row affected (
0.05
sec)
mysql
>
create
table
t_bluerosehero(id
intprimary
key,col
int);
query ok,
0rows affected (
0.11
sec)
mysql
>
delimiter
//mysql
>
create
trigger
tr_t_bluerosehero_bi before
insert
ont_bluerosehero
->
foreach row
->
begin
->
ifnew.col
>
30then
->
insert
into
t_control
values(1
);->
endif
;->
end;
->
//query ok,
0rows affected (
0.08
sec)
mysql
>
delimiter ;
mysql
>
mysql
>
insert
into
t_bluerosehero
values(1
,20);query ok,
1row affected (
0.25
sec)
mysql
>
insert
into
t_bluerosehero
values(2
,40);error
1062
(23000
): duplicate entry '1
'for
key'
primary
'mysql
>
mysql
>
select
*from
t_bluerosehero;+--
--+------+
|id
|col |+
----+------+|1
|20|+
----+------+
1row
inset
(0.00
sec)
mysql
> 或者
mysql
>
delimiter
//mysql
>
create
trigger
tr_t_bluerosehero_bi before
insert
ont_bluerosehero
->
foreach row
->
begin
->
declare
i int
;->
ifnew.col
>
30then
->
insert
into
***x
values(1
);->
endif
;->
end;
->
//query ok,
0rows affected (
0.06
sec)
mysql
>
delimiter ;
mysql
>
delete
from
t_bluerosehero;
query ok,
3rows affected (
0.05
sec)
mysql
>
insert
into
t_bluerosehero
values(1
,20);query ok,
1row affected (
0.06
sec)
mysql
>
insert
into
t_bluerosehero
values(2
,40);error
1146
(42s02):
table
'csdn.***x
'doesn
't exist
mysql>
MySQL 中如何在觸發器裡中斷記錄的插入或更新?
mysql 不象其它有些資料庫可以在觸發器中丟擲異常來中斷當然觸發器的執行以阻止相應的sql語句的執行。在mysql的目錄版本中還無法直接丟擲異常。這樣我們如何實現呢?下面是一種實現的方法。思路就是想辦法在觸發器中利用乙個出錯的語句來中斷 的執行。mysql create table t contr...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
MySQL中觸發器
觸發器是與某個事件相關的特殊儲存過程,與儲存過程不同的是,儲存過程需要用 call 呼叫而出發器不需要使用call呼叫呼叫。也就是自己預先定義好了,當某個事件發生時,就會自動出發觸發器進行相關的操作。僅對 insert update delete 有效,對select無。trigger name 觸...