将新数据库导入旧数据库,如何保留旧数据库的值[PHPMyAdmin]

时间:2017-11-02 10:42:11

标签: mysql database phpmyadmin

对于一个基本问题道歉,但我真的尝试过自己的研究,但我甚至找不到这个问题的正确语法,所以我找不到解决方案。

我在在线系统中有一个包含许多表,列,行等的数据库。我已经离线对系统进行了大量更新,它已准备好在本周上线。但是,由于系统中的新功能,一些表已被更改,一些新表已添加等。

我的问题是:我可以使用大量更改的表更新我的数据库,但不能删除之前的信息吗?例如:假设我在旧系统中有一个名为Users的表,它跟踪用户名和密码。但是我已经更新了系统,现在用户表跟踪用户名,密码,姓名,年龄,出生日期,积分......等等,比以前更多的信息。

我想要发生的是,我更新表(和整个数据库)以便出现新的列和表等,但我不会丢失上一次迭代的信息。所以我不必为用户重新输入密码/用户名等。

当我搜索这个问题时,我得到的答案是说我可以手动输入新的表格/列,或者错误地认为我在询问值的连接,但这不是我的意图。

理想情况下,我希望新数据库INTO旧数据库的IMPORT。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

首先,我强烈建议您制作生产数据的备份副本并保持这种方便。在开发数据集成时,您将多次恢复以恢复“原始”状态。

将备份副本还原到本地MySQL Server实例上的不同数据库。在学习如何进行数据集成时,您将需要进行大量测试,其中一些将具有破坏性。

该过程将针对您的本地生产数据库副本运行一系列脚本更改,然后查看它是否按您希望的方式工作。如果没有,请删除并恢复生产数据库的本地副本,更正数据集成步骤中的任何错误,然后重试。这可能需要数天才能完成,并且需要多次执行。

所以你有两个任务:

  1. 升级生产数据库的表结构以匹配本地更改的数据库的表结构。您可以使用ALTER TABLE进行许多此类更改。

    这是一项复杂的任务,因为很难分析两个不同的表,并找出升级一个所需的最小ALTER TABLE语句集,就像另一个表一样。其中一个MySQL实用程序可以帮助解决这个问题:mysqldiff。您可以使用它来生成所需的ALTER TABLE语句。

  2. 将本地数据同步到生产数据库中。这很复杂,因为您有一些数据应该部分覆盖现有的生产数据。您应该了解如何使用REPLACEINSERT...ON DUPLICATE KEY UPDATE

    请参阅我对“INSERT IGNORE” vs “INSERT … ON DUPLICATE KEY UPDATE”的回答,以获得一些有用的解释。

    您还可以执行UPDATE语句以连接来自不同数据库的表。当您想要根据某些列中的公共值替换数据时,这将非常有用,但该列不是UNIQUE,因此您不能使用REPLACE。

  3. 这将是一个艰难,细致的过程。大多数专业软件开发项目都在努力解决。他们必须非常谨慎地编写对表的每个更改的脚本,并且他们使用“模式迁移”工具按顺序对任何数据库应用增量更改,因此可以将目标数据库升级到任何修订。

    但是在你开发完一堆之后试图找出所有这些增量变化就像试图解开蛋糕一样。

答案 1 :(得分:0)

由于您运行mysql服务器,您只需编写一个查询来导入数据。

CREATE TABLE [dbo].[oldTable](
    [Pass] [varchar](50) NULL,
    [Username] [varchar](50) NULL
) ON [PRIMARY]

Insert into oldTable (Pass,Username)
Select 'pass', 'user'

CREATE TABLE [dbo].[newTable](
    [Pass] [varchar](50) NULL,
    [Username] [varchar](50) NULL,
    [OtherColumn] [varchar](50) NULL
) ON [PRIMARY]

Insert into newTable (Pass,Username)
Select 'pass2', 'user2'