MySql:复合唯一键

时间:2013-12-18 12:57:03

标签: mysql sql

我想制作2列id & code的复合键,这两列完全应该像表格的唯一键一样。我浏览过并尝试按如下方式创建表格,

Create table test (
  `test_no` int not null AUTO_INCREMENT,
  `code` varchar(5) NOT NULL,  
  `name` varchar(255),
  `UPDBy` varchar(255),
  PRIMARY KEY (`test_no`),
  FOREIGN KEY (code) REFERENCES other_table(code)
 // CONSTRAINT `K_test_1` Unique KEY (`test_no`,`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

再想一想,我可以将这两列作为PK吗?我认为这符合我的目的,RIght?

CONSTRAINT `K_test_1` Primary KEY (`test_no`,`code`) OR  Primary KEY (`test_no`,`code`)

2 个答案:

答案 0 :(得分:3)

你似乎在某种程度上走错了路。您的表具有自动递增的ID。这不应该是主键吗?你为什么称它为ID呢?

构建数据库有两种方法:使用用户习惯的自然值,例如员工编号和部门编号等。或使用ID(通常对用户隐藏)。您将拥有一个具有主键“id”或“employee_id”或其他的员工表,而员工编号就像一个字段。但由于它必须是唯一的,因此您将在该字段上有一个额外的唯一索引。

说完了;你有一个表“other_table”与主键“代码”似乎。所以你这里没有使用ID概念。那你为什么要在桌面测试中使用呢?如果这是other_table上的详细信息表,那么我希望复合键类似于代码+ test_no(因此显示每个代码的编号测试),用于isntance。

所以本质是:1。想想你的桌子包含什么。 2.考虑使用ID或自然键。这些问题的答案应该可以帮助您找到适合您桌子的正确钥匙。 (有时表甚至没有主键,也不需要。)

答案 1 :(得分:2)

您确定可以将它们设为PRIMARY KEY。如果您不想,请使用UNIQUE代替UNIQUE KEY

要将两者都设为PRIMARY KEY,请执行以下操作:

...
PRIMARY KEY (`id`, `code`);
...

要设置UNIQUE CONSTRAINT,请执行以下操作:

...
CONSTRAINT `K_test_1` UNIQUE (`id`,`code`);
...