我已为客户和订单创建了表格,如下所示:
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`))
希望对
有所澄清答案 0 :(得分:0)
您的主要问题是,您正在创建从orders
到orders
的循环引用,而不是创建从orders
到customers
的引用。
更改
foreign key (customer_id) references orders(customer_id));
到
foreign key (customer_id) references customers(customer_id));
^
实际上,mysql允许你这样做很奇怪。我的失败是消息'无法创建表'test.orders'(错误号:150)'
除了第二次插入
之外cost
列添加值,如@Mortalus所述; 此处有效SQLFiddle
答案 1 :(得分:0)
您的约束不正确,基本上您的服务器应该不允许您这样做。我正在研究SQL Server,我尝试了你的代码,但它没有用,因为它给了我错误的约束
” 引用表'orders'中没有主键或候选键与外键'FK_ 命令中的引用列列表匹配 _custome__4A3B5A08'“
正如@peterm所说,改变你的约束。