复合外键INSERT

时间:2014-07-07 13:14:38

标签: mysql phpmyadmin foreign-keys

我有3个表:companycasereport

公司

CREATE TABLE IF NOT EXISTS `db`.`company` (
  `name` VARCHAR(50) NOT NULL,
  `password` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`name`))
ENGINE = InnoDB;

情况下:

CREATE TABLE IF NOT EXISTS `db`.`case` (
  `id` VARCHAR(50) NOT NULL,
  `image` VARCHAR(255) NULL,
  `title` VARCHAR(100) NULL,
  `description` VARCHAR(255) NULL,
  `address` VARCHAR(255) NULL,
  `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `company_name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`company_name`, `id`),
  CONSTRAINT `fk_case_company`
    FOREIGN KEY (`company_name`)
    REFERENCES `db`.`company` (`name`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

报告:

CREATE TABLE IF NOT EXISTS `db`.`report` (
  `type` VARCHAR(50) NULL,
  `image` VARCHAR(255) NULL,
  `description` VARCHAR(255) NULL,
  `approval` BINARY NULL DEFAULT 0,
  `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `id` INT NOT NULL AUTO_INCREMENT,
  `case_company_name` VARCHAR(50) NOT NULL,
  `case_id` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`, `case_company_name`, `case_id`),
  INDEX `fk_report_case1_idx` (`case_company_name` ASC, `case_id` ASC),
  CONSTRAINT `fk_report_case1`
    FOREIGN KEY (`case_company_name` , `case_id`)
    REFERENCES `db`.`case` (`company_name` , `id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

当我使用case

phpMyAdmin表格中插入一行时

enter image description here

所以外键正如我想象的那样工作。但是当我尝试在report表中插入一行时,该行使用由2列组成的复合外键,它看起来像这样:

enter image description here

这是为什么?对我来说,看起来两个表之间没有连接,case_company_namecase_id只是常规列。

1 个答案:

答案 0 :(得分:0)

很可能它只是意味着phpmyadmin不能以这种方式使用复合引用。 您可以使用SHOW CREATE TABLE report

轻松检查现有约束