如果 id 存在则更新,否则插入 (ODBC)

Posted

技术标签:

【中文标题】如果 id 存在则更新,否则插入 (ODBC)【英文标题】:UPDATE if id exists, else INSERT (ODBC) 【发布时间】:2012-01-26 11:39:58 【问题描述】:

我正在使用 php 脚本通过 ODBC 连接到 Microsoft Access 数据库

我正在处理的表有一个“id”列。如果 SKU 不存在,我想插入新记录,否则如果 SKU 确实存在,只需更新该记录。

对此的正确 SQL 是什么?是否可以在一个查询中完成?

【问题讨论】:

mysqlREPLACE INTO ...。如果 MS Access 可以使用,请尝试。 Upserting in MS-access的可能重复 【参考方案1】:

就个人而言,我会将其留给应用程序逻辑而不是数据库逻辑。你可以这样做:

if($id)

    $sql = 'UPDATE ... WHERE id = ?'; // assuming use of parameterized query

else

    $sql = 'INSERT INTO ...';

【讨论】:

【参考方案2】:

我宁愿在 2 个查询中完成。

对我来说更新或插入它们是不同的 BUSINESS 逻辑。为了让您的代码清晰明了,最好明确定义 INSERT 和 UPDATE 的逻辑。

从技术上讲,我看不到在一条 SQL 语句中执行此操作的 干净 方式。每个语句都必须以“动词”开头,它可以是“UPDATE”或“SELECT”或“DELETE”或其他。或者,如果您坚持这样做,您可以在执行“插入”之前尝试删除潜在的现有项,然后您仍然执行“插入”,但是您可能会得到同一实体的不一致 ID,这也可能导致问题.

或者,如果“id”是主键,另一种愚蠢的方法是无论如何都要进行“更新”,然后再进行“插入”。如果没有有效的 id,更新会失败,插入会成功。如果有有效的 id,更新将成功,插入将失败。没有 BUSINESS if-else 逻辑,您将完成它,但每次都会出现 SQL 失败,这 IS 愚蠢而丑陋。

我能想到的就这么多了。

【讨论】:

【参考方案3】:

我不建议在一个查询中执行此操作。在执行查询以添加新值之前,请检查您要添加的值是否存在。

【讨论】:

以上是关于如果 id 存在则更新,否则插入 (ODBC)的主要内容,如果未能解决你的问题,请参考以下文章

SQL:如果存在则更新,否则插入...但对于具有不同值的多行

如果存在如何更新,否则插入新文档?

如果存在如何更新,否则插入新文档?

如果存在则更新,否则插入[重复]

mysql 表中数据不存在则插入,否则更新数据

MYSQL从另一个表更新数据,如果存在,否则插入[重复]