MySQL触发器强制执行约束

时间:2014-03-30 17:58:43

标签: mysql triggers

我正在尝试创建一个表来对我的电影表强制执行以下约束

  • 长度不能小于30分钟或大于480分钟
  • 年份必须是1929年或以后

这是我的触发器:

Create trigger trigger1 before insert on movies
For each row
Begin
    If (year < 1929 or length <30 or length > 480) then
Set message_text = “Invalid Input”’
End If
End

这是否是在这种情况下强制执行约束的正确方法?或者我应该做些什么?

1 个答案:

答案 0 :(得分:1)

MySQL目前不支持检查约束。

您可以定义一个,但引擎会默默忽略。 他们被允许定义未来的支持。

您可以添加显式触发器以使用正确的消息抛出错误状态。

示例

signal sqlstate 1062 set message_text = error_message;

更改您的触发器主体,如下所示:

Create trigger trigger1 before insert on movies
For each row
Begin
    If (year < 1929 or length <30 or length > 480) then
        Set error_message = 'Invalid Input ';

        signal sqlstate 1062 set message_text = error_message;
    End If;
End