我想制作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`)
答案 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`);
...