mysql中innoDB引擎的锁机制

(1)两种类型的行锁
    共享锁(S):允许一个事务去读取一行,阻止其他事务获取相同数据集的排它锁;(查询时不能进其它操作)
    排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读取和排他写锁;
    意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
  意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。
(2)对于update,delete和insert;innodb会自动加上意向锁排他锁(X),但是对于select语句需要自己手动加:
    共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。
  排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE。
(3)InnoDB行锁实现方式

(4)在InnoDB下,使用表锁要注意
    使用LOCK TABLES虽然可以给InnoDB加表级锁,但必须说明的是,
    《1》表锁不是由InnoDB存储引擎层管理的,而是由其上一层──MySQL Server负责的,
    仅当autocommit=0、innodb_table_locks=1(默认设置)时,InnoDB层才能知道MySQL加的表 锁,
    MySQL Server也才能感知InnoDB加的行锁,这种情况下,InnoDB才能自动识别涉及表级锁的死锁;
    否则,InnoDB将无法自动检测并处理这种死 锁。有关死锁,下一小节还会继续讨论。
    《2》在用 LOCK TABLES对InnoDB表加锁时要注意,要将AUTOCOMMIT设为0,
    否则MySQL不会给表加锁;事务结束前,不要用UNLOCK TABLES释放表锁,
    因为UNLOCK TABLES会隐含地提交事务;COMMIT或ROLLBACK并不能释放用LOCK TABLES加的表级锁,
    必须用UNLOCK TABLES释放表锁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值