2012-02-28 63 views
2

我是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) 
); 

是否有这个选项,或者它应该否则产生的?

回答

2

问题归结为唯一性。如果您知道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了解更多信息。

3

首先,外键约束,我不认为它应该放在那里。据我可以告诉所有的约束声明后变量声明(这是一般的SQL的规范之一) 您几乎拥有它的复合关键,你只是一件错事,那就是写Contrament。这里是工作

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) 
) 
0

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

ALTER TABLE员工添加主键(EMP_ID,EMP_NAME)的例子;