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

MYSQL
MySQL菜鸟入门指南
mysql常识和基本操作
MySQL数据库函数详解(1)
MySQL数据库函数详解(2)
MySQL数据库函数详解(3)
MySQL数据库函数详解(4)
MySQL数据库函数详解(5)
mysql使用指南(上)
MYSQL使用指南(下)
MySQL实现表中取出随机数据
从MySQL导出XLS数据库工具(跨平台)
禁止Mysql默认端口访问Internet
MYSQL数据同步备份复制
MySQL数据库和备份与恢复
使用MySql ODBC进行MYsql和MSsql的数据转换
MySQL数据库格式轻松转
使用MySQL内建复制功能来最佳化可用性
MySQL中如何实现Top N及M至N段的记录查询?
MySQL丢了root密码怎么办?
MySQL 4.1 的安装和升级

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 89 ::
收藏到网摘: 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>