服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - MySQL 在触发器里中断记录的插入或更新?

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

2019-10-31 15:07mysql教程网 Mysql

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>

延伸 · 阅读

精彩推荐
  • MysqlMySQL通过show processlist命令检视性能的讲解

    MySQL通过show processlist命令检视性能的讲解

    今天小编就为大家分享一篇关于MySQL通过show processlist命令检视性能的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一...

    CODETC5302019-06-24
  • MysqlMySQL中SQL模式的特点总结

    MySQL中SQL模式的特点总结

    这篇文章主要给大家总结介绍了关于MySQL中SQL模式特点的相关资料,文章介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    CrazyCodes4312019-06-26
  • Mysqlmysql 常用命令集锦[绝对精华]

    mysql 常用命令集锦[绝对精华]

    测试环境:mysql 5.0.45 【注:可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】 ...

    mysql教程网3212019-10-29
  • MysqlMySQL的语法及其使用指南

    MySQL的语法及其使用指南

    数据库的选取,创建,丢弃和变更 数据表和索引的创建,变更和丢弃从数据表检索信息 ...

    mysql教程网2202019-10-21
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心1732019-06-23
  • Mysql从其他电脑访问本机的Mysql的设置方法

    从其他电脑访问本机的Mysql的设置方法

    如果需要让特定的用户从给定域(例如mydomain.com)的所有计算机上访问 MySQL 服务器,你可以执行在账户名的 host 部分使用了通配符“%” 的 GRANT 语句 ...

    mysql教程网3822019-10-24
  • Mysql在MySQL数据库中复位根用户的密码的方法

    在MySQL数据库中复位根用户的密码的方法

    如果你从未为 MySQL 设置根用户 密码 ,服务器在以根用户身份进行连接时不需要密码。但是,建议你为每个账户设置密码。 如果你以前设置了根用户密码,...

    mysql技术网3932019-10-18
  • Mysqlwindow系统mysql无法输入和无法显示中文的解决方法

    window系统mysql无法输入和无法显示中文的解决方法

    这篇文章主要介绍了window系统mysql无法输入和无法显示中文的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    小裁缝4572019-07-11