我在使用mySQL中的外键时插入值时遇到问题

时间:2013-03-13 04:41:55

标签: sql foreign-keys mysql-error-1452

我已为客户和订单创建了表格,如下所示:

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

我想将约瑟夫史密斯的订单插入'命令'像这样的表:

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

2 个答案:

答案 0 :(得分:0)

您的主要问题是,您正在创建从ordersorders的循环引用,而不是创建从orderscustomers的引用。

更改

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

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

实际上,mysql允许你这样做很奇怪。我的失败是消息'无法创建表'test.orders'(错误号:150)'

除了第二次插入

之外
  1. cost列添加值,如@Mortalus所述;
  2. 将日期格式更改为“YYYY-MM-DD”。
  3. 此处有效SQLFiddle

答案 1 :(得分:0)

您的约束不正确,基本上您的服务器应该不允许您这样做。我正在研究SQL Server,我尝试了你的代码,但它没有用,因为它给了我错误的约束

” 引用表'orders'中没有主键或候选键与外键'FK_ 命令中的引用列列表匹配 _custome__4A3B5A08'“

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