MySQL插入数据因外键约束失败?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL插入数据因外键约束失败?相关的知识,希望对你有一定的参考价值。

进行的步骤是这样的,有几个文件:
1.PD生成的数据库文件 tables.sql,里面是表结构和一些参数
2.项目里的dectionary.sql;
3.还有一个是全是INSERT语句的数据备份文件,insert.sql;
我先用navicat建了一个库,名字和原来的一样。然后执行了tables.sql和dictionary.sql。但之后插入语句频繁报错,而且插入失败,提示:不能插入child table a foreign key ...,好像是说父表里没有对应的数据,从表里就不能插入
那怎么解决这个问题呢?

先在父表中将对应的记录插进去,再插子表,因为子表中外键约束的一列数据必须在父表中存在。像学生表和学生成绩表,在学生成绩表中要插入一条记录,如果此记录中学号字段的值在学生表中找不到,即不存在这个学生,自然学生成绩表中就插不进去。 参考技术A 插入签要保证emp表中要插入记录的dept外键值在dept表中存在,然后直接写插入语句就可以
insert
into
emp(id,
name,
dept)
values
(
'id',
'name',
'dept')

在 My SQL 中不断收到外键约束失败消息

【中文标题】在 My SQL 中不断收到外键约束失败消息【英文标题】:Keep getting foreign key constraint failed message in My SQL 【发布时间】:2018-05-19 13:42:34 【问题描述】:

我尝试将数据插入表 Bookratings,但我不断收到此错误消息。这是因为当我尝试插入时,它会在 Bookratings 表中创建重复项,这是 PRIMARY 键约束所不允许的?

MySQL 错误 1452 - 无法添加或更新子行:外键约束失败

我的实际代码:

如果存在 amazon2 则删除数据库;

如果amazon2不存在则创建数据库;

使用亚马逊2;

create table books(  
  ISBN varchar(13),
  Title varchar(255),
  Author varchar(255),
  Year int(10),
  Puplisher varchar(255),
  ImageURL varchar(255),
  Genre varchar(12),
  unitprice decimal(6,2),
  primary key (ISBN)
); 


  create table users(
    UserID int(11),
    Country varchar(250),
    Age int(11),
    primary key (UserID)
  );


  create table bookratings(
    UserID int(11) not null,
    ISBN varchar(13) not null,
    Rating int(11),
    primary key (UserID, ISBN),
    foreign key (ISBN) references books (ISBN) on delete cascade on update cascade,
    foreign key (UserID) references users (UserID) on delete cascade on update cascade
   );


   create table orders(
     OrderID int(11),
     UserID int(11) not null,
     Year int(10),
     totalpay decimal(6,2),
     primary key (OrderID),
     foreign key (UserID) references users (UserID)
   );


   create table trans(
     OrderID int(11) not null,
     ISBN varchar(13) not null,
     Quantity int(11),
     primary key (OrderID, ISBN),
     foreign key (OrderID) references orders (OrderID),
     foreign key (ISBN) references books (ISBN)
   );

我必须澄清一点:任务给定,我不允许添加任何其他属性或删除现有属性。

【问题讨论】:

不要链接到您的代码异地。把人们需要的一切都放在问题中以了解您的问题。 我很确定您的Users 主键必须是not null。另外,我建议您也为您的books 表使用ID (int) 主键;您的 ISBN 可能会更改!理想情况下,主键应该是auto increment 请发布实际代码本身,而不是它的图像。很难用图像进行测试:) 我已经发布了! 现在请去掉多余的图像。 【参考方案1】:

外键约束违规意味着您尝试更新的表包含对其他表的引用,并且您以某种方式破坏了该引用。

如果我有一张桌子电影

+----------+---------------+
| Movie_ID |  Movie_Name   |
+----------+---------------+
|        1 | Jaws          |
|        2 | Star-Wars     |
|        3 | Jurassic Park |
+----------+---------------+

还有一个表 User_Reviews

+---------+----------+-------+
| User_ID | Movie_ID | Score |
+---------+----------+-------+
|       1 |        1 | 2.5   |
|       2 |        1 | 5     |
|       3 |        2 | 4     |
|       4 |        2 | 3     |
|       5 |        2 | 4.5   |
|       6 |        3 | 5     |
+---------+----------+-------+

在 User_Reviews 表中,Movie_ID 是一个外键。

我无法对 Movie_ID = 10 进行评论,因为电影表中不存在该电影。如果我确实尝试这样做,我会收到外键约束错误。

【讨论】:

以上是关于MySQL插入数据因外键约束失败?的主要内容,如果未能解决你的问题,请参考以下文章

无法将值插入表中,外键约束不断失败

在 My SQL 中不断收到外键约束失败消息

MySql 重启后:#1452 - 无法添加或更新子行:外键约束失败

EasyClick 之 MySQL 外键SQL语句的编写

EasyClick 之 MySQL 外键SQL语句的编写

mysql中添加外键问题,求高手