目录

一. MySQL事务

1.事务的概念

2.事务的ACID特点

2.1原子性

2.2一致性

2.3隔离性

2.4持久性

3. 事务之间的相互影响

4.MySQL事务隔离级别

4.1查询全局事务隔离级别

4.2查询会话事务隔离级别

4.3设置全局事务隔离级别

4.4设置会话事务隔离级别

5.事务控制语句

5.1测试提交事务

5.2测试回滚事务

5.3测试多点回滚

5.4使用set设置控制事务

二.MySQL存储引擎

1. MyISAM存储引擎

2.MyISAM引擎特点

3.MyISAM引擎使用场景

4. MyISAM 表支持 3 种不同的存储格式

三.InnoDB

1.支持事务,支持4个事务隔离级别(数据不一致问题)

2.读写阻塞与事务隔离级别相关

3.对硬件资源要求还是比较高的场合

4.InnoDB 中不保存表的行数

5、InnoDB

5.1 死锁

5.2 怎么解决死锁


一. MySQL事务

1.事务的概念

(1)是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行

(2)是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元

(3)适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等

(4)通过事务的整体性以保证数据的一致性

2.事务的ACID特点

ACID是衡量事务的四个特性

原子性(Atomicity,或称不可分割性)

一致性(Consistency)

隔离性(Isolation)

持久性(Durability)

2.1原子性

(1)指事务是一个不可在分割的工作单位,事务中的操作要么都发生要么都不发生

(2)事务中的所有元素必须作为一个整体提交或回滚

(3)如果事务中的任何元素失败,则整个事务将失败

2.2一致性

(1)当事务完成时,数据必须处于一致状态

(2)在事务开始前,数据库中存储的数据处于一致状态在

(3)正在进行的事务中,数据可能处于不一致的状态

(4)当事务成功完成时,数据必须再次回到已知的一致状态

2.3隔离性

指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

(1)对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。

(2)修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。

2.4持久性

(1)指不管系统是否发生故障,事务处理的结果都是永久的。

(2)一旦事务被提交,事务的效果会被永久地保留在数据库中。

3. 事务之间的相互影响

(1)脏读:即读取未提交数据,脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据,读到了不一定最终存在的数据,这就是脏读。

(2)不可重复读:在事务A中先后两次读取同一个数据,两次读取的结果不一样,这种现象称为不可重复读。脏读与不可重复读的区别在于:前者读到的是其他事务未提交的数据,后者读到的是其他事务已提交的数据。

(3) 幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读。不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了。

(4) 丢失更新: 两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

4.MySQL事务隔离级别

read_uncommitted (未提交度): 读取尚未提交的数据 :不解决脏读

read_committed(提交读):读取已经提交的数据 :可以解决脏读

repeatable_read:(可重复读):可以解决脏读 和 不可重复读 —mysql默认的

serializable:串行化:可以解决脏读、不可重复读和虚读—相当于锁表

mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed

事务隔离级别的作用范围分为两种:

全局级:对所有的会话有效

会话级:只对当前的会话有效

4.1查询全局事务隔离级别

show global variables like '%isolation%';  #两个%%代表模糊查询

SELECT @@global.tx_isolation;

4.2查询会话事务隔离级别

show session variables like '%isolation%';

SELECT @@session.tx_isolation;

SELECT @@tx_isolation;

4.3设置全局事务隔离级别

set global transaction isolation level serializable;

将全局隔离设置为串行化

串行化:可以解决脏读,不可重复和虚读

4.4设置会话事务隔离级别

set session transaction isolation level read committed;

设置会话隔离级别为read-committed

read-committed:读取已经提交的数据,可以解决脏读

5.事务控制语句

(1)BEGIN 或 START TRANSACTION:显式地开启一个事务。

(2)COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。

(3)ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。

(4)SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个SAVEPOINT;“S1”代表回滚点名称。

(5)ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。

5.1测试提交事务

begin;

update lcdb2 set age=age + 5 where id=1;

select * from lcdb2;

commit;

再次查看提交后发现已经修改完成

5.2测试回滚事务

begin;

update lcdb2 set age=age - 3 where id=2;

select * from lcdb2;

rollback;

5.3测试多点回滚

begin;

update lcdb2 set name=’shabi’ where id=2;

select * from lcdb2;

savepoint s1;

update lcdb2 set habby=‘吃饭’ where id=7;

select * from lcdb2;

savepoint s2;

rollback to s1;

select * from lcdb2;

5.4使用set设置控制事务

在MySQL中,当我们输入命令时,是系统在自动帮我们begin与commit,无需我们手动输入。这是因为MySQL数据库默认设置了自动提交。

#查看Mysql中的AUTOCOMMIT值

show variables like 'autocommit';

#禁止自动提交(状态为OFF)

