我们最简单的方式就是通过多个update来完成:
看上去很简单,但是上面的更新却存在一个很大的问题,当我们第一次执行完update后,表中id=2其实有两行数据,再去进行第二条语句时,两条语句将都会被更新。
显然这些并非我们的意愿,我们仅仅是希望id=1和id=2的值互换。
为了避免这个问题,我们可以使用case表达式来进行批量更新。
这样不仅执行正确,而且只需要执行一次,自然更加高效。这个写法应用范围很广,例如我们可以很轻松实现主键值之间的互换。否则我们需要执行3次update才可以完成。
PostgreSQL差异点:需要注意的是,在pg中使用该方法会因为主键重复而报错。
但是,约束的检查应该是在更新完成后执行,所以在更新的过程中主键值出现重复应该没问题, 所以在Oracle中执行正常。
当然在pg中存在这种问题主要还是和pg的多版本特性有关。不过一般需要进行这种主键的调换的时候,我们可以先禁用掉约束即可。
到此这篇关于PostgreSQL批量update与oracle差异的文章就介绍到这了,更多相关PostgreSQL批量update内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!