【问题标题】:phpMyAdmin trigger gui checking agephpMyAdmin 触发 gui 检查年龄
【发布时间】:2019-04-24 16:58:04
【问题描述】:

我想在将记录插入“员工”表之前检查年龄是否大于 18 岁。我正在使用 phpMyAdmin gui 触发工具。但是当我在定义部分键入此脚本时,它会出现以下错误。

BEGIN
    IF (DATEDIFF(CURRENT_DATE(),NEW.birth_date) < 6570) THEN
        RAISEERROR('Age is less than 18 years!',16,1)
        ROLLBACK
    END IF
END

请帮我解决这个问题。

【问题讨论】:

  • RAISEERRORROLLBACK 是 TSQL(Microsoft SQL Server)的东西。你确定你使用的是 MySQL 吗?
  • 我可以在 mySQL 中使用什么来代替 ROLEBACK 和 RAISERROR?但是,如果没有这些行,它会给出错误
  • 因为这些不是标准 SQL 的东西。每个 RDBMS 都有自己的触发器语法。
  • 你能给我推荐用于上述目的的正确 mySQL 代码吗?

标签: mysql triggers phpmyadmin database-trigger raiserror


【解决方案1】:

RAISEERRORROLLBACK 用于 TSQL (Microsoft SQL Server) 语法。

以 MySQL 为例,我们使用SIGNAL .. SET MESSAGE_TEXT .. 在 Trigger 内抛出异常:

BEGIN
    IF (DATEDIFF(CURRENT_DATE(),NEW.birth_date) < 6570) THEN

      -- Throw Exception
      SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = 'Age is less than 18 years!';

    END IF;  -- A semicolon (delimiter) is missing here
END

要发出通用 SQLSTATE 值的信号,请使用“45000”,这意味着 “未处理的用户定义异常。”

SIGNAL 执行后可访问的错误值是 SIGNAL 语句和 MESSAGE_TEXT 引发的 SQLSTATE 值和 MYSQL_ERRNO 项。

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2016-12-02
    • 2012-01-18
    • 2021-03-30
    • 2020-04-04
    相关资源
    最近更新 更多