Я получаю код ошибки 1822 при создании таблицы ТЕГОВ

#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 столбец соответствующей строки был скопирован в таблицу ТЕГОВ? Это не то, как внешние ключи предназначены для использования.