SET AUTOCOMMIT=0;

#开启自动提交,Mysql默认为1(状态为ON)

SET AUTOCOMMIT=1;

二.MySQL存储引擎

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySql的核心就是存储引擎。

1. MyISAM存储引擎

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。MyISAM主要特性有:

1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持

2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成

3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16

4、最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,一个超过1024字节的键将被用上

5、BLOB和TEXT列可以被索引

6、NULL被允许在索引的列中,这个值占每个键的0~1个字节

7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩

8、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AUTO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快

9、可以把数据文件和索引文件放在不同目录

10、每个字符列可以有不同的字符集

11、有VARCHAR的表可以固定或动态记录长度

12、VARCHAR和CHAR列可以多达64KB

使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名时.MYI(MYIndex)

2.MyISAM引擎特点

1、不支持事务。

2、表级锁定。 即发生数据更新时,会锁定整个表,以防止其他会话对该表中数据的同时修改所导致的混乱。这样做可以使得操作简单,但是会减少并发量。

3、读写互相堵塞。 在MyISM类型的表中,既不可以在向数据表中写入数据的同时另一个会话也向该表中写入数据,也不允许其他的会话读取该表中的数据。只允许多个会话同时读取该数据表中的数据。

4、只会缓存索引,不会缓存数据。 所谓缓存,就是指数据库在访问磁盘数据时,将更多的数据读取进入内存,这样可以使得当访问这些数据时,直接从内存中读取而不是再次访问硬盘。MyISAM可以通过key_buffer_size缓存索引,以减少磁盘I/O,提升访问性能。但是MyISAM数据表并不会缓存数据。

5、读取速度较快,占用资源较少。

6、不支持外键约束。

7、支持全文索引。

3.MyISAM引擎使用场景

1、不需要事务支持的场景。

2、读取操作比较多,写入和修改操作比较少的场景。

3、数据并发量较低的场景。

4、硬件条件比较差的场景。

5、在配置数据库读写分离场景下,MySQL从库可以使用MyISAM索引。

4. MyISAM 表支持 3 种不同的存储格式

1静态(固定长度)表

静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。

2 动态表

动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。

3 压缩表

压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

三.InnoDB

1.支持事务,支持4个事务隔离级别(数据不一致问题)

MySQL从5.5.5版本开始,默认的存储引擎为 InnoDB

之前默认是myisam

2.读写阻塞与事务隔离级别相关

能非常高效的缓存索引和数据

表与主键以簇的方式存储

支持分区、表空间,类似oracle数据库

支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

3.对硬件资源要求还是比较高的场合

行级锁定,但是全 表扫描仍然会是表级锁定,如

update table set a=1 where user like ‘%lic%’;

4.InnoDB 中不保存表的行数

如 select count() from table; 时,InnoDB 需要扫描一遍整个表来计 算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表。对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引。

清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表

5、InnoDB

支持事务,支持4个事务隔离级别(数据不一致问题)
MySQL从5.5.5版本开始,默认的存储引擎为 InnoDB
5.5之前默认是myisam

读写阻塞与事务隔离级别相关
能非常高效的缓存索引和数据
表与主键以簇的方式存储
支持分区、表空间,类似oracle数据库
支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

对硬件资源要求还是比较高的场合
行级锁定,但是全 表扫描仍然会是表级锁定,如
update table set a=1 where user like ‘%lic%’;

InnoDB 中不保存表的行数
如 select count() from table; 时,InnoDB 需要扫描一遍整个表来计 算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count()语句包含 where 条件时 MyISAM 也需要扫描整个表。对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引。

清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表

5.1 死锁

MyISAM:表级锁定
innodb :行级锁定

当两个请求分别访问/读取2行记录,同时又需要读取对方的记录数据,因为(行锁的限制)而造成了阻寨的现象

5.2 怎么解决死锁

企业选择存储引擎依据

业务场景如果并发两大,什么并发量大,读写的并发量大,那我们建议使用innoDB
如果单独的写入或是插入单独的查询,那我们建议使用没有INNODB
表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁:开销大,加锁慢:会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景

支持的字段和数据类型

所有引擎都支持通用的数据类型
但不是所有的引擎都支持其它的字段类型,如二进制对象
锁定类型:不同的存储引擎支持不同级别的锁定

表锁定: MyISAM支持
行锁定:InnoDB支持
索引的支持

建立索引在搜索和恢复数据库中的数据时能显著提高性能
不同的存储弓|擎提供不同的制作索引的技术
有些存储引擎根本不支持索引
事务处理的支持
提高在向表中更新和插入信息期间的可靠性
根据企业业务是否要支持事务选择存储引擎

