首页
学习
活动
专区
圈层
工具
发布

小白学习MySQL - 查询会锁表?

我们知道,Oracle中除了使用select ... for update,其他查询语句不会出现锁,即没有读锁,读一致性通过多版本解决的,可以保证在不加锁的情况下读到正确的数据。...问题来了,Oracle中执行的insert into select很正常,不会出现锁表,难道相同的语句用在了MySQL,就会锁住整张表?...,有五个record lock,虽然我只从test_1读取一行数据,但实际上对test_1的所有记录都加了锁,而且显式对test_1加了一个IS的意向锁,因此这种操作,确实影响了select表的并发执行...test_1加任何的锁,只是对'test_1'这行记录加了共享锁(lock mode S locks gap before rec),其实是加到了索引上, mysql> show engine innodb...test_2上是没有任何锁,因此不会出现RR会锁定test_2的情况, mysql> show engine innodb status \G; ... ------------ TRANSACTIONS

3.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    技术分享 | MySQL中查询会锁表 ?

    ---- 我们知道,Oracle 中除了使用 select ... for update ,其他查询语句不会出现锁,即没有读锁,读一致性通过多版本解决的,可以保证在不加锁的情况下,读到同一时间的数据。...问题来了,Oracle 中执行的 insert into select 很正常,不会出现锁表,难道相同的语句用在了 MySQL ,就会锁住整张表?...,可以开启锁监控,如果仅需要在 show engine innodb status 显示具体的锁,可以仅打开 innodb_status_output_locks, ?...1'这行记录加了共享锁(lock mode S locks gap before rec),其实是加到了索引上, mysql> show engine innodb status \G; ... --...test_2 上是没有任何锁,因此不会出现 RR 会锁定 test_2 的情况, mysql> show engine innodb status \G; ... ------------ TRANSACTIONS

    6.8K10

    MySQL优化--查询分析工具以及各种锁

    FROM table WHERE EXISTS (subquery) 该语法可以理解为:将主查询的数据,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留。...= 1; 注意: 使用上面的语句开启慢查询日志只对当前数据库生效,重启MySQL失效。...如果需要永久生效,修改my.cnf/my.ini后重启MySQL slow_query_log = 1 slow_query_log_file = /var/lib/mysql/$-slow.log...,表示可以立即获取锁的查询次数,每立即获取锁值加1; Table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取锁的次数,每等待一次锁值加1),此值高则说明存在着较严重的表级锁争用情况...MySQL5.x show variables like '%tx_isolation%'; # MySQL8.0 show variables like '%transaction_isolation

    1.2K20

    MySQL 数据库sql命令查询被锁的表实例演示,mysql的锁表与解锁,mysql强制解锁杀掉进程,mysql查询锁表一直转圈

    show open tables where in_use > 0 命令可以查询锁表。 in_use 为 1 表示这个表同时被两个用户使用,一个正在用,一个在锁定中。...-- 为md_class表增加个写锁定 lock tables md_class write; -- 查看锁表 show open tables where in_use > 0; -- 表解锁 unlock...tables; 查看锁表: 特殊情况下的锁定是线程阻塞导致的,查询锁表都查不出来,一直转圈,即使查询出也无法解锁,需要强制杀掉阻塞的线程。...select * from information_schema.innodb_trx; 方法可以查询到有两条阻塞的线程。...通过 kill + trx_mysql_thread_id 可以直接把对应的进程杀掉。 例:kill 3886;

    6.3K30

    MySQL探秘(五):InnoDB锁的类型和状态查询

    TABLE, DROP TABLE, LOCK TABLES等操作),如果没有意向锁的话,则需要遍历所有整个表判断是否有行锁的存在,以免发生冲突。...如果有了意向锁,只需要判断该意向锁与即将添加的表级锁是否兼容即可。因为意向锁的存在代表了,有行级锁的存在或者即将有行级锁的存在,因而无需遍历整个表,即可获取结果。 ?...InnoDB锁相关状态查询  用户可以使用INFOMATION_SCHEMA库下的INNODB_TRX、INNODB_LOCKS和INNODB_LOCK_WAITS表来监控当前事务并分析可能出现的锁问题...,当发生死锁需要回滚时,会选择该数值最小的进行回滚 trx_mysql_thread_id:线程ID,SHOW PROCESSLIST 显示的结果 trx_query:事务运行的SQL语句 mysql>...mysql> SELECT * FROM information_schema.INNODB_LOCKS\G; ***************** 1.row *********************

    1.2K10

    MySQL探秘(五):InnoDB锁的类型和状态查询

    TABLE, DROP TABLE, LOCK TABLES等操作),如果没有意向锁的话,则需要遍历所有整个表判断是否有行锁的存在,以免发生冲突。...如果有了意向锁,只需要判断该意向锁与即将添加的表级锁是否兼容即可。因为意向锁的存在代表了,有行级锁的存在或者即将有行级锁的存在,因而无需遍历整个表,即可获取结果。 ?...InnoDB锁相关状态查询  用户可以使用INFOMATION_SCHEMA库下的INNODB_TRX、INNODB_LOCKS和INNODB_LOCK_WAITS表来监控当前事务并分析可能出现的锁问题...,当发生死锁需要回滚时,会选择该数值最小的进行回滚 trx_mysql_thread_id:线程ID,SHOW PROCESSLIST 显示的结果 trx_query:事务运行的SQL语句 mysql>...mysql> SELECT * FROM information_schema.INNODB_LOCKS\G; ***************** 1.row *********************

    1.6K10

    【MySQL】MySQL锁(四)其它锁概念

    MySQL锁(四)其它锁概念 好了,锁相关内容的最后一篇文章了。其实最核心的内容,表锁、行锁、读锁、写锁、间隙锁这些重要的内容我们都已经学习过了,特别是间隙锁,是不是感觉非常复杂。...注意,间隙锁是可以共享的,不同的事务都可以拿锁,但是它们之间的写操作互斥。很神奇吧,看事务3的锁信息查询结果就可以看到,这个表同时上了 间隙锁 的 S 锁和 X 锁。...悲观锁 悲观锁对数据被其他事务的修改持保守态度,每次拿数据都觉得别人会修改数据,所以别人拿到锁之前都会先上锁,MySQL 中的锁机制就是悲观锁。...而且我们大部分的业务都是 读多写少 的场景,毕竟 S 锁是共享的,所以大家日常只是需要注意一下大批量的更新和删除操作以及无法容忍的慢查询语句即可。...总结 最早两个月前看书时看到锁就是一脸懵逼,接着过了两个月又开始找相关的视频,渐渐有了感觉,最后在写这几篇文章的时候又查询资料,现在才敢说是略微掌握了锁这块的知识。

    97810

    MYSQL高级篇-----查询截取分析,锁机制,主从复制

    ,放到子查询中做条件验证,根据验证结果(TRUE或FALSE)来决定主查询的数据结果是否得以保留。...2.EXISTS(subquery)子查询的实际执行过程可能经过了优化而不是我们理解上的逐条对比,如果担心效率问题,可进行实际检验以确定是否有效率问题。...在这里插入图片描述 # 1、查看慢查询日志是否开启 mysql> SHOW VARIABLES LIKE '%slow_query_log%'; +---------------------+-----...# 为mylock表添加读锁 LOCK TABLE `mylock` READ; 2、打开两个会话,SESSION1是否可以读自己锁的表?是否可以修改自己锁的表?是否可以读其他的表?...# 为mylock表添加写锁 LOCK TABLE `mylock` WRITE; 2、打开两个会话,SESSION1是否可以读自己锁的表?是否可以修改自己锁的表?是否可以读其他的表?

    74110

    【MySQL】MySQL锁(三)元数据锁与间隙锁

    MySQL锁(三)元数据锁与间隙锁 在上篇文章中,我们就提到过 元数据锁 和 间隙锁 这两个名词,不知道有没有吊起大家的胃口。这俩货又是干嘛的呢?别急,我们一个一个来看。...-- 事务1 mysql> select * from test_user3; -- 修改表结构 alter table 阻塞 mysql> alter table test_user3 add column...临键锁(Next-key Lock),是一个新的概念,但它其实是 记录锁 和 间隙锁 的结合,也是 MySQL 默认的 行锁 。什么意思呢?...; mysql> update tran_innodb set name = joe3 where id = 15; -- 注意这里没有记录为 15 的数据 -- 事务2 mysql> select...如果是唯一索引进行等值加锁的话,其实就只是一个行锁了,为啥呢?唯一的值嘛,就一条,给这一行锁上就行啦。 范围查询 最后就是范围查询的间隙锁。

    1.2K10

    【MySQL】说透锁机制(二)行锁 加锁规则 之 范围查询(你知道会锁表吗?)

    文章很长,我先给出结论 : 聚集索引 对于 聚集索引下的范围查询 、>=,无论是否组合,都会遵循如下规则: 所有匹配的索引记录:只有>= 的等值(=)匹配 上Record Lock,其它...唯一索引 和 普通索引: 对于 唯一索引 和 普通索引 下的范围查询 、>=,无论是否组合,都会遵循如下规则: 如果走了索引: 在该索引上,所有匹配的 索引记录 上Next-key...聚集索引 小结 对于 聚集索引下的范围查询 、>=,无论是否组合,都会遵循如下规则: 所有匹配的索引记录:只有>= 的等值(=)匹配 上Record Lock,其它 上Next-key Lock...唯一索引 小结 对于 唯一索引下的范围查询 、>=,无论是否组合,都会遵循如下规则: 如果走了唯一索引: 在该索引上,所有匹配的 索引记录 上Next-key Lock,对应的聚集索引...普通索引 小结 对于 普通索引下的范围查询 、>=,无论是否组合,都会遵循如下规则: 如果走了普通索引: 在该索引上,所有匹配的 索引记录 上Next-key Lock,对应的聚集索引

    3.3K32

    Mysql锁

    表锁 表锁分为写锁,读锁,二者读读不阻塞,读写阻塞,写写阻塞 2....行锁 行锁分为共享锁,排他锁,即读锁和写锁 多粒度锁机制自动实现表、行锁共存,InnoDB内部有意向表锁 意向共享锁(IS):事务在给一个数据行加共享锁前必须先取得该表的IS锁。...查询和插入可以并发,若表中没有被删除的行,可在一个进程读表的同时,另一个进程从表尾插入数据,InnoDB不行 mysql中同时加锁,写锁优先于读锁 4....,事务A数据根据事务B而改变 事务级: 事务A读取数据生成版本号1 事务B修改数据生成新版本2 事务A再读取数据还是用版本号1 避免了不可重复读,出现了幻读 MySQL的 Repeatableread隔离级别加上...第一次要获取这个字段,处理完业务逻辑开始更新时,要对比现在的版本字段和第一次的版本字段是否相同,相同则更新反之拒绝。

    1.6K20

    MySQL锁

    锁概述   MySQL的锁机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则。   ...(亲测只要在事务中,不管是查询语句还是更新语句,涉及到的表都会被加上MDL锁)   这三种锁,是InnoDB内部使用的锁,是自动实现的,不需要用户干预。...即使在条件中使用了索引,但是是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB也会对全表记录上锁...MySQL的服务层不管理事务,事务是由下层的存储引擎实现的(表锁是由MySQL的服务层实现的),所以在同一个事务中,使用多种存储引擎的表是有风险的。   ...查询自动提交是否开启: SHOW VARIABLES LIKE "autocommit"

    2.5K10

    MySQL 锁

    介绍 为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。...当客户端二,想对这张表加表锁时,会检查当前表是否有对应的行锁,如果没有,则添加表锁,此时就会从第一行数据,检查到最后一行数据,效率较低。...而其他客户端,在对这张表加表锁的时候,会根据该表上所加的意向锁来判定是否可以成功加表锁,而不用逐行判断行锁情况了。...索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。...索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。 B. 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。

    2K10
    领券