在postgres中,我们定义了一个约束,它基本上允许我们将表中具有特定值的条目数限制为一个。我们创建了这个约束:
在list_group(visitor_uid)上创建唯一索引列表$ default $ uk,其中list_type ='default';
这意味着唯一约束仅在list_type ='default'时应用,因此表中每个访问者只能有一个'默认'列表。
看起来MySql不支持唯一约束的附加位置。是否有另一种方法可以在MySQL的数据库模式中支持它?
答案 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
约束。