Mysql Innodb不接受外键

Mysql Innodb不接受外键,mysql,foreign-keys,innodb,Mysql,Foreign Keys,Innodb,我们无法运行下面的查询。我们有另一个名为“person”的表,它有一个主键person\u id。正如您所看到的,我们正试图将此列作为(customers表的)外键。phpMyAdmin返回#1064语法错误。这里怎么了 CREATE TABLE IF NOT EXISTS `resort`.`customers` ( `person_id` VARCHAR(45) NOT NULL , `cid` INT UNSIGNED NOT NULL AUTO_INCREMENT , UN

我们无法运行下面的查询。我们有另一个名为“person”的表,它有一个主键person\u id。正如您所看到的,我们正试图将此列作为(customers表的)外键。phpMyAdmin返回#1064语法错误。这里怎么了

CREATE  TABLE IF NOT EXISTS `resort`.`customers` (
  `person_id` VARCHAR(45) NOT NULL ,
  `cid` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  UNIQUE INDEX `person_id_UNIQUE` (`cid` ASC) ,
  PRIMARY KEY (`person_id`) ,
  UNIQUE INDEX `person_id_UNIQUE` (`person_id` ASC) ,
  CONSTRAINT `person_id`
    FOREIGN KEY ()
    REFERENCES `resort`.`person` ()
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB

顺便说一下,此查询是由Oracle的MySQL工作台生成的。

您需要在约束定义中包括以下列:

CONSTRAINT person_id
  FOREIGN KEY ()
  REFERENCES resort.person()
  ON DELETE CASCADE
  ON UPDATE CASCADE
应该是:

CONSTRAINT fk_person_id
  FOREIGN KEY (person_id)
  REFERENCES resort.person (id)
  ON DELETE CASCADE
  ON UPDATE CASCADE

您需要在约束定义中包括以下列:

CONSTRAINT person_id
  FOREIGN KEY ()
  REFERENCES resort.person()
  ON DELETE CASCADE
  ON UPDATE CASCADE
应该是:

CONSTRAINT fk_person_id
  FOREIGN KEY (person_id)
  REFERENCES resort.person (id)
  ON DELETE CASCADE
  ON UPDATE CASCADE

现在它说:“#1061-重复的键名‘person#u id_UNIQUE’”。天哪,看看你的SQL。这是因为您有两个同名的唯一定义:
UNIQUE INDEX person\u id\u UNIQUE(cid ASC)
UNIQUE INDEX person\u id\u UNIQUE(person\u id ASC)
UNIQUE INDEX
后面的部分是索引的名称。现在它说:“#1061-重复键名'person_id_UNIQUE'”天哪,看看你的SQL。这是因为您有两个同名的唯一定义:
UNIQUE INDEX person\u id\u UNIQUE(cid ASC)
UNIQUE INDEX person\u id\u UNIQUE(person\u id ASC)
唯一索引
后面的部分是索引的名称。