MySQL事务与存储引擎

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

目录

一、MySQL事务

1.什么是事务

2.事务的作用

3.事务的ACID是什么

4.事务之间相互影响

5.事务隔离级别

6.隔离级别的作用范围

7.查询和设置事务隔离级别

8.事务级别和控制语句

二、存储引擎

----MyISAM

----InnoDB


一、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不支持,宕机可能丢失当前数据;

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值