Mysql 复合外键插入
我有三个表格:Mysql 复合外键插入,mysql,phpmyadmin,foreign-keys,Mysql,Phpmyadmin,Foreign Keys,我有三个表格:公司,案例和报告 公司: 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
公司
,案例
和报告
公司:
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;
案例:
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;
报告:
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;
当我使用phpMyAdmin
将一行插入case
表时:
所以外键就像我想象的那样工作。但是,当我尝试在报告
表中插入一行时,它使用了一个由两列组成的复合外键,它看起来如下所示:
为什么会这样?在我看来,这两个表之间似乎没有建立连接,
case\u company\u name
和case\u id
只是常规列。很可能这只意味着phpmyadmin不能以这种方式处理复合引用。
您可以使用SHOW CREATE TABLE report