【问题标题】:mysql: unique value in a field with respect to another fieldmysql:一个字段中相对于另一个字段的唯一值
【发布时间】:2014-12-13 20:28:10
【问题描述】:

假设我有一个包含 3 个字段 col1、col2、col3 的数据库表 比如说 col1 是主索引。

我知道我们可以将字段设置为唯一的。

我可以在结构中做一些事情,col3 相对于 col2 应该是唯一的,也就是说,对于 col2 中的值,col3 中不能有 2 个相同的值。

或者在将数据传递到数据库之前,我已经在服务器端进行了此验证?

例子—— (1,10,3) (2,10,4) (3,11,3) 是有效的,但是 (1,10,3) (2,10,4) (3,11,3) (4,11,3) 无效。

我想到的一个可能的解决方案是—— 将 col2 和 col3 的值存储在单独的字段中,例如“col2value-col3value”,并使该字段唯一。

我正在使用 mysql。

我是新手。所以,一些细节会有所帮助。谢谢。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您只需要使col2col3 的组合独一无二。这确实需要将它们设为主键。我会在这对上创建一个唯一索引:

    create unique index idx_tbl_col2_col3 on (col2, col3)
    

    请注意:NULL 值为此目的而被忽略。因此,如果一个是NULL,您仍然可以拥有相同的值。一种选择是声明列NOT NULL。另一种方法是使用触发器来防止重复。

    【讨论】:

    • 谢谢。 :-) 我真的不太了解mysql。但我喜欢你们这里的人如何伸出手来解决问题。 :-)
    【解决方案2】:

    主键的概念可以扩展到多于一列。 你可以找到这个也被引用为Composite Primary Key

    您需要将 col2 和 col3 添加到主键集合中

    这样一来,col2 和 col3 的记录就不能等于表中已有的另一条记录了

    在创建阶段,请这样定义表:

    CREATE TABLE myTable (column1 INT NOT NULL, column2 INT NOT NULL, column3 INT NOT NULL,
                          PRIMARY KEY(column1, column2, column3))
    

    更多信息可以在here找到。

    【讨论】:

    • 复合唯一键和复合主键。这就是我今天学到的。谢谢你。 :-) 我不知道这个词。否则,我可以用谷歌搜索... :-D
    • 如果我不得不说实话,戈登的回答确实可以更好地模拟你的想法!
    猜你喜欢
    • 2010-11-13
    • 2013-10-08
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多