Ошибка вставки: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено - PullRequest
0 голосов
/ 28 марта 2012

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

Этот запрос вставки вставляет его в языковую таблицу: (может быть добавлено более одной строки, так как форма имеет кнопку динамического щелчка мышью)

if(empty($_SESSION['user_id'])) { // user not logged in; redirect to somewhere else }

$sql_insert = "INSERT into `language`
 (`native`,`other`,`other_list`,`other_read`, `other_spokint`
 ,`other_spokprod`,`other_writ`  )
VALUES
 ('$native','$other','$other_list','$other_read','$other_spokint','$other_spokprod',
 '$other_writ') ";

mysql_query($sql_insert,$link) or die("Insertion Failed:" . mysql_error());     
}

Это полная ошибка:

Insertion Failed:Cannot add or update a child row: a foreign key constraint fails
(`members`.`language`, CONSTRAINT `language_ibfk_1` FOREIGN KEY (`id`) 
REFERENCES `users` (`id`))

Любая помощь будет оценена!

Структура таблицы для языка таблиц:

CREATE TABLE IF NOT EXISTS `language` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `native` varchar(30) NOT NULL,
 `other` varchar(30) NOT NULL,
 `other_list` varchar(9) NOT NULL,
 `other_read` varchar(9) NOT NULL,
 `other_spokint` varchar(9) NOT NULL,
 `other_spokprod` varchar(9) NOT NULL,
 `other_writ` varchar(9) NOT NULL,
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


RELATIONS FOR TABLE `language`:
`id`
`users` -> `id`

1 Ответ

0 голосов
/ 28 марта 2012

Вы должны использовать такую ​​структуру:

create table users (
    id int not null auto_increment,
    <additional fields>,

    primary key (id)
) ENGINE=InnoDB;


create table language(
    id int not null auto_increment,
    user_id int not null,
    <additional fields>,

    primary key (id),
    foreign key (user_id) references users(id) on delete restrict on update cascade
) ENGINE=InnoDB;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...