【发布时间】:2011-05-28 14:11:42
【问题描述】:
我需要对数据库执行一个非常简单的操作 - 将一些值按键放入表中,如果该行存在 - 更新它,如果不存在 - 创建一个新的。问题是我需要以可移植的方式进行 - 即相同的查询必须适用于 MySQL、SQL Server、Oracle,最好还适用于 DB2、Postgres 等。所以虽然我可以在 MySQL 中使用 REPLACE 或 INSERT ... ON DUPLICATE KEY UPDATE ,我不确定这些是否支持这种语法。而且我真的想避免使用数据库类型的 if,因为这将是不可维护的。我也不想在更新之前实际查询该值,因为我怀疑它会显着减慢进程(我需要多次执行)。
到目前为止,我想出的最好的方法就是:
UPDATE table SET data='data' WHERE key='key';
INSERT INTO table(key, data) VALUES ('key', 'data');
其中一个总是成功而另一个失败,但我不在乎其中一个查询失败。不过看起来有点不雅。有什么建议可以让它变得更好吗?
【问题讨论】:
标签: sql mysql sql-server database oracle