当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MySQL 在触发器里中断记录的插入或更新?

MYSQL
五种MySQL数据库可靠性方案的分析和比较
怎样在Mysql中直接储存图片
mysql的本地备份和双机相互备份脚本
详细讲解Linux环境下MySQL 5.1安装步骤
实例讲解在MySQL中如何导出整个数据库
讲解MySQL索引的概念及数据库索引的应用
教你在MySQL中快速复制表格作为测试数据
删除完全重复和部分关键字段重复的记录
MySQL各存储引擎的区别及其启动方法
MySQL在网络安全方面采取的主要措施
在MySQL中执行SQL语句时的几个注意点
MySQL改善数据装载操作效率的策略
设计高效合理的MySQL查询语句讲解
MySQL用户Root密码为弱口令的攻击
MySQL数据库接口的VC具体实现与应用
在MySQL数据库增加新用户权限简介
MySQL中文模糊检索问题的解决方法
MySQL的数据类型和建库策略详解
利用图形界面从SQL导入导出到MySQL
MySQL数据库应该如何对抗解密高手

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 112 ::
收藏到网摘: n/a

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' doesn't exist
mysql>