Mysql触发约束检查

时间:2014-05-11 01:46:40

标签: 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行的SIGNAL S'

谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

尝试将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比较的正确方法。