mysql - 创建允许的最大值触发器

标签 mysql sql triggers

我正在尝试创建一个触发器,一旦表中达到特定值,该触发器就会执行回滚事务。

想象一下,大学图书馆的学生只能同时拥有 5 个有效借阅。我将如何实现这种触发器?

这是我们目前所拥有的:

CREATE DEFINER = CURRENT_USER TRIGGER `bib_db`.`Customer_AFTER_UPDATE` AFTER UPDATE ON `Customer` FOR EACH ROW 

if activeloans <5
AND Customertype = student
then

  SIGNAL sqlstate '45001' set message_text = "You've reached your maximum ammount of loans";
ROLLBACK TRANSACTION
end if ; 
end

我可能离题很远,但这就是我所能得到的......有人有什么想法吗?

最佳答案

有两件重要的事情。首先,您应该使用 before 更新触发器来防止更新发生。第二,逻辑倒退。更像是:

DELIMITER //
CREATE DEFINER = CURRENT_USER TRIGGER bib_db.Customer_BEFORE_UPDATE
BEFORE UPDATE ON `Customer`
FOR EACH ROW 
BEGIN
    if activeloans >= 5 AND Customertype = 'student' then
        SIGNAL sqlstate '45001' set message_text = "You've reached your maximum ammount of loans";
    end if ; 
END;

DELIMITER ;

结束

关于mysql - 创建允许的最大值触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28583925/

相关文章:

php - 内存中的临时 MySql 数据库仅用于 hacky IPC?

mysql - 比较不同表的聚合函数

sql - 将文本转换为日期

mysql - 如何在表上添加 ON DELETE 约束?

mysql、SQL、触发器、多对多

mysql - 在其他选择中使用列值

php - 为大型公司在 phpmyadmin 中创建大型 Web 应用程序

SQL Server 触发器更新列值

mysql - sql 触发器在变量中存储列名并将其用于 sql 触发器中的 OLD.myvar 时出现错误

php - 尝试通过 PHP/MySQL 下载 Blob