2014-05-11 60 views
0

我不是数据库的专家,我在做我的数据库项目时需要帮助。我使用phpmyadmin版本4.1.14作为我的数据库服务器。我需要有一个约束条件,以确保读者不能从图书馆借10多本书。我试图设置一个触发器,在借款表更新之前运行,以确保读者不会借用超过10本书。如果读者已经借了10本书,我想要显示一条消息。Mysql触发器约束检查

我不能得到这个工作,因为我不断收到错误。这里是我的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本书';信号S'在线5

谢谢你的帮助!

+0

您的示例查询中没有任何内容与“ID计数...”相匹配。请发布生成消息的实际触发器。不过,作为一个暗示,说“作为Counted”并不会在任何地方设置任何变量。 –

+0

对不起,我在输入问题时输入了错字。它不是“ID计数”,它应该是“IF计数”。我的坏 – Tomala

回答

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; 

请注意,我也改变了= NULLis NULL,正确的方法做了比较NULL

+0

它帮助!唯一的是“> =”符号应该是“<=”。谢谢! – Tomala

+0

“尝试将'Counted'定义为变量”? – eggyal