insert 检查 mysql_mysql – UNIQUE约束与INSERT之前的检查

我认为大多数情况下,这两者之间的差异将会变得足够小,以至于选择应该主要是通过选择对于第一次看代码最有理解的方法来实现的.

但是,我认为异常处理有一些小的优点:

>异常处理避免了潜在的竞争条件.如果另一个进程在支票和插入之间插入一条记录,’check,then insert’方法可能会失败.所以,即使你正在做“检查然后插入”,你仍然希望异常处理插入,如果你已经在执行异常处理,那么你也可以尽快取消初始检查.

>如果您的代码不是存储过程,并且必须通过网络与数据库进行交互(即应用程序和数据库不在同一个框中),那么您希望避免有两个单独的网络调用(一个用于检查和另一个用于插入),并通过异常处理来提供一种直接的方法来处理整个事情,通过一个单一的网络呼叫.现在,还有许多方法来做“检查然后插入”方法,同时仍然避免了第二次网络调用,但简单地捕捉异常可能是最简单的方法.

另一方面,异常处理需要一个唯一的约束(这是一个真正的唯一索引),它具有性能折衷:

>在非常大的表上创建唯一的约束将是缓慢的,并且会导致对该表的每个插入的性能命中.在真正的大型数据库上,您还必须预算用于强制约束的唯一索引占用的额外磁盘空间.

>另一方面,如果您的查询可以利用该索引,它可能会从表中选择更快.

我还会注意到,如果你真的想要做的是“更新其他插入”(即如果具有唯一值的记录已经存在,那么你要更新该记录,否则插入一个新的记录),那么您实际想要使用的是您的特定数据库的UPSERT方法(如果有的话).对于SQL Server和Oracle,这将是一个MERGE语句.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值