cannot add or update a child row a foreign key constraint fails mysql что делать

это, кажется, распространенная ошибка, но для жизни меня я не могу выяснить это.

у меня такое чувство, что я упускаю что-то очевидное. Удаление ключевого ограничения с помощью user_email и попытка обновить значение в user приводит к той же ошибке, но для следующего алфавитного user дочерняя таблица, поэтому я не считаю, что это ошибка таблицы.

добавление результатов из SHOW ENGINE INNODB STATUS :

6 ответов

Я решил мой’сбой ограничения внешнего ключа’, добавив следующий код в начало кода SQL (это было для импорта значений в таблицу)

затем добавьте этот код в конец файла

поскольку вы не дали определения таблиц, трудно догадаться. Но, похоже, вы пытаетесь изменить внешний ключ в дочерней таблице. AFAIK, это незаконно, вы можете изменить его из родительской, но не дочерней таблицы.

тогда это разрешено:

но это не так, потому что он изменяет Родительский fk из дочерней таблицы:

он получает ошибку, очень похожую на вашу ошибка:

Я столкнулся с той же проблемой при создании внешних ограничений на таблице. простой способ выйти из этой проблемы-сначала сделать резервную копию родительской и дочерней таблицы, а затем усечь дочернюю таблицу и снова попытаться установить связь. надеюсь, это решит проблему.

на несвязанной задаче я недавно поднял нашу базу данных MySQL в MySQL Workbench, и при просмотре отношений таблицы для вышеуказанных таблиц я заметил «дубликаты» и/или ложные отношения, которые я как-то пропустил раньше (они не появлялись в PHPMyAdmin FWIW). Устранение этих дополнительных связей немедленно прояснило проблему.

такая ошибка при обновлении может быть вызвана разница в наборе символов и сортировки, поэтому убедитесь, что они одинаковы для обеих таблиц.

надеюсь, что это поможет любому, кто имеет ту же ошибку при импорте данных CSV в связанные таблицы. В моем случае родительская таблица была в порядке, но я получил ошибку при импорте данных в дочернюю таблицу, содержащую внешний ключ. После временного удаления ограничения foregn key в дочерней таблице мне удалось импортировать данные и был удивлен, найдя некоторые значения в столбце FK, имеющие значения 0 (очевидно, это вызвало ошибку, так как родительская таблица не имела таких значения в столбце PK). Причина заключалась в том, что данные в моем столбце CSV, предшествующие столбцу FK, содержали запятые (которые я использовал в качестве делиметра поля). Изменение разделитель для моего CSV-файл решена проблема.

Источник

question

MySQL Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails

Im trying to insert values on this table using «insert into», but there is this error: «Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (TESTE.FUNCIONARIO, CONSTRAINT FUNCIONARIO_ibfk_1 FOREIGN KEY (CPF_SUPERVISOR) REFERENCES FUNCIONARIO (CPF))».

I cant find what is causing it.

This is the SHOW CREATE TABLE:

