数据库是死的,它的同步不是靠自己,而是靠外部是如何操作的。例如你说的一致性问题,在之前用SQL是这样的:
改写数据的时候,需要select x from tablex where id=xx for update ,注意末尾这里有个for update,这样这行数据就会被锁定,其他的更新就进不来,这样就避免了并发的相互覆盖,只有前一个commit之后,后者才能操作这条数据。
但是这还没完,比如第一个用户打开的时候,数据内容是a,他准备将他修改为b,在他打开的时候,第二个用户也打开了这条数据,他发现这条数据必须修改为c,于是他也做了修改,然后他们现后进行了提交,如果不做任何特殊处理,他们都不知道这条数据是从a变为b再变为c、还是先变为c再变为b的。所以以下是完整的做法:
1,在数据结构上增加一个字段:updatetime(yyyymmddhh24miss)
2,用户打开数据的时候,当前显示的内容背后隐藏着这个字段,就是说打开a的时候,同时还有它的更新时间一起被查询并保存在客户端
3,用户提交a~b的修改的时候,一并将上一步打开的时间一起传回
4,后台select x,updatetime from tablex where id=xx for update,之后检查select出来的时间是否与上一步回传的时间一致,如果不一致,说明之前有其它客户端修改了这条数据,如果一致才进行修改,修改的时候同步updatetime到最新的sysdate