【问题标题】:how to enforce a constraint in mysql?如何在mysql中强制执行约束?
【发布时间】:2011-09-07 06:04:28
【问题描述】:

我有一个表 T,其中包含两个整数类型的字段 A 和 B。

现在我想强制 A 小于或等于 B。

我是否必须创建“插入/更新前”触发器?

如果是,那么如何使触发器失败?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以在应用程序代码中执行此操作,但最安全的是通过触发器在数据库中执行此操作。

    为防止插入成功,请在触发器中生成错误。我们这样做:

    CREATE TRIGGER `t_insert`
    BEFORE UPDATE ON `t`
    FOR EACH ROW
      BEGIN
        IF new.A > new.B THEN
          CALL NONEXISTENT_PROC()
        END IF;
      END
    

    【讨论】:

    • 这是丑还是什么? ;-) 你怎么知道什么失败了,因为可能有几个触发器?我是否必须将程序命名为 greatness_constraint_failed_on_A_and_B_in_T()...我的天哪...
    • 从来没有说过它漂亮,甚至也不是最好的方式。我们只在一个地方使用它,那就是那些试图更新/删除我们拥有的审计日志表的人。怎么样 - 通过存储过程做所有事情。我有另一个这样运行的网站,我喜欢它。
    • 我只是想知道 b/c 这似乎是一个非常自然有用的功能,如果你的解决方案是最直接的解决方案,那么 MySQL 将严重缺乏它。
    猜你喜欢
    • 2012-12-05
    • 2015-07-13
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多