有一个 Spring 批处理作业,在隔离级别为 READ_COMMITTED 的事务中包含一次删除和多次插入:
delete from TABLE_A;
insert into TABLE_A values (...);
insert into TABLE_A values (...);
...
但是,当我在批处理作业仍在运行(尚未提交)时尝试从数据库 TABLE_A 中进行选择时,该选择并未被我预期的排他锁阻止,因为事务中存在全表删除。我可以知道 MariaDB 是否有一些特殊的锁定机制?
它提供的数据就像您在开始之前查看表格一样
DELETE
。这就是您SELECT
能看到的全部内容,READ_COMMITTED
直到DELETE
COMMITs
. (不,您不会得到旧数据和新数据的混合。)(引用比尔·卡尔文的话……)