session1
<br>SET AUTOCOMMIT=0 ;-- 禁止自动提交<br>show variables like 'AUTOCOMMIT';<br><br>BEGIN ;<br> <br>INSERT INTO `testinnodblock` values (1, 'b2');<br><br>INSERT INTO `testinnodblock` values (3, '3');<br><br>INSERT INTO `testinnodblock` values (4, '4000');<br><br>INSERT INTO `testinnodblock` values (5, '5000');<br><br>INSERT INTO `testinnodblock` values (6, '6000');<br><br>INSERT INTO `testinnodblock` values (7, '7000');<br><br>INSERT INTO `testinnodblock` values (8, '8000');<br><br>INSERT INTO `testinnodblock` values (9, '9000');<br> <br>先不执行 COMMIT;<br><br><br>
session2
update `testinnodblock` set b = '3-2' where a = 3;
session2阻塞一段时间后,会报错:<br>[SQL]update `testinnodblock` set b = '3-2' where a = 3;<br>[Err] 1205 - Lock wait timeout exceeded; try restarting transaction<br><br>
解决办法:https://blog.csdn.net/weixin_34166472/article/details/88805074
show variables like '%timeout%';
connect_timeout 10<br>delayed_insert_timeout 300<br>have_statement_timeout YES<br>innodb_flush_log_at_timeout 1<br>innodb_lock_wait_timeout 20<br>innodb_print_lock_wait_timeout_info OFF<br>innodb_rollback_on_timeout OFF<br>interactive_timeout 28800<br>lock_wait_timeout 5<br>net_read_timeout 150<br>net_write_timeout 300<br>rpl_semi_sync_master_timeout 10000<br>rpl_stop_slave_timeout 31536000<br>slave_net_timeout 3600<br>thread_pool_idle_timeout 60<br>wait_timeout 28800
总结
行锁定基本演示<br><br>Session1 Session2<br><br>更新但是不提交,没有手写commit;<br>Session_2被阻塞,只能等待<br><br>提交更新<br>解除阻塞,更新正常进行