栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mysql理论知识(mysql基础知识)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mysql理论知识(mysql基础知识)

什么是事务?

事务是一个独立的工作单元,里面的操作要不全部成功,要不全部失败。:

事务有什么特性?

原子性:操作要不全部成功,要不全部失败。隔离性:多个并发事务之间相互隔离,互不干扰。或者说一个事务的操作对于另外一个事务是不可见的。持久性:事务一旦完成,对数据的变更是永久的,不能回滚。一致性:数据的状态必须从一个正确的状态变到另外一个正确的状态,必须符合数据库定义的规则。 MySQL中事务的特性分别是怎么实现的?

原子性:通过undo log实现的。持久性:通过redo log和double write buffer(双写缓冲)实现的。隔离性:通过锁或者MVCC实现的。一致性:由原子性、持久性、隔离性共同实现的。 数据库什么时候会出现事务?

增删改会自动开启事务手动开启事务:begin和start transaction 事务怎么结束?

roll back和commit

事务并发会带来什么问题?

脏读:一个事务读到了另外一个事务未提交的数据。不可重复读:一个事务读取到了其他事务已提交的数据导致前后两次读取的数据不一致。幻读:一个数据读取到了其他事务插入的数据导致前后两次读取的数据不一致。 数据的四个隔离级别是什么?

RU(未提交读)RC(已提交读)RR(可重复读)Serializable(串行化) 实现事务隔离的方案?

LBCCMVCC MCVV原理

首先在RR的隔离级别下,事务在开启时会对整个数据库进行快照读产生一个视图,在视图中主要维护了三个全局属性:当前数据库中活跃事务的列表,事务列表中事务ID的最大值,列表中事务ID的最小值。当事务要判断另外一个事务是否可见的时候,会拿另外一个事务的ID与视图中的属性做比较:

如果事务ID比活跃事务ID的最小值要小,说明事务已经提交,对于当前事务是可见的。如果事务ID比活跃事务ID的最大值要大,说明事务是在当前事务生成之后开启的,对当前事务不可见。如果事务ID比最小事务ID大且比最大事务ID小,则会查看事务ID是否在活跃事务ID列表中

如果事务ID在活跃事务ID列表中,说明事务还没提交,对当前事务不可见,根据回滚指针去undo log链中找下一个版本。

如果事务ID不在活跃事务ID列表中,说明事务已经提交,对当前事务可见。 InnoDB为每行记录都实现了两个隐藏字段是什么?

DB_TRX_ID:事务IDDB_ROLL_PTR:回滚指针,指向undo log链。 InnoDB中的行锁有哪些?

共享锁排他锁 InnoDB中的表锁有哪些?

意向锁 InnoDB的行锁是怎么实现的?

通过锁住索引来实现的。

为什么表里面没有索引的时候,锁住一行数据会导致锁表?或者说,如果行锁锁住的是索引,那么一张表没有索引怎么办?所以一张表有没有可能没有索引?

如果我们定义了主键,那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有Null值的唯一索引作为主键索引。如果没有这样的唯一索引,则InnoDB会选择内置6字节长度的ROWID作为隐藏的聚集索引。
所以,如果表里没有索引的时候,为什么查询会锁表,因为查询没有使用索引,会进行全表扫描,然后把每一个隐藏的聚簇索引都锁住了。 为什么通过唯一索引给数据行加锁,主键索引也会被锁住?

通过唯一索引锁定一行数据的时候,跟检索数据的步骤是一样的,会通过索引数据找到主键值,根据主键值找到主键索引,然后锁定主键索引。

什么是记录锁?

当我们用唯一性的索引(包括唯一索引和主键索引)使用等值查询精准匹配到一条记录的时候,这时候使用的就是记录锁。

什么是间隙锁?

当我们查询的记录不存在的时候,没有命中任何一个record,无论是等值查询还是范围查询,它使用的都是间隙锁。间隙锁主要是阻塞插入操作。

什么是临键锁?

当我们命中了范围查询,不仅命中Record记录,还包含Gap间隙,这种情况下我们使用的就是临键锁。相当于记录锁加上间隙锁。临键锁锁住最后一个key的下一个左开右闭区间。

为什么临键锁要锁住最后一个记录的下一个左开右闭区间?

解决幻读的问题。

四个事务隔离级别的实现:

RC :不加锁Serilizable : 所有的select语句都会被隐式地被转化为select … in share mode,和update delect互斥RR :普通的select使用快照读,底层使用MVCC来实现,加锁的select( select … in share mode/ select …for update)以及更新操作等语句使用当前读,底层使用记录锁、间隙锁或者临键锁。RC:普通的select都是快照读,使用MVCC实现,加锁的select都使用记录锁。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/776289.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号