MySQL的事务和存储引擎相关推荐

  1. mysql支持事务的存储引擎_MySQL基础(三)【MySQL事务与存储引擎】

    3.1-数据库事务 什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前的状态 中间状态对其他连接不可见 事务的基本操作: 基本操作 说明 start transaction 开始 ...

  2. MySQL事务与存储引擎相关设置

    MySQL事务与存储引擎 一.事务的ACID特点 1.原子性 2.一致性 3.隔离性 4.持久性 二.事务之间的互相影响 三.事务的四大隔离 四.事务控制语句 示例 1.开启.提交事务 2.事务回滚 ...

  3. MySQL数据库的索引、事务和存储引擎

    目录 一.索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则 1.4 索引的分类 1.5 索引的创建 1.5.1 普通索引 1.5.2 唯一索引 1.5.3 主键索引 1.5.4 组 ...

  4. MySQL事务与存储引擎

    文章目录 一.MySQL事务 1.事务的概念 2.事务的ACID特点 2.1 原子性(Atomicity) 2.2 一致性(Consistency) 2.3 隔离性(Isolation) 2.4 持久 ...

  5. 数据库之Mysql索引、事务与存储引擎

    目录 1 MySQL索引 1.1 索引的概念 1.2 索引的作用 1.3 创建索引的原则依据 1.4 索引的分类和创建 普通索引 唯一索引 主键索引 组合索引(单列索引与多列索引) 全文索引(FULL ...

  6. 数据库(mysql)之事务和存储引擎

    目录 MySQL事务 一.事务的概念 二.事务的ACID特点 2.1原子性 2.2一致性 2.3隔离性 2.4持久性 三.数据不一致产生的结果 3.1脏读(读取未提交的数据) 3.2不可重复读(前后多 ...

  7. 看完就懂——MySQL索引、事务与存储引擎

    目录 前言 一.索引(index) 1.1 索引的概念 1.2 索引的作用 1.3 索引的优缺点 1.4 索引的分类 1.5 创建索引的原则依据 1.6 创建索引 1.6.1 普通索引 1.6.2 唯 ...

  8. 互联网行业中最常用的数据库——MySQL 索引、事务与存储引擎

    MySQL 索引.事务与存储引擎 一.MySQL 索引 1.1 索引的概念 1.2 索引的作用及缺点 1.2.1 优点 1.2.2 缺点 1.3 创建索引的原则依据 1.4 索引的分类和创建 1.4. ...

  9. MySQL 索引、事务与存储引擎

    目录 一.MySQL 索引 1.索引的概念 2.索引的作用 3.索引的副作用 4.创建索引的原则依据 5.索引的分类和创建 1.普通索引 2.唯一索引 3.主键索引 4.组合索引(单列索引与多列索引) ...

最新文章

  1. C++拾遗(五)语句相关
  2. 钻进眼球的致盲寄生虫威胁近亿人,却只是生存竞争的失败者
  3. HDU 2089 不要62 数位DP
  4. Eclipse GlassFish 5.1就在这里!
  5. kbmmw 5.0 中的REST 服务
  6. 史上最萌最认真的机器学习/深度学习/模式识别入门指导手册(一)
  7. MySQL笔记-CURRENT_TIMESTAMP()和ON UPDATE及索引相关
  8. 【王道操作系统笔记】进程的状态与转换
  9. GHOST恢复盘.维护盘关键词
  10. PTA Python习题 找钱
  11. 华为 应用隐藏大师 计算机,【分享】应用隐藏大师v6.3.1~一键隐藏不想让别人看到的软件...
  12. 轻小说搜索及下载(基于8wenku)-python
  13. Android开发——打包apk遇到The destination folder does not exist or is not writeable
  14. 基于STM8的数字温度计设计
  15. traits简单介绍
  16. php网页可视化调试工具,php-xdebug调试工具
  17. Netty | 开启 Linux 平台下的 Native
  18. python使用pika操作rabbitmq总结(一)
  19. vue3项目名称报错
  20. 知识图谱入门 (七) 知识推理

热门文章

  1. 常用的大功率电阻有哪些,电阻功率降额设计要注意什么
  2. joc杂志影响因子2019_2020 年公布的 SCI 期刊影响因子排名有哪些亮点和槽点?
  3. 重新安装固态硬盘后,然后再安装系统至固态硬盘,为何开机后仍然不能从固态硬盘启动系统?
  4. licenses.licx报-1错误
  5. 图像细化 A fast parallel algorithm for thinning digital patterns
  6. 基于PHP的酒店住宿管理系统毕业设计源码261455
  7. 2009年中国各省人均GDP排名(鄂尔多斯人均GDP将很有可能超过两万美元,全国第一)...
  8. [转]深度学习在目标跟踪中的应用
  9. 天空的心事,只有云懂
  10. 从程序员角度看“上帝“玩游戏