#mysql #foreign-keys
#mysql #внешние ключи
Вопрос:
create database priceTag;
use priceTag;
CREATE TABLE `ProductNumber` (
`Sku` INT auto_increment not null,
`Model` VARCHAR(100),
PRIMARY KEY (`Sku`)
);
ALTER TABLE ProductNumber AUTO_INCREMENT=60000;
CREATE TABLE `Manufacture` (
`Manufacture` VARCHAR(100),
`Model` VARCHAR(100),
`Category` VARCHAR(100),
PRIMARY KEY (`Model`)
);
CREATE TABLE `OpenBox` (
`Condtion` VARCHAR(100),
`LP` INT auto_increment not null,
`MissingItems` VARCHAR(100),
`Model_` VARCHAR(100),
FOREIGN KEY (`Model_`) REFERENCES `Manufacture`(`Model`),
PRIMARY KEY (`LP`)
);
ALTER TABLE OpenBox AUTO_INCREMENT=200000000;
CREATE TABLE `TAG` (
`SKU*` INT,
`Model*` VARCHAR(100),
`PRICE*` DECIMAL(10,2),
`LP*` INT,
`condtion*` VARCHAR(100),
FOREIGN KEY (`SKU*`) REFERENCES `ProductNumber`(`Sku`),
FOREIGN KEY (`Model*`) REFERENCES `Manufacture`(`Model`),
FOREIGN KEY (`LP*`) REFERENCES `OpenBox`(`LP`),
FOREIGN KEY (`condtion*`) REFERENCES `OpenBox`(`condtion`)
);
CREATE TABLE `Inventory` (
`INV` int,
`Sku!` int,
`Model!` VARCHAR(100),
FOREIGN KEY (`Sku!`) REFERENCES `ProductNumber`(`Sku`),
FOREIGN KEY (`Model!`) REFERENCES `Manufacture`(`Model`)
);
Комментарии:
1. Всегда предоставляйте полное и неизмененное сообщение об ошибке, а не его небольшую часть.
Ответ №1:
Столбец, на который вы ссылаетесь в FOREIGN KEY (`condtion*`) REFERENCES `OpenBox`(`condtion`)
(т.Е. OpenBox.condtion
), не индексируется.
Добавьте необходимое создание уникального индекса, а затем создайте TAG
таблицу.
Ответ №2:
Я протестировал ваш код, а затем побежал SHOW ENGINE INNODB STATUS
, чтобы получить более подробную информацию об ошибке.
ПОСЛЕДНЯЯ ОШИБКА ВНЕШНЕГО КЛЮЧА
2021-12-02 09:47:16 0x700007565000 Ошибка в ограничении внешнего ключа таблицы test2 / tag: FOREIGN KEY (
condtion*
) ССЫЛКИOpenBox
(condtion
)):Не удается найти индекс в таблице ссылок, в которой столбцы, на которые ссылаются ссылки, отображаются в качестве первых столбцов, или типы столбцов в таблице, а таблица ссылок не соответствует ограничению.
Он жалуется на этот внешний ключ:
FOREIGN KEY (`condtion*`) REFERENCES `OpenBox`(`condtion`)
OpenBox.condtion
Столбец не является первичным ключом или уникальным ключом. Внешние ключи должны ссылаться на ключ родительской таблицы.
У вас уже есть другой внешний ключ в вашей таблице ТЕГОВ, ссылающийся на OpenBox
таблицу. Вы хотите, чтобы condtion
столбец соответствующей строки был скопирован в таблицу ТЕГОВ? Это не то, как внешние ключи предназначены для использования.