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>
下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。
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>
相关文章推荐
- MySQL 中如何在触发器里中断记录的插入或更新?
- MySQL 中如何在触发器里中断记录的插入或更新
- MySQL 中如何在触发器里中断记录的插入或更新?
- MySQL 中如何在触发器里中断记录的插入或更新?
- MySQL 在触发器里中断记录的插入或更新?
- MySQL 在触发器里中断记录的插入或更新?
- mysql触发器的例子--插入前更新数据
- PHP中如何使用MYSQL语句插入记录
- mysql 存在该记录则更新,不存在则插入记录的sql
- MySQL 当记录不存在时插入,当记录存在时更新
- 触发器在插入时更新此条新记录 错误it is already used by statement which invoked this stored functiontrigger的解决方法
- MySQL 记录不存在插入 和 存在则更新和
- 如何写一个数据库触发器,在插入记录时触发
- mysql记录存在就更新不存在就插入
- Mysql学习心得之插入、更新、删除记录
- mysql更新语句获取受影响行数和插入记录id
- Mysql学习心得之插入、更新、删除记录
- MySQL 插入记录时自动更新时间戳
- mysql更新语句获取受影响行数和插入记录id