Нарушение ограничения целостности: 1452 не удается добавить или обновить дочернюю строку: сбой ограничения внешнего ключа

#mysql #database #yii #orm #frameworks

#mysql #База данных #yii #orm #фреймворки

Вопрос:

Я использую фреймворк Yii и при попытке вставки в таблицу получаю следующую ошибку Yii с базой данных — я вижу, что пользователь с идентификатором пользователя ‘5702157058’ существует в моей таблице ‘myuser’, поэтому не уверен, почему я получаю эту ошибку?

 <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation:       
1452 Cannot add or update a child row: a foreign key constraint fails (`mydb`.`organisation_news_read`, 
CONSTRAINT `FK_organisation_news_read_myuser` FOREIGN KEY (`user_id`) REFERENCES `myuser_`
(`user_id`) ON DELETE CASCADE ON UPDATE NO ACTION). The SQL statement executed was: 
INSERT INTO `organisation_news_read` (`news_id`, `user_id`) VALUES (:yp0, :yp1). 
Bound with :yp0=287, :yp1='5702157058'
  

Ответ №1:

Пожалуйста, проверьте следующие пункты,

 1. First check your foreign key field name and its spelling are same.
2. then check your model relation function
3. check your table field are same
4. check the DB engine is it INNODB?
  

в основном при настройке внешнего ключа возникают какие-либо проблемы.

Ответ №2:

Проверьте связь между ‘users’ и ‘organization_news_read’, конечно, это проблема. Попробуйте это, чтобы проверить, существует ли.

 SELECT * FROM users WHERE id = 5702157058;
  

Это должно найти строку.

Я думаю, что ваши таблицы похожи на эти. (кстати, этот пример находится в postgres)

 CREATE TABLE users
(
  id serial NOT NULL,
  name character varying(50),
  last_name character varying(50),
  CONSTRAINT pk_users PRIMARY KEY (id)
)



CREATE TABLE organisation_news_read
(
  id serial NOT NULL,
  users_id integer,
  CONSTRAINT pk_organisation PRIMARY KEY (id),
  CONSTRAINT fk_organisation_vs_users FOREIGN KEY (users_id)
      REFERENCES users (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
  

надеюсь, это поможет