锁分类
从对数据库操作的类型分,分为读锁和写锁

- 读锁(共享锁,S锁(Shared)):针对同一份数据,多个读操作可以同时进行而不会互相影响
- 写锁(排它锁,X锁(eXclusive)):当前写操作没有完成前,它会阻断其他写锁和读锁

表锁

CREATE TABLE mylock(id INT  PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20)
)ENGINE=MYISAM;
INSERT INTO mylock(NAME) VALUES
('a'),
('b'),
('c'),
('d'),
('e');`

手动增加表锁

lock table 表名称 read(write),表名称2 read(write);

查看表上加过的锁

show open tables;

删除表锁

unlock tables;

结论

1、对MyISAM表的读操作(加读锁) ,不会阻寒其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当
读锁释放后,才会执行其它进程的写操作。
2、对MylSAM表的写操作(加写锁) ,会阻塞其他进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进
程的读写操作

行锁

每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最
高。InnoDB与MYISAM的最大不同有两点:- InnoDB支持事务(TRANSACTION)
- InnoDB支持行级锁
CREATE TABLE account(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(100),balance INT
);INSERT INTO `account` (`name`,`balance`) VALUES
('lilei', '450'),
('hanmei', '16000'),
('lucy', '2400');

索引失效导致行锁变表锁

CREATE TABLE test_innodb(id INT PRIMARY KEY AUTO_INCREMENT,b VARCHAR(100),KEY(b)
);
INSERT INTO test_innodb(b) VALUES
('100'),
('200'),
('500'),
('1000'),
('600'),
('700'),
('800');update test_innodb set  id = 10 where b = '1000';update test_innodb set  id = 1000 where b = '800';

锁主要是加在索引上,如果对非索引字段更新,行锁可能会变表锁
session1 执行:update test_innodb set id = 10 where b = 1000;
session2 对该表任一行操作都会阻塞住
间隙锁(Gap Lock)

间隙锁,锁的就是两个值之间的空隙。

INSERT INTO account (id , NAME ,balance) VALUES
(10,'jack','1000'),
(20,'john','2000');

在Session1下面执行 update account set name = ‘aaa’ where id > 8 and id <18;,则其他Session
法在这个范围所包含的所有行记录(包括间隙行记录)以及行记录所在的间隙里插入或修改任何数据,即id在
(3,20]区间都无法修改数据,注意最后那个20也是包含在内的
间隙锁是在可重复读隔离级别下才会生效。

临键锁(Next-key Locks)
Next-Key Locks是行锁与间隙锁的组合。像上面那个例子里的这个(3,20]的整个区间可以叫做临键锁。

事务部分昨日延续----锁相关推荐

  1. Mysql 事务中Update 会锁表吗?

    Mysql 事务中Update 会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开 ...

  2. mysql事务怎么加排他锁_八种方法实现CSS页面底部固定 - SegmentFault 思否

    共享锁.排他锁 InnoDB 实现了两种类型的锁机制:共享锁(S)和排他锁(X).共享锁允许一个事务读数据,不允许修改数据,如果其他事务要再对该行加锁,只能加共享锁:排他锁是修改数据时加的锁,可以读取 ...

  3. mysql 乐观锁 脏读_mysql 丢失更新1和2、脏读、不可重复读和幻读 事务隔离级别 悲观锁 乐观锁...

    事务是现代关系型数据库的核心之一.在多个事务并发操作数据库(多线程.网络并发等)的时候,如果没有有效的避免机制,就会出现以下几种问题: ( 第一类丢失更新 A事务撤销时,把已经提交的B事务的更新数据覆 ...

  4. MySQL深度剖析之事务隔离级别和锁机制(2021)

    一 事务隔离级别和锁机制 1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题 1.1.1 脏读(未提交读) A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的. 1 ...

  5. 编写程序模拟2-3个事务并发执行,简单实现调度器功能:加锁(含更新锁),根据锁表判断事务是否可获得锁,解锁

    Disk = {'A': 2,'B': 2, }Memory = {}T = 10flag = Falsedef r1(read_data):print('读取完成:' + read_data + ' ...

  6. mysql holdlock_mysql事务隔离界别与锁机制

    数据库锁 共享锁(Shared lock) 例1: ---------------------------------------- T1: select * from table (请想象它需要执行 ...

  7. MySQL事务隔离与行锁的关系

    MySQL事务隔离与行锁的关系 1. MySQL事务隔离 2. MySQL行锁 3. 事务隔离问题 1. MySQL事务隔离 MySQL事务详解 MySQL事务详解中介绍了事务隔离相关概念原理,如果是 ...

  8. MySQL之事务 索引 锁_MySql 知识点之事务、索引、锁原理与用法解析

    本文实例讲述了MySql 知识点之事务.索引.锁原理与用法.分享给大家供大家参考,具体如下: 事务 事务概念 事务就是一组原子性的SQL查询,或者说一个独立的工作单元.如果数据库引擎执行一组操作语句, ...

  9. 什么是事务?什么是锁?

    什么是事务?什么是锁? 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列. 而一个逻辑工作单元要成为事务,就必须满 ...

最新文章

  1. pure abstract class(什么是纯抽象类?)
  2. 准备入门IC的全局观念系列-中
  3. 《openssl编程》之openssl简介
  4. 关于停止发表“每周新闻回顾”的通知
  5. pythontime模块计算时长_用python的time模块查看你出生多长时间了
  6. mysql数据库权限传递,mysql数据库权限分配-参考
  7. 程序竞赛中常用的C字符串函数
  8. [数]数学系列预习-补水题ver.
  9. UVA10258 ZOJ1837 Contest Scoreboard【结构排序】
  10. SQL Server数据库的查询语句
  11. 十沣科技自主研发仿真软件 有效实现飞机起落噪声精细仿真
  12. 如何在CAD中输入带圈序号?
  13. 4个可以下载IEEE论文、计算机论文的网站
  14. android蜂巢效果、环形菜单、Kotlin影视应用、简约时钟、查看导出App、支付宝AR扫码效果等源码...
  15. 4款U盘操作系统推荐
  16. POJ题目分类---计算几何
  17. harbor高可用部署
  18. 简单理解钽电容和电解电容的区别
  19. Unity(二十一) 关于Logitech罗技G29开发
  20. VBA 使用Excel数据库:行转列

热门文章

  1. 血液净化行业分类及发展驱动因素分析
  2. 火热报名 | DockQuery 1.2 beta版本体验官开启招募!
  3. Unity3D-VR手柄控制器的实现
  4. laydate限定时间控件去除秒
  5. 【mpvue】小程序开发入门
  6. 中国剩余定理及扩展中国剩余定理
  7. PHP的各种安全问题总结 一文了解PHP的各类漏洞和绕过姿势
  8. 计算机毕业设计ssm校园物品交易系统ua3tg系统+程序+源码+lw+远程部署
  9. 虚幻5简单第三人称游戏制作文档
  10. 张宇1000题高等数学 第三章 一元函数微分学的概念