下文给大家带来有关mysql中innoDB锁有什么主要作用内容,相信大家一定看过类似的文章。我们给大家带来的有何不同呢?一起来看看正文部分吧,相信看完mysql中innoDB锁有什么主要作用你一定会有所收获。
在innoDB加锁前,为什么要先开始事务
innoDB下锁的释放在事务提交/回滚之后,事务一旦提交/回滚之后,就会自动释放事务中的锁,innoDB默认情况下autocommit=1即开启自动提交
检索条件使用索引和不使用索引的锁区别:
检索条件有索引的情况下会锁定特定的一些行。
检索条件没有使用使用的情况下会进行全表扫描,从而锁定全部的行(包括不存在的记录)
读锁:
读锁是共享的,或者说是相互不阻塞的。多个用户在同一时刻可以同时读取同一个资源,而互不干扰。
写锁:
写锁是排他的,也就是说一个写锁会阻塞其他的写锁和读锁。另外写锁比读锁有更高的优先级,因此一个写锁请求可能会被插入到读锁队列的前面,但是读锁则不肯能插入到写锁的前面
表锁:
innoDB还有两个表锁:意向共享锁(是),意向排它锁(IX)
行锁:
innoDB实现了两种类型额行级锁,共享锁和排它锁
对于select 语句,innodb不会加任何锁,也就是可以多个并发去进行select的操作,不会有任何的锁冲突,因为根本没有锁。
对于insert,update,delete操作,innodb会自动给涉及到的数据加排他锁,只有查询select需要我们手动设置排他锁。
意向共享锁(IS):
通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加共享锁,那么此时innodb会先找到这张表,对该表加意向共享锁之后,再对记录A添加共享锁。也就是说一个数据行加共享锁前必须先取得该表的IS锁
意向排它锁(IX):
通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加排他锁,那么此时innodb会先找到这张表,对该表加意向排他锁之后,再对记录A添加共享锁。也就是说一个数据行加排它锁前必须先取得该表的IX锁
共享锁和意向共享锁,排他锁与意向排他锁的区别:
共享锁和排他锁,系统在特定的条件下会自动添加共享锁或者排他锁,也可以手动添加共享锁或者排他锁。
意向共享锁和意向排他锁都是系统自动添加和自动释放的,整个过程无需人工干预。
共享锁和排他锁都是锁的行记录,意向共享锁和意向排他锁锁定的是表。
锁的实现方式:
在MySQL中,行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主键索引,MySQL就会锁定这条主键索引;如果一条语句操作了非主键索引,MySQL会先锁定该非主键索引,再锁定相关的主键索引。