我正在使用PHP脚本连接到使用ODBC的微软访问数据库
我正在处理的表格中有一个'id'列。如果SKU尚不存在,我想插入新记录,否则如果SKU确实存在,只需更新该记录。
这是什么正确的SQL?是否可以在一个查询中执行此操作?
答案 0 :(得分:2)
我宁愿在2个查询中执行此操作。
对我来说,更新或插入它们是不同的业务逻辑。为了使代码清晰明了,最好明确定义INSERT和UPDATE的逻辑。
从技术上讲,我没有在一个SQL语句中看到 Clean 方式。每个语句都必须以“动词”开头,它是“UPDATE”或“SELECT”或“DELETE”或其他内容。或者,如果你坚持这样做,你可以尝试删除潜在的现有的,然后你做“插入”,然后你做“插入”,但是然后你可能会得到同一实体的不一致的Id,这也可能导致问题
或者如果“id”是主键,另一种愚蠢的方式是进行“更新”,然后再进行“插入”。如果没有有效的ID,则更新将失败,并且插入将成功。如果有有效的id,则update将成功,insert将失败。如果没有 BUSINESS if-else逻辑,你就可以完成它,但每次都会出现SQL故障, IS 愚蠢和丑陋。
这就是我能想到的。
答案 1 :(得分:2)
就个人而言,我会将其留给应用程序逻辑而不是数据库逻辑。你可以这样做:
if($id)
{
$sql = 'UPDATE ... WHERE id = ?'; // assuming use of parameterized query
}
else
{
$sql = 'INSERT INTO ...';
}