将不存在的记录插入Mysql表

Posted

技术标签:

【中文标题】将不存在的记录插入Mysql表【英文标题】:Insert not existed records into Mysql table 【发布时间】:2018-03-22 11:08:54 【问题描述】:

您好,在我们的系统中,我们丢失了一个账户,我们需要找回它。幸运的是,我们有一个数据库备份。现在我正在尝试将备份 mysql 数据库中的记录添加到当前。但我有一个问题。当我尝试插入数据时,我收到错误“ID 重复”。这是我从备份导出表时得到的。

    INSERT INTO `anketu_perziuros_mine` (`id`, `anketa`, `kada`, `timemark`) VALUES
(955009, 498044, 1443021887, '2015-09-23 18:24:47'),
(147188, 498044, 1443018663, '2015-09-23 17:31:03'),
(948120, 498044, 1443017899, '2015-09-23 17:18:19'),
(958152, 498044, 1442954185, '2015-09-22 23:36:25'),
(888916, 498044, 1442863283, '2015-09-21 22:21:23'),
(782244, 498044, 1442839575, '2015-09-21 15:46:15'),
(827707, 498044, 1442746875, '2015-09-20 14:01:15'),
(869393, 498044, 1442683453, '2015-09-19 20:24:13');

我是 mysql 的新手。我尝试了很多方法(来自教程),但都失败了。 IF NOT EXISTS如何实现,或者有其他解决方案?

【问题讨论】:

在插入之前检查它是否存在如何? ***.com/questions/3164505/… 听起来你正在使用的备份与当前数据库不同步,因为有重复记录。 【参考方案1】:

这里有一个说明如何实现恢复丢失的数据。见Demo on SQL Fiddle。

-- suppose you have a table 
create table test (
  id int not null primary key,
  val int not null
);

-- with these data
insert into test values
(1,1),
(2,2),
(3,4),
(4,90);

-- lets assume you lost these data from the test table
delete from test where id in (1,4);

-- now you want to restore the lost data from your backup
-- do the following.

-- create a temporal table with schema of test table
create table test2 as 
select * from test limit 0;

-- insert backup data into the temporal table
insert into test2 values
(1,1),
(2,2),
(3,4),
(4,90);

-- copy backup data from temporal table into the real table
insert into test
select * from test2 b
where not exists (select null from test a where a.id=b.id);

-- drop backup data
drop table test2;

【讨论】:

以上是关于将不存在的记录插入Mysql表的主要内容,如果未能解决你的问题,请参考以下文章

插入表,如果表不存在,则创建表然后插入

net.ucanaccess.triggers.TriggerException:表不存在。 :Z_2015_02_24

如果表不存在,则插入其他表

Laravel 模型 - 如果数据库表不存在则返回 null

mysql插入数据时,判断是不是存在,存在则替代,不存在则直接插入,需要能够批量处理。

mysql 刚建的表格提示不存在,是啥原因?