从我的代码(Java)我想确保在我的代码执行后数据库(DB2)中存在一行。DB2是否有“插入或更新”语句?
我的代码现在执行select
,如果没有返回结果,它会执行insert
。我真的不喜欢这个代码,因为它在多线程环境中运行时暴露了我的并发问题。
我想要做的就是把这个逻辑放在DB2中而不是在我的Java代码中。 DB2是否有insert-or-update
语句?或者我可以使用的任何类似的东西?
例如:
insertupdate into mytable values ('myid')
做的另一种方式,它可能将是永远做插入和捕获“SQL代码-803主键已经存在”,但我想避免,如果可能的。
每个线程有一个事务不是更好吗?数据库管理系统在多线程下运行良好,这就是交易发明的原因。他们会解决并发问题。 – bortzmeyer 2008-12-01 10:58:16
这不会解决并发问题,因为事务只能通过在已经存在的行上进行阻塞来工作。如果行不存在,事务就不能阻塞它,所以这种操作仍然对并发问题开放 – Richard 2011-11-30 15:57:55