您的位置:首页 > 数据库 > MySQL

MySQL 中如何在触发器里中断记录的插入或更新?

2012-05-07 14:22 495 查看
MySQL 不象其它有些数据库可以在触发器中抛出异常来中断当然触发器的执行以阻止相应的SQL语句的执行。在MySQL的目录版本中还无法直接抛出异常。这样我们如何实现呢?

下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。

mysql>create
table t_control(id
int primarykey);

Query OK, 0 rows affected (0.11 sec)

mysql>
insert into t_controlvalues (1);

Query OK, 1 row affected (0.05 sec)

mysql>
create table t_bluerosehero(idint
primarykey,col
int);

Query OK, 0 rows affected (0.11 sec)

mysql> delimiter//

mysql>
create trigger tr_t_bluerosehero_bi beforeinsert
on t_bluerosehero

->
for each row

->
begin

->
if new.col>30then

-> insert
into t_control
values (1);

->
end if;

->
end;

->
//

Query OK, 0 rows affected (0.08 sec)

mysql> delimiter ;

mysql>

mysql>
insert into t_blueroseherovalues (1,20);

Query OK, 1 row affected (0.25 sec)

mysql>
insert into t_blueroseherovalues (2,40);

ERROR 1062 (23000): Duplicate entry'1'for
key'PRIMARY'

mysql>

mysql>
select *from t_bluerosehero;

+----+------+

| id
| col |

+----+------+

| 1|
20|

+----+------+

1 rowin
set (0.00 sec)

mysql>

或者

mysql> delimiter//

mysql>
create trigger tr_t_bluerosehero_bi beforeinsert
on t_bluerosehero

->
for each row

->
begin

->
declare i int;

->
if new.col>30then

-> insert
into xxxx
values (1);

->
end if;

->
end;

->
//

Query OK, 0 rows affected (0.06 sec)

mysql> delimiter ;

mysql>
delete from t_bluerosehero;

Query OK, 3 rows affected (0.05 sec)

mysql>
insert into t_blueroseherovalues (1,20);

Query OK, 1 row affected (0.06 sec)

mysql>
insert into t_blueroseherovalues (2,40);

ERROR 1146 (42S02):Table
'csdn.xxxx' doesn't exist

mysql>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: