假设我有一个包含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。
我是新手。所以,一些细节会有所帮助。谢谢。
答案 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)
您只需将col2
,col3
组合成唯一。这不要求将它们作为主键。我会这样做,我在对上创建一个独特的索引:
create unique index idx_tbl_col2_col3 on (col2, col3)
作为注释:为此目的忽略NULL
个值。因此,如果一个是NULL
,您仍然可以使用相同的值。一种选择是声明列NOT NULL
。另一种方法是使用触发器来防止重复。