MySQL:多字段唯一约束

10

我有两个表--> Variables (id, name) 和 Variable_Entries (id, var_id, value)。

我希望每个变量都拥有一个唯一的条目集。如果我将value条目设为唯一,则不同变量将无法拥有相同的值,这是不正确的。

是否有一种方法可以使相同的var_id具有唯一的value列?

3个回答

12

可以:

alter table Variable_Entries add unique (var_id, value);

现在,您可以通过var_id和value的组合设置唯一约束。换句话说,var_id和value的任何组合只能出现一次。


谢谢,还有下面的人们——我在任何地方都找不到这个。 - Cypher
在创建表时有办法强制执行此操作吗? - puk
2
你可能不想知道,但为了其他人的利益, 创建表tbl_table ( id 整数 非空 自增, fname 字符串(255), lname 字符串(255), 约束 tbl_table 主键 (id), 唯一约束 (fname,lname) ) - Kelly Larsen
这是否意味着 var_id 的特定值可以出现多次,但是 var_id 和 value 的特定组合不能出现多次? - Scorb
@Scorb 是的,就是这个意思。 - veritas

6

是的,您可以创建一个复合唯一键

ALTER TABLE variable_entries ADD UNIQUE (var_id, value);

谢谢你提供“composite”这个词,让我明白了它的作用。 - Prof. Falken

0

为组合字段var_id/value添加唯一键Variable_Entries。

此外,应始终使用表名的单数形式(例如使用"user"而不是"users")。不要使用大写字符作为表名,因为这会在不同操作系统上造成问题。


我想知道为什么我们总是要使用单数名称作为表名? - Daniel Vassallo
“你应该总是使用单数词作为表名” - 我不同意。我总是使用复数形式,而且我知道我并不孤单(例如,ActiveRecord也是这样做的)。 - Ross Snyder
CakePHP 依赖于复数形式来命名数据表...这是一个有趣的评论 :) 虽然需要大写...但我同意。 - luigi7up
复数与单数表名是一场宗教性的辩论。https://dev59.com/-XRC5IYBdhLWcg3wUfN2 - Steve Kuo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接