李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
其它
正文
MySQL知识总结(一)
Leefs
2020-03-11 PM
1959℃
0条
# MySQL知识总结(一) ### 一、什么是事务? 事务是数据库系统区别于其他一切文件系统的重要特性之一 事务是一组具有原子性的SQL语句,或是一个独立的工作单元 事务要求符合:原子性、一致性、隔离性、持久性 ### 二、事务四大特性 > + 1.原子性:不可分割的操作单元,事务中所有 操作,要么全部成功;要么撤回到执行事务之前的状态 > + 2.一致性:如果在执行事务之前数据是一致的,那么在执行事务之后数据库也还是一致的; > + 3.隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 > + 4.持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 ### 三、事务隔离级别 **读未提交:**允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据。 **读已提交:**只能读取到已经提交的数据。 **可重复读:**无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。(MySQL)默认隔离级别 **可串行化:**完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 #### **脏读、幻读、不可重复读** **脏读:**就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。 **不可重复读:**是指一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为不可重复读。(即不能读到相同的数据内容) **幻读:**是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。 | 事务级别 | 脏读 | 不可重复读 | 幻读 | | :------- | :--- | :--------- | :--- | | 读未提交 | √ | √ | √ | | 读已提交 | × | √ | √ | | 可重复读 | × | × | √ | | 可串行化 | × | × | × | ### 四、存储引擎 MyISAM 和 InnoDB区别 1.InnoDB支持事务,MyISAM不支持。 2.MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。 3.InnoDB支持外键,MyISAM不支持。 4.从MySQL5.5.5以后,InnoDB是默认引擎。 5.MyISAM支持全文类型索引,而InnoDB不支持全文索引。 6.InnoDB中不保存表的总行数,select count(*) from table时,InnoDB需要扫描整个表计算有多少行,但MyISAM只需简单读出保存好的总行数即可。注:当count(*)语句包含where条件时MyISAM也需扫描整个表 7.对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。 8.清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。MyisAM使用delete语句删除后并不会立刻清理磁盘空间,需要定时清理,命令:`OPTIMIZE table dept;` 9.InnoDB支持行锁 10.Myisam创建表生成三个文件:`.frm `数据表结构 、 `.myd `数据文件 、 `.myi `索引文件,Innodb只生成一个 .frm文件,数据存放在ibdata1.log 11.现在一般都选用InnoDB,主要是MyISAM的全表锁,读写串行问题,并发效率锁表,效率低,MyISAM对于读写密集型应用一般是不会去选用的。 **应用场景:** > - MyISAM不支持事务处理等高级功能,但它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。 > - InnoDB用于需要事务处理的应用程序,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。 ### 五、CHAR和VARCHAR的区别 > - 1.CHAR和VARCHAR类型在存储和检索方面有所不同 > - 2.CHAR列长度固定为创建表时声明的长度,长度值范围是1到255 > - 3.当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。 ### 六、Mysql中的锁类型 MyISAM支持表锁,InnoDB支持表锁和行锁,默认为行锁 - 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低 - 行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高 *附:参考文章链接https://www.cnblogs.com/hsmwlyl/p/10719152.html*
标签:
MySQL
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/714.html
上一篇
Eureka服务治理简介
下一篇
RPC简介
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
锁
DataX
数学
Sentinel
JavaWeb
序列化和反序列化
数据结构
高并发
Spark Streaming
栈
Hive
LeetCode刷题
查找
散列
NIO
JavaWEB项目搭建
并发线程
Kafka
Typora
微服务
Beego
Livy
持有对象
Eclipse
Hbase
二叉树
Python
Java编程思想
Spark
Flink
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