MySQL 在觸發(fā)器里中斷記錄的插入或更新?
更新時(shí)間:2009年07月26日 21:56:46 作者:
MySQL 不象其它有些數(shù)據(jù)庫(kù)可以在觸發(fā)器中拋出異常來(lái)中斷當(dāng)然觸發(fā)器的執(zhí)行以阻止相應(yīng)的SQL語(yǔ)句的執(zhí)行。在MySQL的目錄版本中還無(wú)法直接拋出異常。這樣我們?nèi)绾螌?shí)現(xiàn)呢?
下面是一種實(shí)現(xiàn)的方法。思路就是想辦法在觸發(fā)器中利用一個(gè)出錯(cuò)的語(yǔ)句來(lái)中斷代碼的執(zhí)行。
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> 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觸發(fā)器使用詳解
- mysql觸發(fā)器(Trigger)簡(jiǎn)明總結(jié)和使用實(shí)例
- MYSQL設(shè)置觸發(fā)器權(quán)限問(wèn)題的解決方法
- mysql 觸發(fā)器實(shí)現(xiàn)兩個(gè)表的數(shù)據(jù)同步
- MySQL觸發(fā)器概念、原理與用法詳解
- MySQL如何創(chuàng)建觸發(fā)器
- 如何測(cè)試mysql觸發(fā)器和存儲(chǔ)過(guò)程
- Mysql中的觸發(fā)器簡(jiǎn)單介紹及使用案例
- MySQL筆記之觸發(fā)器的應(yīng)用
- 從零開(kāi)始MySQL觸發(fā)器實(shí)戰(zhàn)攻略
相關(guān)文章
MySQL遠(yuǎn)程訪問(wèn)設(shè)置終極方法
這篇文章主要介紹了MySQL遠(yuǎn)程訪問(wèn)設(shè)置終極方法,本文總結(jié)了多種設(shè)置方法和技巧,是解決遠(yuǎn)程訪問(wèn)的終極解決方案,需要的朋友可以參考下2014-12-12
云服務(wù)器Ubuntu_Server_16.04.1安裝MySQL并開(kāi)啟遠(yuǎn)程連接的方法
這篇文章主要介紹了云服務(wù)器Ubuntu_Server_16.04.1安裝MySQL并開(kāi)啟遠(yuǎn)程連接的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-02-02
MySql5.7.11編譯安裝及修改root密碼的方法小結(jié)
這篇文章主要介紹了MySql5.7.11編譯安裝及修改root密碼的方法小結(jié)的相關(guān)資料,需要的朋友可以參考下2016-04-04
mysql報(bào)錯(cuò):1406 Data too long for colu
這篇文章給大家介紹了多種解決mysql報(bào)錯(cuò):1406, Data too long for column的解決方法,如果有遇到相同問(wèn)題的朋友可以參考閱讀本文,對(duì)解決問(wèn)題有一定的幫助,需要的朋友可以參考下2023-09-09
MySQL數(shù)據(jù)庫(kù)SELECT查詢表達(dá)式解析
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)SELECT查詢表達(dá)式解析,文中給大家介紹了select_expr 查詢表達(dá)式書(shū)寫(xiě)方法,需要的朋友可以參考下2018-04-04

