码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2014-08-31 20:00:41      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:style   color   os   ar   for   数据   art   div   代码   

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

 

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

 

mysql> create table t_control(id int primary key);
Query OK, 0 rows affected (0.11 sec)

mysql> insert into t_control values (1);
Query OK, 1 row affected (0.05 sec)

mysql> create table t_bluerosehero(id int primary key,col int);
Query OK, 0 rows affected (0.11 sec)

mysql> delimiter //
mysql> create trigger tr_t_bluerosehero_bi before insert on t_bluerosehero
    -> for each row
    -> begin
    ->  if new.col>30 then
    ->          insert into t_control values (1);
    ->  end if;
    -> end;
    -> //
Query OK, 0 rows affected (0.08 sec)

mysql> delimiter ;
mysql>
mysql> insert into t_bluerosehero values (1,20);
Query OK, 1 row 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 |
+----+------+
1 row in set (0.00 sec)mysql>

或者

 

mysql> delimiter //
mysql> create trigger tr_t_bluerosehero_bi before insert on t_bluerosehero
    -> for each row
    -> begin
    ->  declare i int;
    ->  if new.col>30 then
    ->          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_bluerosehero values (1,20);
Query OK, 1 row affected (0.06 sec)

mysql> insert into t_bluerosehero values (2,40);
ERROR 1146 (42S02): Table csdn.xxxx doesnt exist
mysql>

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

标签:style   color   os   ar   for   数据   art   div   代码   

原文地址:http://www.cnblogs.com/plzdaye/p/3948020.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!