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 (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>

相关文章

  • MySQL系列连载之XtraBackup 备份原理解析

    MySQL系列连载之XtraBackup 备份原理解析

    关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天本文推荐另一个备份工具innobackupex,重点给大家介绍XtraBackup 备份的相关知识,感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • 深入了解MySQL锁机制及应用场景

    深入了解MySQL锁机制及应用场景

    MySQL锁是操作MySQL数据库时常用的一种机制。MySQL锁可以保证多个用户在同时执行读写操作时,能够互相协同、避免数据出现不一致或者读写冲突等问题。本篇文章将详细介绍MySQL锁的基本知识和具体应用
    2023-03-03
  • Linux中如何查看mysql版本问题

    Linux中如何查看mysql版本问题

    这篇文章主要介绍了Linux中如何查看mysql版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MySQL数据库的多种连接方式以及实用工具

    MySQL数据库的多种连接方式以及实用工具

    mysql连接操作是客户端进程与mysql数据库实例进程进行通信,下面这篇文章主要给大家介绍了关于MySQL数据库的多种连接方式以及实用工具的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • mysql存储过程之游标(DECLARE)原理与用法详解

    mysql存储过程之游标(DECLARE)原理与用法详解

    这篇文章主要介绍了mysql存储过程之游标(DECLARE)原理与用法,结合实例形式详细分析了mysql存储过程游标(DECLARE)的基本功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2019-12-12
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的简单实现方法

    以下是对EXCEL数据上传到SQL SERVER中的简单实现方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • 完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)

    下面小编就为大家带来一篇完美解决mysql启动后随即关闭的问题(ibdata1文件损坏导致)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • MySQL DBA教程:Mysql性能优化之缓存参数优化

    MySQL DBA教程:Mysql性能优化之缓存参数优化

    在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣的朋友们有所帮助
    2014-03-03
  • mysql表的内连和外连实战记录

    mysql表的内连和外连实战记录

    在开发中我们的业务需求有时候是复杂的,多张表联合查询的时候是有多种方式的,面对不同的需求,灵活使用不同的表连接方式,这篇文章主要给大家介绍了关于mysql表内连和外连的相关资料,需要的朋友可以参考下
    2024-01-01
  • Windows Server2019安装MySQL5.7.25的方法

    Windows Server2019安装MySQL5.7.25的方法

    这篇文章主要介绍了Windows Server2019安装MySQL5.7.25,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09

最新评论