Mysql触发器约束检查

标签 mysql sql database triggers phpmyadmin

我不是数据库专家,我在做数据库项目时需要帮助。我使用 phpmyadmin 版本 4.1.14 作为我的数据库服务器。我需要有一个限制,以确保读者不能从图书馆借超过 10 本书。我正在尝试设置一个触发器,该触发器将在更新 BORROWED 表之前运行,以确保读者借阅的书籍不超过 10 本书。如果读者已经借了 10 本书,我想显示一条消息。

我无法让它工作,因为我不断收到错误。这是我的触发器 SQL

BEGIN
DECLARE msg varchar(255);
SELECT Count(ReaderID) as Counted from BORROWED 
WHERE RDateTime=null
IF Counted=10 THEN
SET msg='Reader cannot borrow more than 10 books';
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT=msg;
END IF;
END

这是我收到的错误消息。 MySQL 说: #1064 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解您在 'IF Counted=10 THEN SET msq='READer 无法借阅超过 10 本书'附近使用的正确语法;第 5 行的信号 S'

感谢您的帮助!

最佳答案

尝试将 Counted 定义为变量:

BEGIN
    DECLARE msg varchar(255);
    IF 10 <= (select count(*) from borrowed where rDateTime is NULL) THEN
        SET msg = 'Reader cannot borrow more than 10 books';
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT=msg;
    END IF;
END;

请注意,我还将 = NULL 更改为 is NULL,这是进行 NULL 比较的正确方法。

关于Mysql触发器约束检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23588098/

相关文章:

javascript - 使用 JavaScript 显示订单总计

mysql - SQL LIMIT 获取最新记录

sql - 获取所有先前值的总和? - 到目前为止总共?

java - @ManyToMany 关系中表的 JPA 2.0 CriteriaQuery

python - 如何使用python从数据库中提取值

javascript - MySQL 表填充下拉列表。选择后,将填充第二个下拉列表

php - PHP 中的 Mysql Union 未返回正确结果

c++ - union 查询和 C++

需要 PHP/MYSQL 查询帮助

database - 关于使用memcachedb做大规模key-value存储的看法