2013-03-13 1 views
0

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

mysql> create table customers (
-> customer_id int PRIMARY KEY, 
-> lastname varchar(30), 
-> firstname varchar(30), 
-> address varchar(100), 
-> phone_num char(12)); 

mysql> create table orders (
-> order_id int primary key, 
-> date_placed date, 
-> delivery_date date, 
-> total_cost float, 
-> paid boolean, 
-> customer_id int, 
-> foreign key (customer_id) references orders(customer_id)); 

Я создал клиент по имени Джозеф Смит, как это:

insert into customers values(1, 'Smith', 'Joseph', '1 Grey Street', '800-867-5309'); 

Я хочу, чтобы вставить заказ Джозефа Смита в таблице на «порядки», как это:

insert into orders values(1, '01-24-1990', '01-26-1990', true, 1); 

НО, я получаю следующее сообщение об ошибке:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`mr3bn/orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `orders` (`customer_id`)) 

Очень хотелось бы получить разъяснения относительно

  1. , почему это не работает и
  2. как на самом деле заставить его работать. Благодаря!

ответ

0

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

Изменить

foreign key (customer_id) references orders(customer_id)); 

в

foreign key (customer_id) references customers(customer_id)); 
            ^

На самом деле странно, как MySQL позволил вам сделать это. Шахта сбой с сообщением «Не удается создать таблицу„test.orders“(Errno: 150)»

Кроме того, в вашем втором вкладышем

  1. добавить значение для cost колонны, как сказал @Mortalus ;
  2. изменить формат даты на «ГГГГ-ММ-ДД».

Здесь работает SQLFiddle

0

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

« В ссылочной таблице« заказы »не указаны первичные или потенциальные ключи, которые соответствуют ссылке список столбцов во внешнем ключе 'FK_ заказы _custome__4A3B5A08' "

Как сказано в @peterm, измените свое ограничение.

Смежные вопросы