现在,我正在阻止来自多个示例的多个用户使用悲观的写锁访问数据库表的同一行。锁定行的事务设置了默认的隔离级别,即可重复读取。
在表为空的情况下,它会被新的条目重新填充,在这里它会变得很奇怪。insert是在单独事务中运行的异步批量插入。因此,当提交此数据时,用户将读取一行以进行更新,这将锁定该行。不知何故,这不再起作用,多个用户可以从同一行获取值。
在试图解决这个问题时,我将隔离级别改为“已提交”,问题不再发生。
有人能告诉我这怎么可能吗?我错过了什么?
以下是一些psyeudo代码,以便更好地理解:
异步重新填充
Transaction
get values to insert
bulk insert
获取价值观
Transaction
read a row for update (Locks it)
do stuff
delete the row
对于锁定,我们使用来自Spring Data 的注解: @Lock(LockModeType.PESSIMISTIC_WRITE)
1条答案
按热度按时间tnkciper1#
那么答案是,auroraprier到aurora2.x使用的是mysql 5.6.10。aurora 2.x现在使用的是MySQL5.7.12,这个问题已经修复。
p、 我仍然在问自己为什么极光使用了2年前的mysql版本,但那是另一回事。