栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL标准UPSERT呼叫

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL标准UPSERT呼叫

MySQL和HSQLDB均支持的唯一解决方案是查询要替换的行,并有条件地查询INSERT或UPDATE。这意味着您必须编写更多的应用程序代码来补偿RDBMS实现之间的差异。

  1. 开始交易。
  2. 选择…进行更新。
  3. 如果SELECT找到行,则进行UPDATE。
  4. 否则,请插入。
  5. 犯罪。

MySQL不支持ANSI SQL MERGE语句。它支持REPLACE和INSERT … ON DUPLICATE KEY
UPDATE。有关更多信息,请参见我对“ INSERT IGNORE”和“ INSERT … ON DUPLICATE KEY
UPDATE”的
回答。


关于评论:是的,另一种方法是只尝试INSERT并查看它是否成功。否则,请执行UPDATE。如果您尝试执行INSERT并按下重复键,则会生成错误,该错误在某些客户端接口中变成异常。在MySQL中执行此操作的缺点是,即使INSERT失败,它也会生成一个新的自动增量ID。因此,您最终会遇到空白。我知道通常不需要担心自动增量序列中的间隙,但是去年我帮助了一位成功插入之间的间隙为1000-1500的客户,由于这种影响,结果是他们用尽了一个INT在其主键中。

正如@baraky所说,可以先尝试执行UPDATE,如果影响到零行,则改为执行INSERT。我对此策略的评论是,更新零行不是一个例外-
您必须在UPDATE之后检查“受影响的行数”,才能知道它是否“成功”。

但是查询受影响的行数会使您回到原来的问题:您必须在MySQL和HSQLDB中使用不同的查询。

HSQLDB:

CALL DIAGNOSTICS(ROW_COUNT);

MySQL:

SELECT ROW_COUNT();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614429.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号