【问题标题】:mysql - Foreign Key Constraint Failsmysql - 外键约束失败
【发布时间】:2019-02-12 06:07:00
【问题描述】:

您好,我知道有人问过这个问题,但我没有找到正确的答案,当我尝试进行第二次插入时怎么会:

INSERT INTO phone_numbers (phone_number) VALUES ('226');

我得到错误:

错误 1452 (23000): 无法添加或更新子行:外键约束失败 (week7.phone_numbers, CONSTRAINT phone_numbers_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id ))

DDL 代码如下:

create table users (
  id int unsigned not null auto_increment,
  name varchar(100) not null,
  primary key(id)
);

INSERT INTO users (name) VALUES ('alex');


create table phone_numbers (
  id int unsigned not null auto_increment,
  user_id int unsigned not null,
  phone_number varchar(25) not null,
  primary key(id),
  foreign key (user_id) references users (id)

);

 INSERT INTO phone_numbers (phone_number) VALUES ('226');

【问题讨论】:

  • 您必须在插入中提供现有的 user_id。您似乎误解了外键的工作原理 - 它们是约束,不会为您生成 user_id。 FK 只是检查引用表中是否存在。

标签: mysql sql ddl


【解决方案1】:

因为在您的 user_id 字段中没有默认值,这就是它抛出错误的原因,如下所示,您的插入将起作用

INSERT INTO phone_numbers (user_id,phone_number) VALUES (1,'226');

【讨论】:

  • user_id 字段是否应该自动生成,因为它是外键?
  • @Derek user_id 将如何自动生成?
  • 它不会,我在插入时必须使用 php 代码引用外键值
猜你喜欢
  • 1970-01-01
  • 2019-04-03
  • 2012-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
相关资源
最近更新 更多