如何创建复合键?

时间:2012-02-28 09:37:29

标签: mysql sql constraints composite mysql-workbench

我是MySQL WB的新手,所以我可以通过添加依赖表之间的关系来创建外键。

但是如何创建复合键? 例如,我有这个表sql

CREATE TABLE TASKS
(
 TEST_ID NUMBER(6) CONSTRAINT FK_TASKS_TESTS REFERENCES TESTS(TEST_ID),
 TASK_ID NUMBER(3),
 MAX_POINTS NUMBER,
 CONSTRAINT PK_TASKS PRIMARY KEY (TEST_ID, TASK_ID)
);

是否有这样的选项,否则应该创建它?

3 个答案:

答案 0 :(得分:4)

问题归结为独特性。如果您知道TASK_ID将是唯一的,那么最好将一列作为主键。 MySQL允许使用多列主键,但如果TASK_ID是唯一的,只需将其作为主键并在TEST_ID上添加另一个索引即可。主键的语法是:

CREATE TABLE TASKS
(
TEST_ID NUMBER(6),
TASK_ID NUMBER(3),
MAX_POINTS NUMBER,
PRIMARY_KEY(TASK_ID) -- OR PRIMARY_KEY(TASK_ID, TEST_ID) for the composite key
);

有关详细信息,请参阅this discussion

答案 1 :(得分:3)

首先是外键约束,我不认为它应该放在那里。据我所知,所有的约束都是在变量声明后声明的(一般是sql的规范之一) 对于你几乎拥有它的复合键,你只有一个错误就是编写Contraint。这是工作的例子

CREATE TABLE IF NOT EXISTS TASK (
  TEST_ID NUMBER(6) ,
  TASK_ID NUMBER(3) ,
  MAX_POINTS NUMBER ,
  PRIMARY KEY (TEST_ID,TASK_ID),

  CONSTRAINT fk_1 FOREIGN KEY (`TEST_ID`) REFERENCES TEST (TEST_ID)
)

答案 2 :(得分:0)

假设您已经创建了一个表,现在可以使用此查询来创建复合主键

alter table employee add主键(emp_id,emp_name);