Mysql事务和锁

1.什么是数据库的事务?

数据库事务的典型场景?

订单,转账 支付,电商等全部成功/全部不成功。金融

什么是事务?

数据库的最小工作单元,不可分割,一个DML或多个

哪些存储引擎支持事务?

InnoDB 版本5.5.5以后的 数据的一致性 MyIsam 不支持 BDB支持

事务的四大特性?

ACID
原子性: undo log实现 记录数据修改之前的值
一致性 完整性的约束有没有破坏,合法的数据状态,字段长度,主键唯一,类型都是合法,用户自定义的完整性
隔离性 透明的互相不干扰的
持久性 对数据库任意的操作(增删改) 永久性的不能因为重启就更改了
redo log ---写到buffer pool(在内存中)

数据库什么时候出现事务?
update brower set Bro_Pro_username = 'zhangsan' where Bro_id = 165;



Start TRANSACTION;
begin;
update brower set Bro_Pro_username = 'lisi' where Bro_id = 165;
rollback;


show VARIABLES LIKE 'autocommit';
set session autocommit = on;
update brower set Bro_Pro_username = 'wangwu' where Bro_id = 165;
commit;


--事务结束的时候,所持有的锁就会释放
事务并发会带来什么问题?
?问题 为什么会出现查询两次数据时出现数据不一致的情况

脏读:
在一个事务里面前后两次读取数据不一致,是由于其他的事务操作了数据并且没有提交的数据就是脏读;


image.png

不可重复读:
一个事务前后两次读取数据发生不一致的情况是由于其他的事务中间操作的数据并且提交了的这种情况。


image.png

幻读:只有插入才是幻读


image.png
不可重复读和幻读的区别?

不可重复读是更新和删除,而幻读是插入数据导致数据行不同

总结
事务并发的三大问题其实都是数据库一致性问题,必须由数据库提供一定的事务隔离机制来解决。

事务的四种隔离级别

SQL92 ANSI/ISO标准
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

未提交读 ----未解决任何并发问题
事务未提交的数据对其他事务也是可见的,会出现脏读
已提交读 ----解决脏读问题
一个事物开始之后,只能看到已提交的事务所做的修改,会出现不可重复读
可重复读 ----解决不可重复读问题
在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题
串行化 ----解决所有问题
最高的隔离级别,通过强制事务的串行执行。


image.png

如何要解决读一致性的问题,保证一个事务中前后两次读取数据结果一致,实现事务隔离,应该怎么做?
第一种:在读取数据前,对其加锁,防止其他事务对数据进行修改(LBCC)
第二种:生成一个数据请求时间点的一致性数据快照,并用这个快照来提供一定级别(语句级或事务级)的一致性读取(MVCC)

协同使用

2.MySQL InnoDB 锁的基本类型

Screenshot_2019-09-16-14-01-12-252_com.baidu.netd.png

myisam支持表锁 innodb支持表锁和行锁
加锁效率 -- 表锁>行锁
冲突概率 -- 表锁>行锁
并发性能 -- 表锁<行锁


image.png

行级别锁:

共享锁:
多个事务对于同一数据可以共享一把锁,都可以访问到数据,但是只能读数据不能修改
读数据时修改数据会出现死锁
加锁释锁方式:

select * from emp where emptno = 1 LOCK IN SHARE MODE;

释放 :
commit/rollback;

排他锁:
写锁,排他锁不能与其他锁共存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的锁(共享锁、排他锁),只有该获取了排他锁的事务可以对数据进行读取和修改
和任意的锁都是冲突的
实现:

自动:delete/update/insert 默认加上X锁
手动:select * from emp where emptno = 1 for update;

commit/rollback

表级别的锁
意向共享锁/意向排他锁
尝试去锁住一张
前提:没有其他任何一个事务锁住了这张表的任何一行数据

锁的作用?
用来解决事务不同事务竞争并发
锁到底锁住了什么?
是一行数据吗?
是一个字段吗?

4.行锁的原理与算法详解

1.无索引时

第一行数据加锁
第三行数据加锁失败

没有索引的时候为什么会导致锁表?
一张表有没有可能没有主键索引,如果没有会创建默认索引,全表的扫描

2.主键索引

唯一索引和主键索引的区别

主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
唯一性索引列允许空值,而主键列不允许为空值。
主键列在创建时,已经默认为空值 + 唯一索引了。
主键可以被其他表引用为外键,而唯一索引不能。
一个表最多只能创建一个主键,但可以创建多个唯一索引。
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。
在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。

为什么第一个事务锁住name,会阻塞第二个事务锁住id呢?

锁住索引
什么是索引?

算法

记录锁:
唯一性索引(唯一/主键) 等值查询,精准匹配
间隙锁
记录不存在 间隙的区间不可变
临键锁
范围查询,包含记录和区间

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349