2016-11-11 12 views
0

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

insert into orders (userId, orderDate, shippingDate) 
values('xyz123', now(), now()); 

Ошибка я получаю "Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удается (" example_1010 . заказы ,CONSTRAINT orders_ibfk1 FOREIGN KEY ( USERID ) REFERENCES пользователи ( userid`))"

I Думаю, мне нужно использовать «in» для обхода ограничения, но я не думаю, что правильно его использую.

insert into orders (userId, orderDate, shippingDate) 
values('xyz123', now(), now()) 
in (select userId from users); 
+0

Как ошибка четко сказано, вы не можете вставить 'userId', которые не существуют в таблице users. – e4c5

+0

попытайтесь вставить тот же userId, который уже существует в таблице users. – siddaramesh

ответ

0

Просто отключить внешний ключ

SET FOREIGN_KEY_CHECKS=0; 

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

insert into orders (userId, orderDate, shippingDate) 
values('xyz123', now(), now()); 

после этого снова включить внешнего ключа

SET FOREIGN_KEY_CHECKS=1; 

Вы должны добавить, что user_id в вашей родительской таблицы (пользователей), как было предложено @drew

+1

поэтому вставлять утиль в основном? – Drew

+0

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

+2

Сначала исправить данные, в которых он принадлежит (родительский). Затем исправьте ребенка. В противном случае вы испортите свою ссылочную целостность и даже не получите ее. – Drew