【问题标题】:database copy with same structure having primary key issues具有相同结构的数据库副本具有主键问题
【发布时间】:2014-09-06 17:43:30
【问题描述】:

我有一个场景,

我有两个数据库 DB1DB2。两个数据库都有相同的结构

DB1 包含一个具有 AUTO INCREMENT PRIMARY KEY 1,2,3,4,5 的表“table1”,DB2 还包含一个具有主键 1,2,3,4,5 的“table1” .当我将 DB2 中的数据插入 DB1 时,DB2 中的数据将变为 6、7、8、9、10。但是我需要 1,2,3,4,5 用于来自 DB2 的数据和 6,7,8,9,10 作为 DB1 数据..

我可以使用这个查询吗?

mysqldump -n -t -u userB --password=*** db2 | mysql -u userA --password=*** db1

有可能吗?

【问题讨论】:

  • Db1 包含 1,2,3,4,5 并且您还想从 db2 插入 1,2,3,4,5
  • 是的。两个表都包含 1,2,3,4,5 作为主键值。这是我的问题。主键也是自动递增的。
  • 您希望如何存储在主键不允许重复值的 db1 中
  • 自增主键的值应该是一个无意义的数字。哪一组记录获得 1、2、3 和哪一组获得 6、7、8 无关紧要。
  • 如果我有两个容器,#1 装小麦,#2 装大米,并且想将小麦放入大米的#2 中,我可能会使用第三个容器.

标签: mysql sql


【解决方案1】:

在将数据从 DB2 插入 DB1 之前,首先截断 DB1 中的“table1” 因为它可能设置了“Auto increment id=6”

【讨论】:

  • 如果我截断表,我将从我的 DB1 中的所有数据。这是不允许的。我需要来自 DB1 和 DB2 的数据。但是 DB2 中主键值的顺序必须在 DB1 之前。
【解决方案2】:

您可以使用这两种情况之一

第一:

  • 将 db1.table1 数据复制到临时表中
  • 截断 db1.table1
  • 将数据从 db2.table 复制到 db1.table1
  • 将数据从临时表复制到 db1.table

第二:

  • 将 db1.table1 数据复制到 db2.table1
  • 截断 db1.table1
  • 将数据从 db2.table 复制到 db1.table1

使用可以使用这个mysql命令来复制数据:

插入 dbDestination.tblDestination (field1, field2, ...) 选择 ... 来自 dbSource.tblSource

【讨论】:

  • 如果涉及外键约束,这将不起作用。
  • 同意。我们可以使用 SET FOREIGN_KEY_CHECKS=0; 临时禁用外键约束;
  • @felix,不需要单独创建数据库,我们需要创建单独的临时表
  • @khanz 这个数据库有很多表...所以我要创建单独的dataabae... :)
【解决方案3】:
DECLARE @MaxId INT
SELECT @MaxId = MAX(Id) FROM Db1

SET IDENTITY_INSERT db1 ON
INSERT INTO Db1(Id, Column1, Column2, ...)
SELECT @MaxId+ ROW_NUMBER()OVER(ORDER BY Id),
    Column1,
    Column2,
    ...
FROM db2
SET IDENTITY_INSERT db1 OFF

试试这个..

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2013-03-24
    • 2016-04-02
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多