我可以在mysql上导入一个退出表并覆盖一些现有数据吗?

时间:2016-01-10 21:24:08

标签: mysql sql database

我的主机名为文章中有一个mysql表,我想从localhost导入article.sql以保存我在localhost上创建的更改,如何导入该表而不删除它?有一些表连接到文章表,这就是为什么我尽可能避免删除它。

1 个答案:

答案 0 :(得分:0)

请考虑以下步骤:

  1. 打开localhost导出的article.sql文件(简单文本文件)。
  2. 更改CREATE TABLE SQL语句以引用其他目标表,例如 article_temp ,以便不与live,production数据库表,文章冲突。< / LI>
  3. 同样,更改任何INSERT INTOUPDATE和任何其他查询以引用不同的目标表。
  4. 在实时服务器上运行.sql文件。 MySQL允许source命令。请务必在此过程中备份原始表格。
  5. 使用LEFT JOIN NULLNOT INNOT EXISTS条款运行以下三个附加查询中的任何一个(database industry中经常有争议的问题,效率更高) 。关键是找到比较/匹配值(即文章名称)。下面的任何一个都应该工作,不需要运行所有这些(但当然每个都检查重复!)
  6. SQL附加查询

    INSERT INTO article (col1, col2, col3, col4, col5)
    SELECT col1, col2, col3, col4, col5 
    FROM article_temp
    LEFT JOIN article.value = article_temp.value
    WHERE article.value IS NULL;
    
    INSERT INTO article (col1, col2, col3, col4, col5)
    SELECT col1, col2, col3, col4, col5 
    FROM article_temp    
    WHERE article_temp.value NOT IN
             (SELECT value FROM article);
    
    INSERT INTO article (col1, col2, col3, col4, col5)
    SELECT col1, col2, col3, col4, col5 
    FROM article_temp    
    WHERE NOT EXISTS
             (SELECT value FROM article
              WHERE article.value = article_temp.value);
    

    当然,一旦完成了登台和迁移,请删除临时表:

    DROP TABLE article_temp;