MySQL 在触发器里中断记录的插入或更新?
更新时间:2009年07月26日 21:56:46 作者:
MySQL 不象其它有些数据库可以在触发器中抛出异常来中断当然触发器的执行以阻止相应的SQL语句的执行。
MySQL 在触发器里中断记录的插入或更新? 更新时间:2009年07月26日 21:56:46 作者: 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 (1mysql触发器,20); Query OK, 1 row affected (0.06 sec) mysql> insert into t_bluerosehero values (2,40); ERROR 1146 (42S02): Table 'csdn.xxxx' doesn't exist mysql> (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |