假设表结构为 MyTable(KEY, datafield1, datafield2...)
。
通常我想更新现有记录,或者如果它不存在则插入一条新记录。
本质上:
IF (key exists)
run update command
ELSE
run insert command
写这个的最佳执行方式是什么?
原文由 Chris Cudmore 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设表结构为 MyTable(KEY, datafield1, datafield2...)
。
通常我想更新现有记录,或者如果它不存在则插入一条新记录。
本质上:
IF (key exists)
run update command
ELSE
run insert command
写这个的最佳执行方式是什么?
原文由 Chris Cudmore 发布,翻译遵循 CC BY-SA 4.0 许可协议
不要忘记交易。性能很好,但简单的(如果存在..)方法非常危险。
当多个线程将尝试执行插入或更新时,您很容易得到主键违规。
@Beau Crawford 和 @Esteban 提供的解决方案显示了一般的想法,但容易出错。
为避免死锁和 PK 违规,您可以使用以下内容:
或者