PostgreSQL 在对账|购票|防纂改|原子操作中的语法妙用
标签
PostgreSQL , update , returning , NEW , OLD
背景
在数据库中更新记录时,有时为了对账,或者防纂改的目的,需要在更新后立即返回更新前和更新后的值。
例如以set bit为例,假设使用BIT串作为火车的每个位置,每个BIT代表一张票,0表示未售卖,1表示已售卖。
购票时,使用set bit=1的操作,为了确保不出现重复售票的问题,必须确保被set的value以前的值为0,SET后的值为1。
这个动作其实也可以在function中来保证,不过你要扩展FUNCTION的功能,在function中确保set bit前的值为0,set bit后的值为1。
本文要讲的是通过update returning语法来实现类似的对照功能。
其实insert returning也有类似的用法,例如插入时并不知道数据库生成