mysql表锁、行锁、索引之间暧昧的关系
2018-11-12 19:44
1601 查看
Mysql 领域的innodb存储引擎支持行级锁,innodb的行锁是通过给索引项加锁实现的,这就意味着只有通过索引条件检索数据时,innodb才使用行锁,否则使用表锁。
根据当前的数据更新语句(UPDATE user set name='11111' where account='1'),该条件字段account并没有添加索引,所以导致数据表被锁。
我们验证一下:
第一种情况,通过非索引条件检索数据时,使用的是表锁,会导致数据表被锁
1.首先,我们将mysql事务设置为不自动提交,mysql事务默认是自动提交事务的,1表示自动提交事务
mysql> select @@autocommit; +--------------+ | @@autocommit | +--------------+ | 1 | +--------------+ 1 row in set
mysql> set autocommit = 0 ; Query OK, 0 rows affected
2.起一个命令行,开始事务,更新第一条记录,先不提交
mysql> start transaction; Query OK, 0 rows affected mysql> beg in; Query OK, 0 rows affected mysql> UPDATE user set name='11111' where account='1' ->
3.我们再起一个命令行,更新第二条记录
UPDATE user set name='2222' where id='2'
4.看下表的数据
mysql表锁、行锁、索引之间暧昧的关系
mysql
可以看到,数据表没有更新
5.把第一个命令行的事务提交了
mysql> commit; Query OK, 0 rows affected
我们看到现在数据更新了。 第二种情况,通过索引条件检索数据时,使用的是行锁
如第一种情况,自己测试下。
相关文章推荐
- mysql表锁、行锁、索引之间暧昧的关系
- mysql锁和索引之间的关系
- mysql中相关,无关子查询,表与表之间的关系以及编码和乱码的解决
- MySQL基础教程23-索引和关系
- MYSQL order by排序与索引关系总结
- mysql 数据类型 和 索引关系
- ElasticSearch:集群(Cluster),节点(Node),分片(Shard),Indices(索引),replicas(备份)之间关系
- (转)mysql的索引和锁的微妙关系
- MySQL--索引与字符集的关系--数据量对利用索引的影响
- 事务的隔离级别,加锁的细节,以及两者之间的关系。 同时也说明了 索引 与 锁 之间的关系,以及死锁成因的简化的情况
- mysql 中主键和索引的关系和说明
- MySQL多表1:外键与表与表之间的关系
- MYSQL order by排序与索引关系总结
- 从底层剖析 php-fpm 和 mysql 之间的关系 ,涉及连接池pool
- mysql 学习疑问: sql语句关键字选项之间的顺序关系???
- MYSQL order by排序与索引关系总结
- MYSQL order by排序与索引关系总结
- mysql 数据和索引的存储关系
- Mysql全程讲解(难点:键、索引和约束的关系)
- mysql thread_cache 和 thread_pool 之间的关系