CREATE TABLE `myenv` (
`userid` int(11) NOT NULL,
`envid` int(11) NOT NULL,
CONSTRAINT `fk` FOREIGN KEY (`envid``) REFERENCES `envtable` (`id`),
CONSTRAINT `fk` FOREIGN KEY (`userid``) REFERENCES `usertable` (`id`)
) ENGINE=InnoDB
上表已经有两列有两个外键。
现在我计划在两个列上添加主键,而不删除外键。
见下面的新代码:
CREATE TABLE `myenv` (
`userid` int(11) NOT NULL,
`envid` int(11) NOT NULL,
PRIMARY KEY (userid`,envid`),
CONSTRAINT `fk` FOREIGN KEY (`envid``) REFERENCES `envtable` (`id`),
CONSTRAINT `fk` FOREIGN KEY (`userid``) REFERENCES `usertable` (`id`)
) ENGINE=InnoDB
这是正确的代码?能不能让我知道它应该工作与否?
答案 0 :(得分:1)
实际上这里有几个问题:
首先,您需要拥有引用的两个表:envtable
和usertable
,每个表都有ID作为主键。
然后在表定义中:
工作代码:
CREATE TABLE `myenv` (
`userid` int(11) NOT NULL,
`envid` int(11) NOT NULL,
PRIMARY KEY (`userid`,`envid`),
CONSTRAINT `fk_myenv_envid` FOREIGN KEY (`envid`) REFERENCES `envtable` (`id`),
CONSTRAINT `fk_myenv_userid` FOREIGN KEY (`userid`) REFERENCES `usertable` (`id`)
) ENGINE=InnoDB;
使用以下公式命名约束是个好主意:
CONSTRAINT-NAME_TABLE-NAME_COLUMN-NAME
这确保了约束名称在数据库方面是唯一的(请注意,这不仅在同一个表中是唯一的。)