mysql相关问题总结

   日期:2020-08-29     浏览:99    评论:0    
核心提示:MySQL相关问题一.mysql的acidmysql 默认的隔离级别是可重复读(repeatable_read),oracle默认的数据库隔离级别是读已提交(read_committed)原子性一个事务中的操作,要么都成功,要么都失败.一致性事务执行前和执行后,来源和去向保持一致.隔离性并法时每个事务都是隔离的相互不影响.隔离的粒度由隔离级别决定.持久性一旦事务提交成功,应该保证数据的完整性存在.2.隔离级别隔离级别有:读未提交,读已提交,可重复读,串行化四种.隔离级别解决的问题:

MySQL相关问题
一.mysql的acid
mysql 默认的隔离级别是可重复读(repeatable_read),oracle默认的数据库隔离级别是读已提交(read_committed)
原子性
一个事务中的操作,要么都成功,要么都失败.
一致性
事务执行前和执行后,来源和去向保持一致.
隔离性
并法时每个事务都是隔离的相互不影响.隔离的粒度由隔离级别决定.
持久性
一旦事务提交成功,应该保证数据的完整性存在.
2.隔离级别
隔离级别有:读未提交,读已提交,可重复读,串行化四种.
隔离级别解决的问题:脏读.不可重复读,幻读.
脏读:一个事务读取到了另一个事务未提交的数据.
不可重复读:一个事务开始只能看见已经提交的事务,导致俩次相同的查询,得到的结果有可能不一样.
幻读:当一个事务在执行update操作将1改成2的时候,这个时候另外一个事务插入了一条=1的数据,再查看刚才修改的数据的发现还有一条数据没有修改,其实这个是另外一个事务新添加的,就好像产生幻觉一样,这就是幻读.
2.1READ_uncommitted(读未提交)
在事务中的修改还没有提交就被另一个事务读取了,
2.2READ_COMMITED(读已提交)
在一个事务中只能读取到另一个事务已经提交的数据.
2.3REPEATABLE_RED(可重复读)
在同一个事务中多次读取到的记录结果是一致的,mysql是通过mvcc来实现的(多版本控制)
2.4SERIALIZABLE(可串行化)
serializable是最高的隔离级别,他通过强制事务串行执行,避免了幻读的问题.

二…MySQL数据库的存储引擎
mysql常用的执行引擎有InnoDB,MyIsam,MEMORY
1.InnoDB
是数据库默认的存储引擎,支持事务,支持行锁和外键.主要的特点是:
1.1.支持外键完整性约束,存储表中的数据时,每张表的存储都按主键的顺序存放,如果没有显示在表中指定主键,InnoDB会为每一行数据生成一个6字节的ROEID,并以此作为主键.
1.2…frm表的定义文件,.idb数据文件
1.3.count函数扫表
1.4 InnDB的行锁事实现在索引上的,而不是锁在物理行记录上,也就是说没有命中索引,就无法使用行锁,退化成表锁.
2.mylsam
2.1 不支持外键,不支持事务
2.2 .frm表的定义文件,.myd数据文件,.myi索引文件
2.3 count 如果不加where条件直接读取存储的值
2.4 查询效率一般情况下比InnoDB效率要高,因为InnoDB涉及到回表操作
三.sql优化
1.为什么不建议在重复数据较多的字段上加索引?
因为在查询时,非唯一主键索引存的是当前列的值和唯一索引的指向.如果用重复数据较多的字段做查询条件时,获取的数据不是该列所包含的,就要尽行回表获取.导致查询效率变低,还增加了维护索引的成本.
2.什么时候索引会失效?
1.使用 or like % ,对字段进行函数操作,null值判断 都会使索引失效.
2.联合索引遵循最左原理,例如(a,b,c) a|ab|abc都会起作用,而bc不走索引.

三.mysql的事务
1.mysql中存在redo.log负责对数据库的修改,undo.log负责对数据的回滚
2.事务的一个大概执行流程
1.将数据库数据拷贝到undo.log执行修改删除,添加操作后写入redo日志,

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服