如何在MySQL中复制新数据但跳过两个表中的旧数据

如何在MySQL中复制新数据但跳过两个表中的旧数据,mysql,sql,Mysql,Sql,我对SQL非常陌生,就像今天一样,我有一个问题。我正在尝试将数据从一个表复制到另一个表中。我知道如何从互联网上做到这一点,但我的问题是,我需要跳过任何已经存在的数据。这是我的设想。我们有监控软件,每次遇到新用户时都会记录下来。我们有一个拥有数千名用户的旧数据库,我们将其用作数据库,但由于服务器中断,我们不得不在短时间内切换到另一个数据库。这意味着我们在新数据库上有一些用户,但大多数用户在旧数据库上。也有重复,因为当软件遇到不在新数据库中的“新用户”时,所有登录旧数据库的用户都必须重新登录新数据库

我对SQL非常陌生,就像今天一样,我有一个问题。我正在尝试将数据从一个表复制到另一个表中。我知道如何从互联网上做到这一点,但我的问题是,我需要跳过任何已经存在的数据。这是我的设想。我们有监控软件,每次遇到新用户时都会记录下来。我们有一个拥有数千名用户的旧数据库,我们将其用作数据库,但由于服务器中断,我们不得不在短时间内切换到另一个数据库。这意味着我们在新数据库上有一些用户,但大多数用户在旧数据库上。也有重复,因为当软件遇到不在新数据库中的“新用户”时,所有登录旧数据库的用户都必须重新登录新数据库

我要做的是将新数据库中的所有新用户复制到旧数据库中,但跳过旧数据库中已有的任何用户

如何做到这一点?很抱歉,这一段很长很混乱。请记住,我对SQL非常陌生,不知道Shuck。提前谢谢

编辑:更多信息: 这是我的桌子是怎么摆的。我有两个数据库“bat”和“bat2”。蝙蝠2是新的,蝙蝠是旧的

+---------------+
| Tables_in_bat |
+---------------+
| BAT_ban       |
| BAT_kick      |
| BAT_mute      |
| BAT_players   |
| BAT_web       |
| bat_ban       |
| bat_comments  |
| bat_kick      |
| bat_mute      |
| bat_players   |
| bat_web       |
+---------------+

+----------------+
| Tables_in_bat2 |
+----------------+
| BAT_ban        |
| BAT_kick       |
| BAT_mute       |
| BAT_players    |
| bat2_comments  |
+----------------+
我需要将新的BAT_玩家合并到旧的BAT_玩家中。小写表格是另一个故事,所以忽略这些

BAT_players表的结构如下所示:

+------------------+----------------------------------+-----------------+---------------------+---------------------+
| BAT_player       | UUID                             | lastip          | firstlogin          | lastlogin           |
+------------------+----------------------------------+-----------------+---------------------+---------------------+
| 00meow9          | 21826e64a2974911a0fe542bf11e3901 | 73.163.22.154   | 2021-05-06 10:49:49 | 2021-05-06 10:49:49 |
| 0800Nummer       | bb7bd784c7804834b2df56a6c76d53da | 85.250.79.8     | 2021-05-04 13:43:28 | 2021-05-08 08:04:33 |
| 1angelfish       | 6c7ebb3197d04d71a7976bd830abe452 | 68.131.116.38   | 2021-05-03 20:46:36 | 2021-05-07 17:32:15 |
UUID将在2个文件中保持一致

我要做的是将新数据库中的所有新用户复制到旧数据库中,但跳过旧数据库中已有的任何用户

您需要一个或多个列来指定用户是什么。如果您有用户id,一种方法是:

MySQL具有方便的构造,如果您对用户id或定义用户的任何列具有唯一索引或约束:

insert into old ( . . . )
    select . . .
    from new n
    on duplicate key update set user_id = values(user_id);

最新版本有弃用的值,您可能会收到警告。

两个数据库中都有一个唯一的ID,应该相同,因此我可以使用它。如果我有任何问题,我会通知您。对于行:where not exists从旧o中选择1,其中o.user\u id=n.user\u id;,如何为每个表指定用户id?具体来说,“o.user\u id”和“n.user\u id”部分是我尝试过的“database1.user\u data.entity”和“database2.user\u data.entity”,但它只给出了一个错误。我做错了吗?”“实体”是具有唯一ID的列。请显示您的表结构以及查询中的数据。类似于插入x Select*from y,其中y.id不在Select id from x中可能是有利的。我还没有在查询中找到任何地方,但我将添加我的结构。
insert into old ( . . . )
    select . . .
    from new n
    on duplicate key update set user_id = values(user_id);