【问题标题】:I'm having trouble inserting values with using a foreign key in mySQL在 mySQL 中使用外键插入值时遇到问题
【发布时间】:2013-02-28 21:51:26
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    改变

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

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

    实际上 mysql 允许你这样做很奇怪。我的失败并显示消息“无法创建表 'test.orders' (errno: 150)”

    除此之外,在您的第二次插入中

    1. 如@Mortalus 所说,为cost 列添加一个值;
    2. 将日期格式更改为“YYYY-MM-DD”。

    这里正在工作SQLFiddle

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-08-05
        • 1970-01-01
        • 2018-08-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-04
        • 1970-01-01
        • 2020-12-09
        • 2019-09-12
        相关资源
        最近更新 更多