Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将插入命令转换为更新_Mysql_Insert Update - Fatal编程技术网

Mysql 将插入命令转换为更新

Mysql 将插入命令转换为更新,mysql,insert-update,Mysql,Insert Update,我有两个INSERT命令,它们对我来说是无用的,因为这两组行(表中已有的行和我的asINSERT命令)不是不相交的。这两个命令都插入大量行和大量值 因此,如果我想执行这些行,就会出现重复输入错误 有没有什么简单的方法可以将这些命令“转换”为UPDATE 我知道这听起来很愚蠢,因为如果我想更新,为什么我要发出插入命令。只是为了说明一个清晰的场景:另一个开发人员给了我脚本:) 提前感谢,, 丹尼尔 编辑-问题已解决 首先,我创建了一个表,并用INSERT命令填充它,然后使用以下REPLACE命令:

我有两个
INSERT
命令,它们对我来说是无用的,因为这两组行(表中已有的行和我的as
INSERT
命令)不是不相交的。这两个命令都插入大量行和大量值

因此,如果我想执行这些行,就会出现重复输入错误

有没有什么简单的方法可以将这些命令“转换”为
UPDATE

我知道这听起来很愚蠢,因为如果我想
更新
,为什么我要发出
插入
命令。只是为了说明一个清晰的场景:另一个开发人员给了我脚本:)

提前感谢,, 丹尼尔

编辑-问题已解决

首先,我创建了一个表,并用
INSERT
命令填充它,然后使用以下
REPLACE
命令:

REPLACE
    INTO table_1
SELECT *
    FROM table_2;

这可以在以下位置找到:

您必须手动将它们重写为更新。如果我遇到这样的问题,我会首先查询某个主键的计数,如果没有找到,我会插入一个通用数据集,然后更新它。这样,就可以添加新数据并更新现有数据,而不必区分插入新数据和更新数据。

对于MySQL,您可以使用
插入忽略
插入。。。重复更新时
语法。请参见

MySQL的关键字来实现这一点。只需将查询中的
INSERT
关键字替换为单词
replace
,它就会更新行,而不是插入新行。请注意,它仅在插入主键或唯一键列时才起作用。

您可以轻松修改查询以更新重复行,请参阅MySQL中的语法哪个SQL?一些变体(例如MSSQL)支持MERGE语句,这肯定是最常见的。请更新您的标签。谢谢您的通知。我们正在讨论MySQL查询。谢谢!我将进行编辑,详细解释我的解决方案。这可能会导致问题。使用replace将删除具有重复键的行,并写入整个新行。这会弄乱索引并增加开销。使用“复制时…更新”更合适,它将保留索引。Replace更好地用于索引到重新索引的一次性场景,而不是重复查询以更新表。抱歉,必须进行向下投票,因为这确实会弄乱您的数据!特别是当其他表依赖于您的主idsYes时,请谨慎使用并进行适当的测试。但是使用这个方法节省了我很多时间手动将INSERT语句转换为UPDATE语句。我在考虑使用ON DUPLICATE KEY解决方案,但我不认为这是多么容易。