【问题标题】:Mysql trigger constraint checkMysql触发约束检查
【发布时间】:2014-06-28 13:55:08
【问题描述】:

我不是数据库专家,我在做数据库项目时需要帮助。我使用 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 cannot borrow more than 10 books' 附近使用的正确语法;第 5 行的 SIGNAL S'

感谢您的帮助!

【问题讨论】:

  • 您的示例查询中没有任何内容与“ID Counted ...”匹配。请发布生成消息的实际触发器。不过,作为提示,as Counted 不会在任何地方设置任何变量。
  • 对不起,我在输入问题时打错了字。它不是“ID Counted”,应该是“IF Counted”。我的坏

标签: mysql sql database triggers phpmyadmin


【解决方案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 比较的正确方法。

【讨论】:

  • 它有帮助!唯一的问题是“>=”符号应该是“
  • "尝试将Counted 定义为变量" ?
猜你喜欢
  • 1970-01-01
  • 2017-02-28
  • 2013-08-26
  • 2023-03-13
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多