如果 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 是什么?是否可以在一个查询中完成?
【问题讨论】:
mysql 有REPLACE 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)的主要内容,如果未能解决你的问题,请参考以下文章