具有MYSQL条件的唯一约束

时间:2009-06-12 14:57:55

标签: mysql postgresql

在postgres中,我们定义了一个约束,它基本上允许我们将表中具有特定值的条目数限制为一个。我们创建了这个约束:

在list_group(visitor_uid)上创建唯一索引列表$ default $ uk,其中list_type ='default';

这意味着唯一约束仅在list_type ='default'时应用,因此表中每个访问者只能有一个'默认'列表。

看起来MySql不支持唯一约束的附加位置。是否有另一种方法可以在MySQL的数据库模式中支持它?

5 个答案:

答案 0 :(得分:2)

MYSQL不支持此类约束。

您应该使用存储过程来插入数据,这样您就可以进行一些检查和验证。

为什么不将默认值定义为必须将1作为主键?这样,对pk的正常唯一约束就足够了。

如果没有任何内容适合您,您还可以考虑更改数据模型。

答案 1 :(得分:0)

实际上它存在。大多数约束依赖于表引擎。 我认为InnoDB支持这一点。

为此,您必须使用唯一组合添加UNIQUE索引:

ALTER TABLE visitor ADD UNIQUE unique_default_visitor( visitor_uid, list_type );

答案 2 :(得分:0)

我认为你必须写一个触发器来检查它。

答案 3 :(得分:0)

我从不使用MySQL,但也许您可以创建这样的索引:

CREATE UNIQUE INDEX list$default$uk ON list_group ((CASE WHEN list_type='default' THEN NULL ELSE visitor_uid END));

说明: 唯一索引不应该关心NULL值。因此,请确保索引表达式为list_type<>的每一行返回NULL。 '默认'。

答案 4 :(得分:0)

我的两分钱:

为什么不创建一个列只存储唯一值(也许你可以称之为is_list_type_default)而另一个存储所有值。如果这样做,您可以在第一列上添加unique约束。