Mysql添加主键

时间:2015-09-15 11:08:34

标签: mysql sql

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

这是正确的代码?能不能让我知道它应该工作与否?

1 个答案:

答案 0 :(得分:1)

实际上这里有几个问题:

首先,您需要拥有引用的两个表:envtableusertable,每个表都有ID作为主键。

然后在表定义中:

  • 你错过了一些backqoutes
  • 您已命名约束 同样。

工作代码:

 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

这确保了约束名称在数据库方面是唯一的(请注意,这不仅在同一个表中是唯一的。)