首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL Insert...Select:跳过带有外键约束错误的记录

问MySQL Insert...Select:跳过带有外键约束错误的记录
EN

Stack Overflow用户
提问于 2016-09-11 02:33:23
回答 2查看 1.8K关注 0票数 1

我试图将数据从tbllicenseissued复制到licenses MySQL表:

代码语言:javascript
复制
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT  UserID, TypeID, IssueDate, ExpirationDate FROM `tbllicenseissued`

licenses有一个阻止传输的外键约束:licenses.UserID是user表中的主键

错误代码: 1452 无法添加或更新子行:外键约束失败(test.licenses、约束UserID外键(UserID)引用main.user (id)在更新级联上的删除级联)

如果删除了这个键约束,操作就会成功,因此我猜测我要复制的数据包含在user表中找不到的If。

我想复制满足约束的记录,同时忽略可能导致错误的记录。我试着用INSERT IGNORE代替INSERT IGNORE,但没有结果。

增编

到目前为止,我已经尝试了答案中提出的所有查询,并在上面重新尝试了我自己的INSERT IGNORE。它们都给出了相同的错误消息(上面更新了包含完整错误的错误)。

我还确认,如果删除外键约束并尝试查询(对原始表的副本),则查询将成功运行。

以证实我的怀疑,即问题在于UserID在tbllicenseissued中丢失了user。

代码语言:javascript
复制
SELECT  UserID FROM `tbllicenseissued` a
WHERE a.UserID  NOT IN (SELECT id FROM `user`);

发现了26条记录。表格结构如下:

代码语言:javascript
复制
DESCRIBE licenses

​

​

代码语言:javascript
复制
DESCRIBE tbllicenseissued

​

​

代码语言:javascript
复制
DESCRIBE user

​

​

我刚刚检查并确认这三个表都是InnoDB

EN

回答 2

Stack Overflow用户

发布于 2016-09-11 02:41:32

我假设您不希望插入不匹配的行。如果是这样,您有两个解决方案。其中一个在查询中进行检查:

代码语言:javascript
复制
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
    SELECT  UserID, TypeID, IssueDate, ExpirationDate
    FROM tbllicenseissued
    WHERE UserId NOT IN (SELECT UserID FROM Users WHERE UserId IS NOT NULL);

我希望INSERT IGNORE也能解决这个问题:

代码语言:javascript
复制
INSERT IGNORE INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
    SELECT  UserID, TypeID, IssueDate, ExpirationDate
    FROM tbllicenseissued;

然而,你的问题说这对你不起作用。

票数 1
EN

Stack Overflow用户

发布于 2016-09-11 02:39:29

可以这样使用,要跳过用户id约束中断的数据,请使用id to user表:

代码语言:javascript
复制
INSERT INTO `licenses` (UserID, TypeID, IssueDate, ExpirationDate)
SELECT  UserID, TypeID, IssueDate, ExpirationDate FROM `tbllicenseissued` a
INNER JOIN User u ON a.UserID = u.UserID
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39432328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档