【问题标题】:How to copy rows from one MySQL database to another如何将行从一个 MySQL 数据库复制到另一个
【发布时间】:2014-01-06 11:44:38
【问题描述】:

我在不同的数据库(WAMP 服务器)中有两个具有相同结构的表。我想将第二个数据库 (oldkt) 中不存在的所有行从第一个数据库 (newkt) 复制到第二个数据库 (oldkt)。

newkt   -> table : users (1500 records) (id, name, password)
oldkt   -> table : users (1200 records) (id, name, password)

我想实际将行添加到 oldkt 数据库中,其 ID 在 oldkt 中尚不存在。

另外,如果我有超过 3 列,是否可以自动添加这些列,或者我必须标记所有列?

【问题讨论】:

  • 使用普通 SQL,但在表名前加上数据库名 + 点,如这里 stackoverflow.com/questions/2132654/…
  • 到目前为止您尝试过什么?如果你显示你的 sql 语句,它会更容易指导你。
  • 到目前为止什么都没有,我怕我会把桌子弄乱了..!!!
  • 您实际使用的是哪个 DBMS? MySQL 还是 SQL Server?
  • 在您对 ANYTHING 进行任何操作之前。曾经 。做一个备份。

标签: mysql sql


【解决方案1】:

您可以执行以下操作:

    insert into database1.table  select * from database2.table where id not in(select id from database1.table);

【讨论】:

    【解决方案2】:

    如前所述,您应该能够执行典型的插入,但通过在查询中指定数据库名称:

    SELECT * 
    INTO TargetDatabase.dbo.TargetTable
    FROM SourceDatabase.dbo.SourceTable 
    

    【讨论】:

    • 非常感谢您的快速回复
    • 我得到一个错误 Undeclared variable: oldkt_ which is the name of the first database
    【解决方案3】:

    试试这个查询

    INSERT Table2
    SELECT * FROM Table1
    WHERE [Conditions]
    

    【讨论】:

      【解决方案4】:
      INSERT INTO oldkt   
      SELECT id , name ,password FROM newkt WHERE id NOT IN (SELECT id FROM oldkt ) 
      

      Check Here

      【讨论】:

        【解决方案5】:

        试试下面的代码:

        INSERT INTO TargetDatabase.dbo.TargetTable
        SELECT * FROM SourceDatabase.dbo.SourceTable 
        EXCEPT 
        SELECT * FROM TargetDatabase.dbo.TargetTable
        

        【讨论】:

        • 所以我尝试了以下 INSERT INTO oldkt_.dbo.jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users EXCEPT * FROM oldkt_.dbo.jos_users 但我收到错误 #1064 - You have an error in你的 SQL 语法;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.jos_users SELECT * FROM kenaktoolsdata.dbo.jos_users EXCEPT SELECT * FROM oldkt”附近使用正确的语法
        • 上面的代码是为 SQL Server 给出的,在这种情况下,对于我的 SQL,请使用下面的代码和左外连接 'INSERT TargetDatabase.dbo.TargetTable SELECT a.* FROM SourceDatabase.dbo.SourceTable a LEFT JOIN TargetDatabase.dbo.TargetTable b ON a.col1=b.col1 and ..... WHERE b.col1 IS NULL or b.col2 is null .....'
        【解决方案6】:

        免责声明:最初,OP 将问题标记为 。我为两者都提供了答案,因为它是一个比纯 MySQL 更通用的解决方案。 使用 MySQL 时,请务必将查询中的 .. 替换为 .

        SELECT … INTO table does not work in MySQL(尽管it works in SQL Server)所以INSERT … SELECT 会帮助你。它适用于MySQLSQL Server

        您可以在 SQL Server 中使用.(点)分隔符in MySQL..(双点)分隔符指定表名,包括数据库名称。 (另见a related question。)

        EXCEPT does not work in MySQL 所以我们将使用LEFT JOINWHERE。 (另见a related question。)

        对于 SQL Server:

        INSERT INTO oldkt..users
        SELECT newkt..users.*
        FROM
            newkt..users
            LEFT JOIN oldkt..users USING(id)
        WHERE
            oldkt..users.id IS NULL
        

        在 MySQL 中使用时,只需将 .. 替换为 .

        我的解决方案是在 id 是两个表中的唯一键的假设下工作的。 (主键始终是唯一的。)如果不满足,则必须根据该事实调整连接条件。

        【讨论】:

        • 非常感谢您的回答,但我收到此错误 #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“.jos_users SELECT kenaktoolsdata..jos_users.* FROM kenaktoolsdata..jos_us”附近使用正确的语法 INSERT INTO oldkt_..jos_users SELECT kenaktoolsdata..jos_users.* FROM kenaktoolsdata..jos_users LEFT JOIN oldkt_..jos_users USING(id) WHERE oldkt_..users.id 为空
        • @KoZe 您使用了我为 MySQL 中的 MS SQL Server 编写的查询。正如我所写,将所有.. 替换为.,它会为您工作。另请参阅问题下方的 cmets,尤其是要求您指定使用 MySQL 还是 SQL Server 的 cmets。我为两者都提供了答案。
        • 我做了并且有同样的错误......无论如何这工作插入到 database1.table select * from database2.table where id not in(select id from database1.table);可能;成功了吗?它的mysql
        • @Koze 如果您将所有.. 替换为.,您将不会得到相同的错误,因为原始错误消息包含..。如果您通过mysql 命令运行查询,则始终需要在末尾添加;,否则不会执行。我编辑了您的问题以反映您在问 MySQL 问题。
        猜你喜欢
        • 2011-04-25
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-02
        相关资源
        最近更新 更多