在MySQL中,我试图找到一种有效的方法来执行UPDATE如果表中已存在行,或者如果该行不存在则执行INSERT。
到目前为止,我找到了两种可能的方法:
第二种方法避免了交易。
您认为哪一种更有效,并且有更好的方法(例如使用触发器)?
答案 0 :(得分:11)
答案 1 :(得分:3)
你也可以执行UPDATE,检查受影响的行数,如果它小于1,那么它没有找到匹配的行,所以执行INSERT。
答案 2 :(得分:3)
还有另一种方式 - REPLACE
。
REPLACE INTO myTable (col1) VALUES (value1)
REPLACE的工作方式与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。 See Section 12.2.5, “INSERT Syntax”
答案 3 :(得分:2)
在mysql
中,有REPLACE
声明,我相信,它或多或少会做你想要的事情。
答案 4 :(得分:2)
REPLACE INTO将是一个解决方案,它使用UNIQUE INDEX
替换或插入内容。
REPLACE INTO
yourTable
SET
column = value;
请注意,这与您的预期不同,REPLACE
完全符合字面意思。它首先检查是否存在阻止UNIQUE INDEX
的{{1}}碰撞,它会移除(INSERT
)所有碰撞的行,然后DELETE
你给出的行它
答案 5 :(得分:1)
如果你做了很多这些,可能值得将它们写入文件,然后使用“LOAD DATA INFILE ... REPLACE ...
”