Я создал таблицы в MySQL Workbench, как показано ниже:
Таблица ORDRE:
CREATE TABLE Ordre (
OrdreID INT NOT NULL,
OrdreDato DATE DEFAULT NULL,
KundeID INT DEFAULT NULL,
CONSTRAINT Ordre_pk PRIMARY KEY (OrdreID),
CONSTRAINT Ordre_fk FOREIGN KEY (KundeID) REFERENCES Kunde (KundeID)
)
ENGINE = InnoDB;
Таблица PRODUKT:
CREATE TABLE Produkt (
ProduktID INT NOT NULL,
ProduktBeskrivelse VARCHAR(100) DEFAULT NULL,
ProduktFarge VARCHAR(20) DEFAULT NULL,
Enhetpris INT DEFAULT NULL,
CONSTRAINT Produkt_pk PRIMARY KEY (ProduktID)
)
ENGINE = InnoDB;
и таблица ORDRELINJE:
CREATE TABLE Ordrelinje (
Ordre INT NOT NULL,
Produkt INT NOT NULL,
AntallBestilt INT DEFAULT NULL,
CONSTRAINT Ordrelinje_pk PRIMARY KEY (Ordre, Produkt),
CONSTRAINT Ordrelinje_fk FOREIGN KEY (Ordre) REFERENCES Ordre (OrdreID),
CONSTRAINT Ordrelinje_fk1 FOREIGN KEY (Produkt) REFERENCES Produkt (ProduktID)
)
ENGINE = InnoDB;
поэтому, когда я пытаюсь вставить значения в ORDRELINJE
таблицу, я получаю:
Код ошибки: 1452. Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (
srdjank
.Ordrelinje
, ОГРАНИЧЕНИЕOrdrelinje_fk
FOREIGN KEY (Ordre
) REFERENCESOrdre
(OrdreID
))
Я видел другие сообщения по этой теме, но безуспешно. Я что-то контролирую или есть идеи, что делать?
mysql
sql
mariadb
mysql-error-1452
user3289677
источник
источник
Ответы:
Взято из использования ограничений FOREIGN KEY
Таким образом, ваша ошибка по
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails
существу означает, что вы пытаетесь добавить строку в своюOrdrelinje
таблицу, для которой в таблице нет соответствующей строки (OrderID)Ordre
.Вы должны сначала вставить строку в свою
Ordre
таблицу.источник
Вы получаете эту проверку ограничения, потому что
Ordre
таблица не имеет ссылкиOrdreID
в команде вставки.Чтобы вставить значение в
Ordrelinje
, вы сначала должны ввести значение вOrdre
таблицу и использовать егоOrdreID
вOrderlinje
таблице.Или вы можете удалить ненулевое ограничение и вставить в него значение NULL.
источник
Вы должны удалить данные в дочерней таблице, которая не имеет соответствующего значения внешнего ключа для первичного ключа родительской таблицы. Или удалите все данные из дочерней таблицы, а затем вставьте новые данные, имеющие то же значение внешнего ключа, что и первичный ключ в родительской таблице. , Это должно сработать. Здесь также видео на YouTube
источник
Проблема связана с ограничением FOREIGN KEY. По умолчанию (SET FOREIGN_KEY_CHECKS = 1). Параметр FOREIGN_KEY_CHECKS указывает, следует ли проверять ограничения внешнего ключа для таблиц InnoDB. MySQL - УСТАНОВИТЬ FOREIGN_KEY_CHECKS
Мы можем отключить проверку внешнего ключа перед запуском запроса. Отключить внешний ключ .
Выполните одну из этих строк перед запуском вашего запроса, тогда вы сможете успешно выполнить свой запрос. :)
1) Для сеанса (рекомендуется)
2) Глобально
источник
Эта ошибка обычно возникает из-за того, что у нас есть некоторые значения в поле ссылки дочерней таблицы, которые не существуют в поле ссылки / кандидата родительской таблицы.
Иногда мы можем получить эту ошибку, когда применяем ограничения внешнего ключа к существующим таблицам (таблицам), в которых уже есть данные . В некоторых других ответах предлагается полностью удалить данные из дочерней таблицы, а затем применить ограничение. Однако это не вариант, когда у нас уже есть рабочие / производственные данные в дочерней таблице. В большинстве сценариев нам потребуется обновить данные в дочерней таблице (вместо их удаления).
Теперь мы можем использовать
Left Join
для поиска всех этих строк в дочерней таблице, которая не имеет совпадающих значений в родительской таблице. Следующий запрос был бы полезен для получения этих несовпадающих строк:Теперь вы обычно можете выполнить один (или несколько) из следующих шагов, чтобы исправить данные.
null
.Как только данные зафиксированы, мы можем применить ограничение внешнего ключа, используя
ALTER TABLE
синтаксис.источник
в таблице внешнего ключа есть значение, которое не принадлежит в таблице первичного ключа, которая будет связана, поэтому вы должны сначала удалить все данные / настроить значение вашей таблицы внешнего ключа в соответствии со значением, которое находится в вашем первичном ключе
источник
У меня возникла эта проблема, хотя в моей родительской таблице были все значения, на которые я ссылался в моей дочерней таблице. Проблема заключалась в том, что я не мог добавить несколько дочерних ссылок к одному внешнему ключу. Другими словами, если бы у меня было пять строк данных, ссылающихся на один и тот же внешний ключ, MySQL позволял мне загружать только первую строку и выдавал мне ошибку 1452.
Для меня сработало набрать код «SET GLOBAL FOREIGN_KEY_CHECKS = 0». После этого я закрыл MySQL, а затем перезапустил его, и я смог загрузить все свои данные без ошибок. Затем я набрал «SET GLOBAL FOREIGN_KEY_CHECKS = 1», чтобы вернуть систему в нормальное состояние, хотя я не совсем уверен, что делает FOREIGN_KEY_CHECKS. Надеюсь это поможет!
источник
Это можно исправить, вставив сначала соответствующие записи в родительскую таблицу, а затем мы можем вставить записи в соответствующий столбец дочерней таблицы. Также проверьте тип данных и размер столбца. Он должен быть таким же, как столбец родительской таблицы, даже механизм и сопоставление также должны быть такими же. ПОПРОБУЙ ЭТО! Вот как я решил свою. Поправьте меня, если ошибаюсь.
источник
Ваша
ORDRELINJE
таблица связана сORDER
таблицей с использованием ограничения внешнего ключа, вconstraint Ordrelinje_fk foreign key(Ordre) references Ordre(OrdreID)
соответствии с которымOrdre int NOT NULL,
столбец таблицыORDRELINJE
должен соответствовать любомуOrdre int NOT NULL,
столбцуORDER
таблицы.Теперь, что здесь происходит, когда вы вставляете новую строку в
ORDRELINJE
таблицу, в соответствии с ограничением fkOrdrelinje_fk
она проверяетORDER
таблицуOrdreID
, присутствует ли она или нет, и поскольку она не соответствует ни одному OrderId, компилятор жалуется на нарушение внешнего ключа. Это причина, по которой вы получаете эту ошибку.Внешний ключ - это первичный ключ другой таблицы, который вы используете в любой таблице для связи между ними. Этот ключ связан ограничением внешнего ключа, которое вы указываете при создании таблицы. Любая операция с данными не должна нарушать это ограничение. Нарушение этого ограничения может привести к подобным ошибкам.
Надеюсь, я прояснил это.
источник
При вставке значений атрибутов внешнего ключа сначала проверьте тип атрибутов, а также значение атрибута первичного ключа в родительском отношении. Если значения в родительском отношении совпадают, вы можете легко вставить / обновить значения дочерних атрибутов.
источник
вы должны добавить данные из REFERENCES KEY в PRIMARY TABLE к FOREIGN KEY в CHILD TABLE,
это означает, что не добавляйте случайные данные во внешний ключ ، просто используйте данные из первичного ключа, которые доступны
описание данных во внешнем ключе
источник
Это помогло мне после прочтения ответов @ Mr-Faizan и других.
в phpMyAdmin и нажмите запрос. Я не знаю о WorkBench, но другие ответы могут вам помочь.
источник
вы должны вставить по крайней мере один raw в каждую таблицу (те, на которые вы хотите, чтобы внешние ключи указывали), тогда вы можете вставить или обновить значения внешних ключей
источник
втисну это сюда: в моем случае я пытался создать лайк для сообщения, которое не существует; при фиксации в базе данных возникла ошибка. Решение заключалось в том, чтобы сначала создать сообщение, а затем оно понравится. Насколько я понимаю, если post_id должен быть сохранен в таблице лайков, ему нужно сначала проверить таблицу сообщений, чтобы убедиться в существовании. Я счел, что так будет лучше, так как для меня это более логично ...
источник
Когда вы используете внешний ключ , порядок столбцов при вставке должен быть таким же .
Например, если вы добавляете
(userid, password)
в table1 из table2 затем из table2 порядке должны быть одинаковыми(userid, password)
и не так, как(password,userid)
, гдеuserid
находится внешний ключ в table2 из table1 .источник
Проблема возникает из-за того, что вы устанавливаете внешний ключ в дочерней таблице после вставки некоторых данных в дочернюю таблицу.
Попробуйте удалить все данные из дочерней таблицы, затем установите внешний ключ, а затем добавьте / вставьте данные в таблицу, это будет работать.
источник
проверьте нет. записи в родительской таблице, которая соответствует дочерней таблице, а также первичный ключ, должен совпадать со ссылкой на внешний ключ. У меня это работает.
источник
Его 100% рабочий ...
ОШИБКА 1452: Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не работает .... если возникает этот тип ошибки: то в первую очередь перейдите к этой таблице и проверьте параметр>, если Engine: InnoDB, затем измените его на MyISAM
(и удалить ссылки внешнее ограничение)
источник