#mysql #database
Вопрос:
Я пытаюсь вставить свои данные в созданные мной таблицы, я получаю эти две ошибки следующим образом. Я не совсем понимаю, что эти ошибки пытаются мне подсказать, чтобы исправить или изменить в моих данных. Сможет ли кто-нибудь указать мне в правильном направлении, какие данные будут вызывать появление этих ошибок. Я приложу свой код ниже ошибок. Спасибо всем вам.
Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (
meraki
.truck
, ОГРАНИЧЕНИЕtruck_ibfk_1
ВНЕШНЕГО КЛЮЧА (TruckMakeID
,TruckModelID
) ССЫЛКИtruckmodel
(TruckMakeID
,TruckModelID
))
Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (
meraki
.allocation
, ОГРАНИЧЕНИЕallocation_ibfk_1
ВНЕШНЕГО КЛЮЧА (TruckVINNum
) ССЫЛКИtruck
(TruckVINNum
))
Код выглядит следующим образом
CREATE DATABASE meraki; - List item USE meraki; create table TruckMake( TruckMakeID char(5), TruckMakeName varchar(20), primary key(TruckMakeID)); -- create Truckmodel create table TruckModel( TruckMakeID char(5), TruckModelID char(4), TruckModelName char(4), primary key(TruckMakeID, TruckModelID), foreign key(TruckMakeID) references TruckMake(TruckMakeID)); -- create Truck create table Truck( TruckVINNum varchar(4), TruckMakeID char(3), TruckModelID char(3), TruckColour varchar(25), TruckPurchaseDate varchar(40), TruckCost varchar(25), primary key (TruckVINNum), foreign key (TruckMakeID,TruckModelID) references TruckModel(TruckMakeID,TruckModelID)); -- create Service create table Service( TransportID char(2), TransportName varchar(20), TransportCost varchar(20), TransportMaxDist varchar(15), primary key (TransportID)); -- create allocation create table Allocation( TruckVINNum varchar(4), TransportID char(3), FromDate varchar(25), ToDate varchar(25), primary key(TruckVINNum,TransportID), foreign key(TruckVINNum) references Truck(TruckVINNum), foreign key(TransportID) references Service(TransportID)); -- insert Truck Makes Insert into TruckMake values ('TMI1','Mercedes'); Insert into TruckMake values ('TMI2','Volvo'); Insert into TruckMake values ('TMI3','Toyota'); Insert into TruckMake values ('TMI4','Subaru'); Insert into TruckMake values ('TMI5','Ford'); Insert into TruckMake values ('TMI6','Ferrari'); Insert into TruckMake values ('TMI7','Bugatti'); Insert into TruckMake values ('TMI8','Pagani'); Insert into TruckMake values ('TMI9','Volvo'); -- insert Truck Models Insert into TruckModel values ('TMI1','MO1','MA12'); Insert into TruckModel values ('TMI2','MO2','LA17'); Insert into TruckModel values ('TMI3','MO3','LH21'); Insert into TruckModel values ('TMI4','MO4','MJ21'); Insert into TruckModel values ('TMI5','MO5','OY21'); Insert into TruckModel values ('TMI6','MO6','UI12'); Insert into TruckModel values ('TMI7','MO7','LH18'); Insert into TruckModel values ('TMI8','MO8','MH21'); Insert into TruckModel values ('TMI9','MO9','OH12'); -- insert Trucks Insert into Truck values ('V023','TM1','MO1','Red','3rd of September, 2021','$350000'); Insert into Truck values ('JK01','TM2','MO2','Green','16th of June, 2020','$343582.56'); Insert into Truck values ('LY29','TM3','MO3','Green','12th of July, 2021','$342499.63'); Insert into Truck values ('AB43','TM4','MO4','White','24th of January, 2020','$360000.51'); Insert into Truck values ('LP21','TM5','MO5','White','12th of Feburary, 2021','$354000.25'); Insert into Truck values ('V022','TM6','MO6','Red','3rd of October, 2021','$345000'); Insert into Truck values ('JK04','TM7','MO7','Red','15th of December, 2020','$247522.36'); Insert into Truck values ('LY25','TM8','MO8','Black','20th of January, 2016','$348499.13'); Insert into Truck values ('AB33','TM9','MO9','Black','30th of January, 2019','$220410.31'); -- inset Service Insert into Service values ('T1','RemovalServices','$7589','500'); Insert into Service values ('T2','Extractor','$6578','1100'); Insert into Service values ('T3','Movalist','$2200','700'); Insert into Service values ('T4','MovementServices','$6859','1220'); Insert into Service values ('T5','Transportalist','$4530','1150'); Insert into Service values ('T6','RemovalServices','$1597','500'); Insert into Service values ('T7','Movalist','$3000','1100'); Insert into Service values ('T8','Extractor','$2200','700'); Insert into Service values ('T9','Transportalist','$6859','1220'); -- insert Allocation Insert into Allocation values ('V023','T1','1st of October,2020','3rd of October,2020'); Insert into Allocation values ('JK01','T2','2nd of January,2021','5th of January,2021'); Insert into Allocation values ('LY29','T3', '3rd of July,2020','6th of July,2020'); Insert into Allocation values ('AB43','T4','5th of June,2021','8th of June,2021'); Insert into Allocation values ('LP21','T5','7th of Janurary,2020','11th of January,2020'); Insert into Allocation values ('V022','T6','10th of February,2021','14th of February,2021'); Insert into Allocation values ('JK04','T7','15th of September,2020','18th of September,2020'); Insert into Allocation values ('LY25','T8','17th of October,2021','21st of October,2021'); Insert into Allocation values ('AB33','T9','18th of March,2020','20th of March,2020');
Комментарии:
1. MySQL lt;gt; SQL Server — пожалуйста, исправьте свои теги.
2. Ошибка объясняется сама собой —
Cannot add or update a child row: a foreign key constraint fails
. Ваши запросы выполняются в потоке, в котором запрос на вставку дочерней таблицы выполняется перед родительской таблицей, и оба они связаныparent - child
отношениями.
Ответ №1:
При попытке вставить значения в таблицу, в которой определены внешние ключи, необходимо убедиться, что конкретные значения, введенные для столбцов внешних ключей, доступны в родительской таблице.
В вашем случае при вставке значений в таблицы TruckMake
и TruckModel
, для TruckMakeID
столбца, вы используете значения с префиксом TMI
. Но при вставке значений в Truck
таблицу для столбца TruckMakeID
вы используете значения с префиксом TM
( I
отсутствует). В этом причина ошибки, так как значения с префиксом TM
, за которым следует число, недоступны в TruckModel
таблице.
Поскольку данные не добавляются в таблицу грузовиков, при попытке вставить значения в таблицу возникают ошибки Allocation
, так как для TruckVINNum
ссылки из таблицы определен внешний ключ Truck
.