【问题标题】:MySQL: Unique constraint on multiple fields [duplicate]MySQL:多个字段的唯一约束[重复]
【发布时间】:2011-01-31 00:47:24
【问题描述】:

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

我希望每个变量都有一组唯一的条目。如果我使值条目唯一,那么不同的变量将无法具有相同的值,这是不正确的。

有没有办法让相同的 var_id 的值列唯一?

【问题讨论】:

    标签: sql mysql unique


    【解决方案1】:

    是的,您可以创建一个复合unique key

    ALTER TABLE variable_entries ADD UNIQUE (var_id, value);
    

    【讨论】:

    • 感谢composite这个词,让我明白了它的作用。
    【解决方案2】:

    是的:

    alter table Variable_Entries add unique (var_id, value);
    

    现在你有一个跨越 var_id 和 value 的唯一约束。换句话说,var_id 和 value 的出现都不能出现多次。

    【讨论】:

    • 谢谢,还有下面的人——我在任何地方都找不到这个
    • 在创建表时有没有办法强制执行此操作?
    • 你可能不想知道,但为了别人,create table tbl_table ( id integer not null auto_increment, fname varchar(255), lname varchar(255), CONSTRAINT tbl_table PRIMARY KEY (id), unique (fname,lname) )
    • 这是否意味着 var_id 的特定值可以出现多次,但 var_id 和 value 的特定组合不能出现多次?
    • @Scorb 是的。就是这个意思。
    【解决方案3】:

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

    此外,您应该始终对表名使用单数词(用户而不是用户)。切勿在表名中使用大写字符,因为这会导致您在不同的操作系统上做噩梦。

    【讨论】:

    • 我想知道为什么我们总是要为表名使用单数名称?
    • “您应该始终使用单数来表示表名” - 我不同意。我总是使用复数形式,而且我知道我并不孤单(例如,ActiveRecord 也是如此)。
    • CakePHP 依赖于表名的复数...这是一个有趣的评论 :) 大写,不过...我同意
    • 复数与单数表名是一场宗教辩论stackoverflow.com/questions/338156/…
    猜你喜欢
    • 2021-08-28
    • 2019-02-27
    • 2013-04-30
    • 1970-01-01
    • 2013-12-01
    • 2015-12-17
    • 2012-05-11
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多