#mysql #phpmyadmin #foreign-keys
#mysql #phpmyadmin #внешние ключи
Вопрос:
У меня есть 3 таблицы: company
, case
и report
.
Компания:
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
:
Итак, внешний ключ работает так, как я себе представлял. Но когда я пытаюсь вставить строку в report
таблицу, в которой используется составной внешний ключ, состоящий из 2 столбцов, это выглядит следующим образом:
Почему это? Для меня это выглядит так, как будто соединение не установлено между двумя таблицами, и это case_company_name
и case_id
просто обычные столбцы.
Ответ №1:
Скорее всего, это означает только то, что phpmyadmin не работает с составными ссылками таким образом. Вы можете легко проверить существующие ограничения, используя SHOW CREATE TABLE report