2010-09-11 245 views
8

我有两个INSERT命令,这些命令对我来说是无用的,因为两组行(已在表中的那两行)以及我作为INSERT命令使用的那两行不是不相交的。这两个命令都会插入大量的行和大量的值。将INSERT命令转换为UPDATE

因此,如果我想执行这些行,我会得到重复的输入错误。

有没有简单的方法可以将这些命令转换成UPDATE

我知道这听起来很愚蠢,因为我为什么要制作INSERT命令,如果我想要UPDATE。这只是为了一个明确的方案:另一家开发商给我的脚本:)

由于提前, 丹尼尔

编辑 - 问题解决了

首先,我创建了一个表,装满起来我INSERT命令,然后我用下面的命令REPLACE

REPLACE 
    INTO table_1 
SELECT * 
    FROM table_2; 

这可以在最初发现:How can I merge two MySQL tables?

+2

哪些SQL?一些变体(例如MSSQL)支持MERGE语句,这肯定会成为你的街道。请更新您的标签。 – spender 2010-09-11 21:26:31

+0

谢谢您的通知。我们正在谈论MySQL查询。 – 2010-09-11 21:33:12

回答

13

MySQL的REPLACE关键字执行此操作。只需将查询中的INSERT关键字替换为REPLACE这个词,它应该更新行而不是插入新行。请注意,只有插入主键或唯一键列时才能使用。

+1

谢谢!我会做一个编辑,详细解释我的解决方案。 – 2010-09-11 21:44:15

+1

这可能会导致问题。使用replace将删除具有重复键的行并写入整个新行。这可能会搞乱你的索引并增加开销。使用'on duplicate ... update'会更合适,它将保留您的索引。 Replace可以更好地用于您重新建立索引的一次性场景,而不是重复查询来更新表。 – 2017-08-19 23:11:33

0

你必须重写它们才能手动更新。如果我遇到这样的问题,我首先查询某个主键的计数,如果没有找到,我插入一个通用数据集并在之后进行更新。由此,可以添加新数据,并且现有数据将被更新,并且您不必区分插入新数据和更新数据。

0

您可以轻松修改您的查询以更新重复行,请参阅INSERT ... ON DUPLICATE KEY MySQL中的语法

+0

我在考虑ON DUPLICATE KEY解决方案,但我不明白它会如何简单。 – 2010-09-11 21:45:03