之前在开发一个系统的过程中遇到了写数据和读取数据不一致的问题,情形大约是这样的,有一个定时刷新的任务,没五秒请求一次数据更新本地数据库,更新完成大约需要2s,在这过程中如果再开线程进行读数据,会读取到还没被更新的数据,为了解决这个问题,就使用了mysql的排他锁。
用法:
SELECT ... FOR UPDATE;
在java中使用事务实现:
conn.setAutoCommit(false);
//SQL相关操作
//对数据库的操作 在提交之前 不允许其它读
select * from XXX for update
update XXX set ... //更新本地数据库
conn.commit(); //事务提交