CREATE TABLE FUNCIONARIO (

PNOME varchar(10) DEFAULT NULL,

MINICIAL char(1) DEFAULT NULL,

UNOME varchar(10) DEFAULT NULL,

CPF varchar(11) NOT NULL,

DATANASC date DEFAULT NULL,

ENDERECO varchar(100) DEFAULT NULL, SEXO char(1) DEFAULT NULL,

SALARIO decimal(10,0) DEFAULT NULL,

CPF_SUPERVISOR varchar(11) NOT NULL,

DNR int DEFAULT NULL,

KEY CPF_SUPERVISOR (CPF_SUPERVISOR),

CONSTRAINT FUNCIONARIO_ibfk_1 FOREIGN KEY (CPF_SUPERVISOR) REFERENCES FUNCIONARIO (CPF),

CONSTRAINT FUNCIONARIO_ibfk_2 FOREIGN KEY (DNR) REFERENCES DEPARTAMENTO (DNUMERO)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

Anyone know what could be happening?

Hi @amrpk-0482, we have not get a reply from you, any update for this?

2 Answers

Probably CPF_SUPERVISOR cannot be “NOT NULL”. Try making it “NULL”.

When you insert a supervisor, specify NULL value for CPF_SUPERVISOR column.

When you insert other people, specify the corresponding value of CPF column, which was already inserted before.

Welcome to Microsoft Q&A!

MySQL is not Microsoft product, and there have some difference between SQL Server and MySQL, suggest that post your question in some other forum, such as MySQL Forums. By the way, if you would like to ask some question about SQL Server T-SQL, please added tag sql-server-transaction-sql.

And I did some research, this similar thread may be help you to resolved this error.

If the answer is helpful, please click «Accept Answer» and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Источник

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails

I am trying to insert values into my comments table and I am getting a error. Its saying that I can not add or update child row and I have no idea what that means. My schema looks something like this:

and the mysql statement I am trying to do looks something like this:

the error I get looks like this:

7 Answers 7

It just simply means that the value for column country on table comments you are inserting doesn’t exist on table country_type or you are not inserting value for country on table user. Bear in mind that the values of column country on table comments is dependent on the values of ID on table country_type.

You have foreign keys between this table and another table and that new row would violate that constraint.

Just to throw in my own issue in case it can help someone else, I was copy/pasting entries in my migration files and messed up by putting quotes around an integer. Since the value I was trying to enter was considered a string going into an integer field that was referencing another integer, this error came up.

Another option could be thath your primary key in source table IS NOT unsigned, so I solved same insert with (notice id int(8) unsigned):

CREATE TABLE IF NOT EXISTS user ( id int(8) unsigned NOT NULL AUTO_INCREMENT, username varchar(32) COLLATE utf8_bin NOT NULL,
password varchar(64) COLLATE utf8_bin NOT NULL, password_real char(32) COLLATE utf8_bin NOT NULL, email varchar(32) COLLATE utf8_bin NOT NULL, code char(8) COLLATE utf8_bin NOT NULL,
activated enum(‘0′,’1’) COLLATE utf8_bin NOT NULL DEFAULT ‘0’,
activation_key char(32) COLLATE utf8_bin NOT NULL, reset_key varchar(32) COLLATE utf8_bin NOT NULL, name varchar(32) COLLATE utf8_bin NOT NULL, street varchar(32) COLLATE utf8_bin NOT NULL,
house_number varchar(32) COLLATE utf8_bin NOT NULL,
apartment_number varchar(32) COLLATE utf8_bin NOT NULL, city varchar(32) COLLATE utf8_bin NOT NULL, zip_code varchar(32) COLLATE utf8_bin NOT NULL, phone_number varchar(16) COLLATE utf8_bin NOT NULL, country int(8) NOT NULL, province int(8) NOT NULL, pesel varchar(32) COLLATE utf8_bin NOT NULL,
register_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
authorised_time datetime NOT NULL, edit_time datetime NOT NULL, saldo decimal(9,2) NOT NULL, referer_id int(8) NOT NULL,
level int(8) NOT NULL, PRIMARY KEY ( id ), KEY country ( country ), KEY province ( province ), KEY referer_id ( referer_id ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=83 ;

Источник

У меня немного странная проблема. Я пытаюсь добавить внешний ключ в одну таблицу, которая ссылается на другую, но по какой-то причине он не работает. Из-за моего ограниченного знания MySQL, единственное, что может быть подозрительным, это то, что в другой таблице есть внешний ключ, ссылающийся на тот, на который я пытаюсь ссылаться.

Это код, который генерирует ошибку:

ОТВЕТЫ

Ответ 1

Здесь запрос, который может найти эти идентификаторы:

Ответ 2

Ответ 3

Ответ 4

Усечь таблицы, а затем попытаться добавить ограничение FK.

Я знаю, что это решение немного неудобно, но оно работает на 100%. Но я согласен, что это не идеальное решение для решения проблемы, но я надеюсь, что это поможет.

Ответ 5

Для меня эта проблема была немного другой и супер легко проверить и решить.

Вы должны убедиться, что ОБА из ваших таблиц InnoDB. Если одна из таблиц, а именно справочная таблица, является MyISAM, ограничение не будет выполнено.

Ответ 6

Это также происходит при установке внешнего ключа parent.id на child.column, если у child.column уже есть значение 0, а значение parent.id равно 0

Вам нужно убедиться, что каждый child.column имеет значение NULL или имеет значение, существующее в parent.id

И теперь, когда я прочитал выражение nos, написал, что он проверяет.

Ответ 7

У меня была такая же проблема сегодня. Я проверил четыре вещи, некоторые из которых уже упоминались здесь:

Есть ли какие-либо значения в вашем дочернем столбце, которых нет в родительском столбце (кроме NULL, если дочерний столбец имеет значение NULL)?

У дочерних и родительских столбцов одинаковый тип данных?

Есть ли индекс родительского столбца, на который вы ссылаетесь? MySQL, кажется, требует этого по соображениям производительности (http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html)

И этот решил для меня: есть ли в обеих таблицах одинаковые параметры сортировки?

У меня был один стол в UTF-8, а другой в iso-что-то. Это не сработало. После изменения iso-таблицы на сопоставление UTF-8 ограничения могут быть добавлены без проблем. В моем случае phpMyAdmin даже не отображал дочернюю таблицу в iso-кодировке в раскрывающемся списке для создания ограничения внешнего ключа.

Ответ 8

Кажется, что для строки 0 столбца есть недопустимое значение, которое не является допустимым внешним ключом, поэтому MySQL не может установить для него ограничение внешнего ключа.

Вы можете выполнить следующие действия:

Удалите столбец, для которого вы пытались установить ограничение FK.

Добавьте его еще раз и установите его значение по умолчанию как NULL.

Попробуйте снова установить для него ограничение внешнего ключа.

Ответ 9

У меня была та же проблема, я проверил строки своих таблиц и обнаружил некоторую несовместимость со значением полей, которые я хотел определить для внешнего ключа. Я исправил это значение, попробовал еще раз, и проблема была решена.

Ответ 10

В итоге я удалю все данные в своей таблице и снова заново сработаю. Оно работает. Не блестящий, но это экономит много времени, особенно ваше приложение все еще находится на стадии разработки без каких-либо данных клиента.

Ответ 11

Ответ 12

У меня была такая же проблема примерно три раза. В каждом случае это было потому, что одна (или более) моих записей не соответствовала новому внешнему ключу. Вы можете обновить существующие записи, чтобы следовать синтаксическим ограничениям внешнего ключа, прежде чем пытаться добавить сам ключ. В следующем примере обычно следует изолировать записи проблем:

повторите AND (candidate key) <> (next proposed foreign key value) в вашем запросе для каждого значения внешнего ключа.

Если у вас тонна записей, это может быть сложно, но если ваш стол достаточно мал, он не должен задерживаться слишком долго. Я не супер изумляю в синтаксисе SQL, но это всегда изолировало проблему для меня.

Ответ 13

Очистите данные ваших таблиц и запустите команду. Он будет работать.

Ответ 14

Я получал эту ошибку при использовании Laravel и eloquent, пытаясь сделать ссылку на внешний ключ, вызывая 1452. Проблема заключалась в отсутствии данных в связанной таблице.

Ответ 15

Вам просто нужно ответить на один вопрос:

Ваша таблица уже хранит данные? (Особенно в таблицу включен внешний ключ.)

Если ответ «да», то единственное, что вам нужно сделать, это удалить все записи, тогда вы можете добавить любой внешний ключ в вашу таблицу.

Инструкция удаления: от дочерней (которая включает в себя таблицу внешнего ключа) до родительской таблицы.

Причина, по которой вы не можете добавить внешний ключ после ввода данных, связана с несогласованностью таблицы. Как вы собираетесь работать с новым внешним ключом в прежней таблице, заполненной данными?

Если ответ «нет», следуйте другим инструкциям.

Ответ 16

Я готовил эти решения, и этот пример может помочь.

В моей базе данных есть две таблицы (электронная почта и кредитная карточка) с первичными ключами для их идентификаторов. Другая таблица (клиент) ссылается на эти идентификаторы таблиц как внешние ключи. У меня есть причина, чтобы электронная почта была отделена от данных клиента.

Сначала я вставляю данные строки для ссылочных таблиц (email, credit_card), затем вы получаете идентификатор для каждого, эти идентификаторы необходимы в третьей таблице (клиенте).

Если вы не вставляете сначала строки в ссылочные таблицы, MySQL не сможет сопоставлять, когда вы вставляете новую строку в третью таблицу, ссылающуюся на внешние ключи.

Если вы сначала вставляете ссылочные строки для ссылочных таблиц, тогда строка, которая ссылается на внешние ключи, не возникает ошибка.

Надеюсь, что это поможет.

Ответ 17

Убедитесь, что значение находится в другой таблице, в противном случае вы получите эту ошибку в соответствующем соответствующем столбце.

Поэтому, если назначенный столбец присваивается идентификатору строки другой таблицы, убедитесь, что в таблице есть строка, в противном случае появится эта ошибка.

Ответ 18

Вы можете попробовать этот пример

Примечание: если вы используете phpmyadmin, просто снимите флажок Включить проверку внешнего ключа

как пример cannot add or update a child row a foreign key constraint fails mysql что делать. Смотреть фото cannot add or update a child row a foreign key constraint fails mysql что делать. Смотреть картинку cannot add or update a child row a foreign key constraint fails mysql что делать. Картинка про cannot add or update a child row a foreign key constraint fails mysql что делать. Фото cannot add or update a child row a foreign key constraint fails mysql что делать

надеюсь, что это решение решить вашу проблему 🙂

Ответ 19

Ответ 20

У меня была та же проблема и найдено решение, поместив NULL вместо NOT NULL в столбец внешнего ключа. Вот запрос:

MySQL выполнил этот запрос!

Ответ 21

В моем случае я создал новую таблицу с той же структурой, создал отношения с другими таблицами, затем извлек данные в CSV из старой таблицы, в которой возникла проблема, затем импортировал CSV в новую таблицу и отключил проверку внешнего ключа. и отключил прерывание импорта, все мои данные были вставлены в новую таблицу, которая без проблем успешно, а затем удалил старую таблицу.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *