我不是数据库专家,我在做数据库项目时需要帮助。我使用 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/