将INSERT语句自动转换为UPDATE的简单方法?

Tom*_*Tom 4 mysql mysqldump

我想使用mysqldump的输出来更新实时数据库中的条目.我不想先删除条目,简单的更新语句都没问题.有没有一种简单的方法将包含INSERT语句的mysqldump的输出转换为相应的UPDATE语句?

它似乎是一个基本功能,所以我确信有人创建了一个工具或想出了一种方法来快速完成它,所以人们不必一直为每个人编写自己的脚本来重新发明轮子.

编辑:我正在寻找一个通用的解决方案,而不是我必须手动枚举实际的表列.这是一个普遍的问题,所以我认为应该有一个独立于表的解决方案.

Bil*_*win 8

您可以将mysqldump数据还原到新的临时数据库,然后使用多表UPDATE语法进行更新.

UPDATE mydb.mytable AS dest JOIN tempdb.mytable AS origin USING (prim_key)
SET dest.col1 = origin.col1,
    dest.col2 = origin.col2,
    ...
Run Code Online (Sandbox Code Playgroud)

然后删除临时数据库.


Mch*_*chl 5

这是添加ON DUPLICATE KEY UPDATE子句的问题

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

  • 是的,但是可以自动完成吗?mysqldump可以输出这样的格式吗?关键不是为此创建我自己的脚本,因为这是一个普遍的问题,并非特定于我的数据库。 (2认同)

sym*_*ean 5

Mchl 的回答是有效的另一个简单的解决方法是将“插入”更改为“替换”。两者都需要一个简单的搜索/替换操作(我会使用sed)。但是,如果这是定期运行,那么它将是复制/使用时间戳创建包含修改后/新记录的加载程序文件的良好候选者。

mysldump 也有一个--replace选项,所以可以省略 sed 步骤。