简单介绍MYSQL的内容
树图思维导图提供 互联网MYSQL思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 互联网MYSQL思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:043ddbffab6d33ca1bc85501c9add19c
MYSQL思维导图模板大纲
作用范围
可重复读
第一次读的时候生成一个ReadView,之后的读都复用之前的ReadView
读已提交
在每次查询生成一个独立的ReadView
数据结构
聚簇索引记录中有两个必要的隐藏列
roll_pointer
每次对哪条聚簇索引记录有修改的时候,都会把老版本写入undo log中。这个roll_pointer就是存了一个指针,它指向这条聚簇索引记录的上一个版本的位置,通过它来获得上一个版本的记录信息。(注意插入操作的undo日志没有这个属性,因为它没有老版本)
trx_id
用来存储每次对每条聚簇索引记录进行修改的时候的事务id
实现原理
访问数据时
访问数据,获取数据中的事务id(获取的是事务id最大的记录),对比readview
如果在readview的左边(比readview都小),可以访问(在左边意味着该事务已经提交)
如果在readview的右边(比readview都大)或者就在readview中,不可以访问,获取roll_pointer,取上一个版本重新对比(在右边意味着,该事务在readview生成之后出现,在readview中意味着该事务还未提交)
开启事务时
创建readview,readview维护当前活动的事务id,即未提交的事务id,排序生成一个数组
MyISAM
表锁
分类
表共享写锁
会阻塞其他用户对同一表的读和写操作;
表共享读锁
不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;
优先级
默认情况下,写锁比读锁具有更高的优先级:当一个锁释放时,这个锁会优先给写锁队列中等候的获取锁请求,然后再给读锁队列中等候的获取锁请求。
可以设置改变读锁和写锁的优先级:
通过指定启动参数low-priority-updates,使MyISAM引擎默认给予读请求以优先的权利。 通过执行命令SET LOW
优缺点
开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
MyISAM加表锁方法
MyISAM执行(SELECT)前会自动给涉及的表加读锁
MyISAM执行(UPDATE、DELETE、INSERT 等)前会自动给涉及的表加写锁
在自动加锁的情况下,MyISAM 总是一次获得 SQL 语句所需要的全部锁,这也正是 MyISAM 表不会出现死锁(Deadlock Free)的原因。
InnoDB
行锁
分类
排他锁(X
允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。
共享锁(S)
允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
优缺点
开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
锁模式兼容
表锁
分类
意向排他锁(X)
事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的 IX 锁。
意向共享锁(S)
事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的 IS 锁。
概括思维导图模板大纲
概括思维导图模板大纲
树图思维导图提供 《数字教育平台开发项目策划》 在线思维导图免费制作,点击“编辑”按钮,可对 《数字教育平台开发项目策划》 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:d6437326e3e07ecf1e5e178ba84d0100
树图思维导图提供 母婴大健康行业互联网展现推广方案1.0 在线思维导图免费制作,点击“编辑”按钮,可对 母婴大健康行业互联网展现推广方案1.0 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:e848be5cfe3012b9c73b8c363c1cba92