MySQL的锁(表锁与行锁)
1.锁
为什么需要锁?
在实际中,比如在淘票票抢电影票,A用户和B用户都想要要2排2座,那么它们必然只有一个人能抢到。在这个过程中,使用锁可以对有效的资源在并发的环境下进行保护,解决隔离和并发的矛盾。
什么是锁?
锁是计算机协调进程和线程在并发情况下访问某一资源的协调机制
在数据库中,数据是提供给多用户的共享资源,锁是用来保证资源的有效性和一致性
2.Mysql锁(MyISAM引擎)
MySql锁机制的特点是在不同的储存引擎下采用了不同的锁
MyISAM引擎下和Memory引擎下用的都是表级锁(table_level lock)
MyISAM表级锁的两种模式
表共享读锁和表独占写锁
如何给表加锁?加锁后会有哪些影响?
表共享锁
在本会话中
在其它会话中
表独占锁
在本会话中
在其它会话中
总结:
3.MySQL锁(InnoDB引擎)
InnoDB引擎下采用的是行级锁(row_level lock)
行锁
共享锁又称,读锁。当一个事务对某几行上读锁时,允许其它事务对这几行进行读操作,但不允许其进行写操作,也不允许其它事务给这几行上排它锁(写锁),但允许上读锁。
排它锁又称,写锁。当一个事务对某几个上写锁时,不允许其它事务写(别的事务写其它行也会成为等待状态),但允许读,更不允许其它事务给这几行上任何锁。
测试在某行上排它锁后,其它会话在各类情况下的操作结果
当事务提交,COMMIT会进行锁的释放。
测试在某行上共享锁后,其它会话在各类情况下的操作结果
引入一道常见面试题:
正确的方法是,首先创建一张表和你预期更新后的表结构相同,然后把旧表的数据复制到新表中,并在数据库设置一个一个触发器,让旧表更新的数据更新在新表中,当全部同步后,执行一个把新表名改旧表,旧表删除的操作。
MySQL的锁(表锁与行锁)相关推荐
- mysql 并发 锁表_MySQL中的锁(表锁、行锁) 并发控制锁
https://github.com/MrLining/mysql/wiki/MySQL%E4%B8%AD%E7%9A%84%E9%94%81%EF%BC%88%E8%A1%A8%E9%94%81%E ...
- 最全MySQL锁讲解:页锁、共享锁、行锁、表锁、悲观锁、乐观锁
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突),如何保证数据并发访问的一致性.有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,从 ...
- mysql行锁怎么读_MySQL锁(三)行锁:幻读是什么?如何解决幻读?
概述 前面两篇文章介绍了MySQL的全局锁和表级锁,今天就介绍一下MySQL的行锁. MySQL的行锁是各个引擎内部实现的,不是所有的引擎支持行锁,例如MyISAM就不支持行锁. 不支持行锁就意味着在 ...
- mysql临键锁_详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
详解 MySql InnoDB 中的三种行锁(记录锁.间隙锁与临键锁) 前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题.MVCC ...
- java ibatis 锁表_oracle查看被锁的表和解锁
https://www.cnblogs.com/XQiu/p/5212787.html --以下几个为相关表 SELECT * FROM v$lock; SELECT * FROM v$sqlarea ...
- mysql innodb 排他锁_MySQL 针对 InnoDB 引擎锁的种类:行锁(共享锁和排他锁)和表锁(意向共享锁和意向排他锁)...
InnoDB 锁快速到底 行锁:共享锁(S).排他锁(X) 表锁:意向共享锁(IS).意向排他锁(IX) 下面主要针对 MySQL 中行级锁中的共享锁(S)与排他锁(X)进行分析 共享锁又称为读锁,简 ...
- mysql和oracle的锁_关于数据库行锁与表锁的认识
MySQL MySQL(InnoDB存储引擎)默认是自动提交事务的,所以这个测试,需要先将MySQL的autocommit设置为0,关闭自动提交,需要自己手动提交事务 -- 关闭自动提交 set au ...
- mysql事务基础+基于innodb的行锁+间隙锁+如何锁定行
[0]README outlines are as follows : 行锁: 事务: 隔离级别: 行锁变表锁: 间隙锁: 如何锁定一行: 行锁总结: [1]行锁+事务+存储引擎基础 1.行锁: 偏向 ...
- mysql 不锁表备份_Mysql不锁表备份之Xtrabackup的备份与恢复
一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...
- 怎么查看mysql是否锁表_MySQL查看是否锁表
MySQL查看是否锁表的方法:首先进入命令窗口:然后通过执行命令"show engine innodb status\G;"查看造成死锁的sql语句,并分析索引情况即可. 可直接在 ...
最新文章
- jwt需要存redis吗_Spring Cloud Security:Oauth2结合JWT使用
- Android 拉伸四周空白,中间内容不变的9Patch
- Linux7改运行级别,Centos7 修改运行级别
- python后端数据发送到前端_Python Django 前后端数据交互 之 后端向前端发送数据...
- Python set list dict tuple 区别和相互转换 - Python零基础入门教程
- 错误:docker-ce-cli conflicts with 2:docker-1.13.1-103.git7f2769b.el7.centos.x86_64 错误:docker-ce confli
- python 3.6.5 shell_linux安装python3.6.5
- 单个字段中根据条件剔除数据
- paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
- 云计算复习知识总结(很有用,全是干货)
- java 长字符串变短_如何将一个很长的String变短,再根据短的String还原?
- Android ANR的trace文件基本信息解读
- centos开启443端口
- 数显之家快讯:「SHIO世硕心语」2021年,中国不可错过的5大红利!
- 图片指纹技术检测图片相似度
- 一、DC DC电源转换电路设计
- NR 5G 无线帧与子载波
- 图文解析如何配置网络交换机配置
- SystemVerilog学习-10-验证量化和覆盖率
- 用vue2写的开发者在线简历导出
热门文章
- 扫地机器人能过去地垫_在那台石头扫地机器人用了近一年之后...
- 华为鸿蒙拍照,华为首部鸿蒙手机P50来了!顶级拍照再升级,麒麟芯片或绝唱……...
- 绝地求生服务器维护9月19日,绝地求生9月19日更新到什么时候?9月19日更新时间一览...
- 简述linux的系统组成,Linux系统组成
- 日本人的名字是姓在前还是名在前
- 怎样用计算机算账快,怎样在电脑上做账目表格(5步学会电脑算账操作)
- HTML5新增标签最有用的总结
- 企业视频直播平台有哪些
- 【一种类似labelme自动勾画方式---opencv】
- 请从1到35之间随机选择5个数,再从1到12中随机选择两个数,作为双色球的开奖号码...