目录
一、MySQL事务
1.什么是事务
是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
2.事务的作用
事务的存在可以确保数据操作的正确性和可靠性,保证在操作过程中不会出现异常或错误
3.事务的ACID是什么
ACID是指事务的四个特性
1)原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生
2)一致性:事务执行前后,数据库从一个一致状态转换到另一个状态,保证数据的完整性和准确性
3)隔离性:多个并发事务之间相互隔离,互不干扰,每个事务独立执行,避免数据混乱和不一致
4)持久性:一旦事务提交,其对数据库的修改是永久性的,即使系统发生故障或重启,也不会改数据
4.事务之间相互影响
1.脏读---读到了其他事务未提交的数据
其他事务未提交的数据,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读
2.不可重复读---前后多次读取,数据内容不一致
一个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。
3.幻读---前后多次读取,数据总量不一致
事务B前后两次读取同一范围的数据,后一次读取的总数和前一次不一致,成为幻读
4.丢失更新---同时修改,数据覆盖
同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
5.事务隔离级别
1.read uncommitted--->读取尚未提交的数据--->不解决脏读
安全性最差 但性能最好 (不使用)
2.read committed--->读取已经提交的数据(提交读)--->可以解决脏读
只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别〈不重复读)
安全性较差 性能较好 (oracle 数据库 默认就是这种)
3.repeatable read---重复读取(可重复性)--->可以解决脏读 和 不可重复读
无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响
安全性较高,性能较差 (mysql 默认的就是这种)
4.serializable--->串行化--->可以解决 脏读 不可重复读 和 虚读—相当于锁表
完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。
安全性高 性能差 不使用

6.隔离级别的作用范围
1.全局级:对所有会话有效
2.会话级:只对当前的会话有效
7.查询和设置事务隔离级别
1、查询全局事务隔离级别
show global variables like '%isolation%';
SELECT @@global.tx_isolation;

2、查询会话事务隔离级别
show session variables like '%isolation%';
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;
3、设置全局事务隔离级别
set global transaction isolation level read committed;
4、设置会话事务隔离级别
set session transaction isolation level read committed;
8.事务级别和控制语句


二、存储引擎
1.什么是存储引擎
存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式
2.MySQL常用的存储引擎
1、MyISAM
2、InnoDB
----MyISAM
3.MyISAM特点
1.MyISAM不支持事务,也不支持外键约束,只支持全文索引
2.数据文件和索引文件是分开保存的
3.访问速度快,对事务完整性没有要求
4.MyISAM 适合查询、插入为主的应用场景
4. MyISAM在磁盘存储的扩展名
.frm 文件存储表结构的定义
数据文件的扩展名为 .MYD (MYData)
索引文件的扩展名是 .MYI (MYIndex)
5.MyIsam 是表级锁定,读或写无法同时进行
表级锁定形式,数据在更新时锁定整个表
好处是:分开执行时,速度快、资源占用相对较少(相对)
6.MyISAM 表支持 3 种不同的存储格式
1.静态表(固定长度)
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
2.动态表
动态表包含可变字段(varchar),记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。
3.压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。
7. MyISAM适用的生产场景
适合于单方向的任务场景、同时并发量不高、对于事务要求不高的场景
公司业务不需要事务的支持
单方面读取或写入数据比较多的业务
MyISAM存储引擎数据读写都比较频繁场景不适合
使用读写并发访问相对较低的业务
数据修改相对较少的业务
对数据业务一致性要求不是非常高的业务
服务器硬件资源相对比较差
----InnoDB
1.InnoDB
支持事务处理、外键约束、占用空间比MyISAM大,适用于需要事务处理、更新删除频繁的应用场景
2.特点介绍
3.适用生产场景

4.InnoDB和MyISAM区别
InnoBD支持:事务、mvcc、聚簇索引、外键、缓冲区、AHI、DW;MyISAM均不支持
InnoDB支持:行级锁,MyISAM只支持表级锁;
InnoDB支持:数据热备,可以保证业务正常运行,对业务影响低,MyISAM只支持温备份,需要锁表备份;
InnoDB支持:支持CR自动故障恢复,宕机自动恢复,数据安全和一致性可以得到保证;MyISAM不支持,宕机可能丢失当前数据;

----存储引擎的基本操作

本文详细阐述了MySQL中的事务概念、ACID特性、隔离级别及其应用场景,以及MyISAM和InnoDB这两种常用存储引擎的特点、区别和适用场景,包括事务支持、锁机制、数据恢复等方面。
1704

被折叠的 条评论
为什么被折叠?



