session1

innodb 表级锁-lock table

session2

innodb 表级锁-lock table

 

(1)使用LOCK TALBES虽然可以给InnoDB加表级锁,但必须说明的是,表锁不是由InnoDB存储引擎层管理的,而是由其上一层MySQL Server负责的,仅当autocommit=0、innodb_table_lock=1(默认设置)时,InnoDB层才能知道MySQL加的表锁,MySQL Server才能感知InnoDB加的行锁,这种情况下,InnoDB才能自动识别涉及表级锁的死锁(带求证);否则,InnoDB将无法自动检测并处理这种死锁(验证没通过)innodb 并没有做出回滚操作。

(2)在用LOCK TABLES对InnoDB锁时要注意,要将AUTOCOMMIT设为0,否则MySQL不会给表加锁;事务结束前,不要用UNLOCAK TABLES释放表锁,因为UNLOCK TABLES会隐含地提交事务;COMMIT或ROLLBACK产不能释放用LOCAK TABLES加的表级锁,必须用UNLOCK TABLES释放表锁,正确的方式见如下语句。 例如,如果需要写表t1并从表t读,可以按如下做: SET AUTOCOMMIT=0; LOCK TABLES t1 WRITE, t2 READ, ...; [do something with tables t1 and here]; COMMIT; UNLOCK TABLES;

相关文章:

  • 2021-11-06
  • 2022-12-23
  • 2021-04-20
  • 2021-12-25
  • 2022-01-26
  • 2022-01-08
  • 2021-11-26
猜你喜欢
  • 2022-02-04
  • 2022-12-23
  • 2021-06-13
  • 2022-12-23
  • 2022-12-23
  • 2021-12-15
  • 2022-12-23
相关资源
相似解决方案