V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
ranzige
V2EX  ›  MySQL

现有数据库数据丢失,求插入备份数据库中数据方法 !

  •  
  •   ranzige · 2016-04-09 15:08:04 +08:00 · 2778 次点击
    这是一个创建于 3150 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个 mysql 数据库 A , 4 月 2 号左右被管理员误删除了一些老数据。这个数据库有一个备份已经恢复成数据库 B ,但是 B 中数据只截至 3 月 27 日的。也就是说, A 中丢失的大部分数据在 B 中可以找到。
    我现在需要把现在数据库中误删除的数据从 3 月 27 日的库中恢复出来(包括标识自增字段还维持旧库的)。我想到的语句是这样:
    insert into a.table
    select * from a.table
    where not exists(select * from b.table where b.table.id=a.table.id)

    那么问题来了:怎样把 B 中的原标识列 ID 也插入?这样写对不对?还是有更好的方法 ?
    6 条回复    2016-04-10 13:53:18 +08:00
    qianmeng
        1
    qianmeng  
       2016-04-10 07:09:40 +08:00 via Android
    分割一下。

    对单表来说,建立一个新表,先导入删除日期之前的,再导入删除日期之后的,标识应该不会乱
    ranzige
        2
    ranzige  
    OP
       2016-04-10 08:10:13 +08:00 via iPhone
    @qianmeng 问题是之前的标识也不是连续的。比如备份中的标识是 1 2 4 6 这样。而现在库中是 1 6 ,少了 2 和 4 。因为各表间 id 有关联,所以 id 列必须正确。
    ms sql 中可以通过启用标识列插入的方式修改 id 。 mysql 中不能吗?
    qianmeng
        3
    qianmeng  
       2016-04-10 08:40:43 +08:00 via Android
    @ranzige 你可能还没试过,只要不重复,只要后面的比前面的大,标识是可以原样复制过去的
    ranzige
        4
    ranzige  
    OP
       2016-04-10 08:47:37 +08:00
    @qianmeng 哦哦,就是说,之前删除的 2 和 4 ,那么再插入时, 2 和 4 的值会自己过去,是吧?
    vidon
        5
    vidon  
       2016-04-10 13:11:28 +08:00 via Android
    把 B 改成 A ?
    qianmeng
        6
    qianmeng  
       2016-04-10 13:53:18 +08:00 via Android
    @ranzige 我自己导入是这样的,不放心的话可以先测试测试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.