2011-06-02 89 views
1

我有一个表T与两个字段A和B的整数类型。如何在mysql中强制约束?

现在我想执行A是小于或等于B.

我一定要创建一个“前插入/更新” - 触发器?

如果是的话,我该如何让触发失败?

回答

2

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

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

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

这是丑陋的还是什么? ;-)你怎么知道什么失败了,因为可能有几个触发器?我是否必须将程序命名为greatness_constraint_failed_on_A_and_B_in_T()...我的天啊... – Raffael 2011-06-03 08:19:19

+0

永远不要说它很漂亮,甚至不是最好的方法。我们只在一个地方使用它,这是为那些试图更新/删除我们所拥有的审计日志表的人。 这个怎么样 - 通过一个存储过程来完成所有的事情。我有另一个网站,像这样运行,我喜欢它。 – 2011-06-08 21:39:57

+0

我只是想知道B/C这似乎是一个非常自然有用的功能,如果你的是最直接的解决方案,那么MySQL将缺乏认真。 – Raffael 2011-06-09 09:39:44