mysql - phpMyAdmin 触发 gui 检查年龄

标签 mysql triggers phpmyadmin database-trigger raiserror

我想在将记录插入“员工”表之前检查年龄是否大于 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

error message

请帮我解决这个问题。

最佳答案

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

对于 MySQL,我们使用 SIGNAL .. SET MESSAGE_TEXT ..在触发器中抛出异常:

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

To signal a generic SQLSTATE value, use '45000', which means “unhandled user-defined exception.”

The error values that are accessible after SIGNAL executes are the SQLSTATE value raised by the SIGNAL statement and the MESSAGE_TEXT and MYSQL_ERRNO items.

关于mysql - phpMyAdmin 触发 gui 检查年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53423662/

相关文章:

mysql - 从 MySQL 触发器中的第三个表获取信息

phpmyadmin - 删除 phpMyAdmin 中的数据库

mysql - 无法添加或更新子行 : a foreign key constraint fails when trying to add a new row

php - 如何调用使用onclick从 map 区域内查询mysql的php函数

mysql - rake 数据库 :migrate runs in development AWS Beanstalk

mysql - 如何通过从另一个表加入来更新 mysql 中的列?

asp.net - 按钮单击在更新面板中不起作用

c# - 使用触发器更改已绑定(bind)到 View 模型的属性

php - mysql按特定顺序按多个值排序

php - 我可以使用 phpmyadmin 的 import.php 文件吗