首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在mysql中对触发器编程业务规则

如何在mysql中对触发器编程业务规则
EN

Stack Overflow用户
提问于 2015-05-13 16:55:05
回答 2查看 75关注 0票数 0

我正在尝试使用MySQL在触发器中编写业务规则,但它不起作用。

我想要做的是,如果条件为false,则插入必须失败并回滚它。问题是MySQL不允许在触发器中使用rollback。

我也尝试过使用信号和文本消息,但失败了。

代码是:

代码语言:javascript
复制
CREATE TRIGGER tr_NewTeacher
AFTER INSERT ON teachers FOR EACH ROW
BEGIN
    IF (salary > 1300 AND budget < 15000)
    BEGIN
        ROLLBACK TRANSACTION;
    END             
END
EN

回答 2

Stack Overflow用户

发布于 2015-05-13 16:59:51

In MySQL触发器将回滚transaction。

因此,您必须在触发器body内引发异常:

代码语言:javascript
复制
...
if [Test]
    then

      SIGNAL sqlstate '45001' set message_text = "No way ! You cannot do this !";

    end if ;
...
票数 0
EN

Stack Overflow用户

发布于 2015-05-13 17:02:58

您应该使用before insert,为了获得需要使用new的列值

所以触发器应该是这样的

代码语言:javascript
复制
delimiter //
create trigger tr_NewTeacher before insert on teacher
for each row 
begin
  if new.salaRY>1300 AND new.budget<15000  then
  signal sqlstate '45000' set message_text = 'Your error message';
 end if;
end;//

delimiter ;

下面是一个mysql的测试用例

代码语言:javascript
复制
mysql> create table teacher (id int auto_increment primary key,salaRY int , budget int);
Query OK, 0 rows affected (0.17 sec)

mysql> delimiter //
mysql> create trigger tr_NewTeacher before insert on teacher
    -> for each row 
    -> begin
    ->   if new.salaRY>1300 AND new.budget<15000  then
    ->   signal sqlstate '45000' set message_text = 'Your error message';
    ->  end if;
    -> end;//
Query OK, 0 rows affected (0.14 sec)


mysql> insert into teacher (salaRY,budget) values (1200,16000);
Query OK, 1 row affected (0.04 sec)

mysql> insert into teacher (salaRY,budget) values (1400,13000);
ERROR 1644 (45000): Your error message
mysql> select * from teacher ;
+----+--------+--------+
| id | salaRY | budget |
+----+--------+--------+
|  1 |   1200 |  16000 |
+----+--------+--------+
1 row in set (0.00 sec)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30210039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档