是面试题,大意是数据库采用了主从,如果一个事务里面既有读又有写(读和写操作有多次),自己知道数据库主从在同一进程内读写可能会有问题(因为写是写到主库、读读的是从库,同一个进程内有可能刚写入的数据还没有及时的同步到从库),但是不太明白这个问题强调是在一个事务中会产生什么新的问题,如果有的话如何解决?
人生最曼妙的风景,竟是内心的淡定与从容!
你说的同一进程分别读写主从库应该不是事务相关的问题吧?因为同一事务不支持跨库的,据我所知没有‘主从事务’这一说,也许有,那是某些库的实现,与数据库无关。不管是不是同一进程,数据同步不及时的问题都可能出现。
一个事务既有读又有写没什么问题,你想想一个事务只能全是读操作或全是写操作合理吗?问题在于这个情况下为了保证并发时数据的一致性,你需要用锁,如悲观锁:保证当前事务正在读取的数据不会被其它事务读取,必须等到事务执行完成数据写入后才能释放锁,否则会造成数据混乱。举个例子:一个数字10,在没有锁的情况下两个事务并行都读取到10,并增加10后写入,这时两个事务写入的都是20,而我们希望它应该是30。我觉得这个面试题考你的应该是这个点。
你说的同一进程分别读写主从库应该不是事务相关的问题吧?因为同一事务不支持跨库的,据我所知没有‘主从事务’这一说,也许有,那是某些库的实现,与数据库无关。不管是不是同一进程,数据同步不及时的问题都可能出现。
一个事务既有读又有写没什么问题,你想想一个事务只能全是读操作或全是写操作合理吗?问题在于这个情况下为了保证并发时数据的一致性,你需要用锁,如悲观锁:保证当前事务正在读取的数据不会被其它事务读取,必须等到事务执行完成数据写入后才能释放锁,否则会造成数据混乱。举个例子:一个数字10,在没有锁的情况下两个事务并行都读取到10,并增加10后写入,这时两个事务写入的都是20,而我们希望它应该是30。我觉得这个面试题考你的应该是这个点。