mysql:相对于另一个字段的字段中的唯一值

时间:2014-12-13 20:28:11

标签: mysql database

假设我有一个包含3个字段col1,col2,col3的数据库表 比方说,col1是主要指标。

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

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

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

example-- (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。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您只需将col2col3组合成唯一。这要求将它们作为主键。我会这样做,我在对上创建一个独特的索引:

create unique index idx_tbl_col2_col3 on (col2, col3)

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