Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么MySQL中没有读提交的锁_Mysql_Isolation Level_Transaction Isolation - Fatal编程技术网

为什么MySQL中没有读提交的锁

为什么MySQL中没有读提交的锁,mysql,isolation-level,transaction-isolation,Mysql,Isolation Level,Transaction Isolation,我在我的windows机器上使用MySQL 8。正在尝试查看已提交的读取隔离级别 innodb_lock_wait_timeout = 5; innodb_rollback_on_timeout =1; T1: start transaction; update todo set title='RC' where id=1; T2; start transaction; set session transaction isolation level

我在我的windows机器上使用MySQL 8。正在尝试查看已提交的读取隔离级别

innodb_lock_wait_timeout = 5;
innodb_rollback_on_timeout =1;


T1:  start transaction;
     update todo set title='RC' where id=1;
     

T2;
    start transaction;
    set session transaction isolation level read committed;
    select title from todo where id=1;
    got output
根据我的理解,T1具有id=1的写锁,T2不应该得到输出。T2应该获得锁超时异常

为什么T2没有获得锁超时和提交结果

如何获取锁定超时?

T2正在运行非锁定SELECT语句。它不需要等待T1持有的锁,因为T2可以读取T2开始事务发生时提交的行版本

如果运行锁定SELECT语句,则需要等待T1持有的锁

SELECT title FROM todo WHERE id=1 FOR UPDATE;
无论使用事务隔离级别READ COMMITED还是REPEATABLE READ,上述两种解释都是正确的。

T2正在运行非锁定SELECT语句。它不需要等待T1持有的锁,因为T2可以读取T2开始事务发生时提交的行版本

如果运行锁定SELECT语句,则需要等待T1持有的锁

SELECT title FROM todo WHERE id=1 FOR UPDATE;

无论您使用事务隔离级别读取提交还是可重复读取,上述两种解释都是正确的。

感谢您的澄清。但其他数据库(如MsSQL)不需要更新语法,它适用于普通的select。如果我选择不更新并准备报告,会发生什么。它将显示错误的报告。为了避免这种情况,我是否需要在所有查询中添加for update?对于报告,使用可重复读取和非锁定选择查询更好。它允许您在一个事务中运行多个SELECT语句,并确保所有SELECT语句都基于相同的数据,以便及时查看快照。它不会锁定。感谢您的澄清。但其他数据库(如MsSQL)不需要更新语法,它适用于普通的select。如果我选择不更新并准备报告,会发生什么。它将显示错误的报告。为了避免这种情况,我是否需要在所有查询中添加for update?对于报告,使用可重复读取和非锁定选择查询更好。它允许您在一个事务中运行多个SELECT语句,并确保所有SELECT语句都基于相同的数据,以便及时查看快照。它这样做没有锁定。