0

我为客户和订单创建了如下表格:

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));

我创建了一个名为 Joseph Smith 的客户,如下所示:

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

我想将 Joseph Smith 的订单插入到“订单”表中,如下所示:

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. 如何真正让它发挥作用。谢谢!
4

2 回答 2

0

您的约束不合适,基本上您的服务器不应该允许您这样做。我正在使用 SQL Server,我尝试了您的代码,但由于约束不当,它没有工作,它给了我以下错误

“引用表‘ orders ’中没有与外键‘FK_orders_custome__4A3B5A08’中的引用列列表匹配的主键或候选键”

正如@peterm 所说,改变你的约束。

于 2013-03-13T06:12:41.510 回答
0

您的主要问题是您正在创建循环引用 from orderstoorders而不是创建引用 from ordersto 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. 将日期格式更改为“YYYY-MM-DD”。

这是工作SQLFiddle

于 2013-03-13T04:48:33.560 回答