1.Mysql数据库引擎是什么?
Mysql数据库引擎就是管理数据的也可以优化数据的一个软件模块,这个模块可以决定存储,索引,更新,以及删除数据还可以影响的数据库的性能,安全和稳定性,Mysql数据库引擎中包含了很多的类型如在Mysql中就有: InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE等等。。
1.Mysql常见的数据库引擎
1.1.lnnoDB
InnoDB是事务型存储引擎, 它提供了可靠的事务处理、高性能和高可靠性。InnoDB通过将数据存储在多个表空间中来提高性能和可靠性,并使用行级锁定来支持高并发访问。InnoDB还提供了支持ACID(原子性、一致性、隔离性、持久性)事务处理的功能,这意味着它可以确保数据被安全地存储并且在发生故障时可以进行恢复。在MySQL数据库系统中,默认存储引擎是InnoDB,因此它是使用MySQL数据库的重要部分。
1.2ACID事务
- 原子性(Atomicity):事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行。
- 一致性(Consistency):在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,数据必须符合数据库的规则。
- 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability):持久性也成为永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久的。
以及4种隔离级别
1.读未提交 (Read Uncommitted) :在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(Dirty Read)
2.读已提交(Read Committed):这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。它满足了隔离的简单定义:一个事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(NonrepeatableRead),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果
3.可重复读(Repeatable Read):这是MySQL的默认事务隔离级别,同一事务的多个实例在并发读取数据时,会看到同样的数据。不过理论上,这会导致另一个棘手的问题:幻读(Phantom Read)。简单的说,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。
4.可串行化(Serializable):这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read Uncommitted | 可能 | 可能 | 可能 |
Read Committed | 不可能 | 可能 | 可能 |
Repeatable Read | 不可能 | 不可能 | 可能 |
Serializable | 不可能 | 不可能 | 不可能 |
什么是脏读,幻读,不可重复读?
1.脏读 :
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
2.不可重复读 :
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
3.幻读:
是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象 发生了幻觉一样。
MyISAM:
MyISAM 是mysql 默认的存储引擎。当create新表时 ,不指定存储引擎时,默认使用它。
每个MyISAM 在磁盘上存储成三个文件 文件名与表名字相同。拓展名分别是 .frm(存储表定义) .MYD(存储数据) .MYI(存储索引),数据和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。
缺点:
- 不能在表损坏后恢复数据
适用场景:
- MyIsam极度强调快速读取
- MyIsam表中自动存储了表的行数,需要时直接获取即可
- 适用于不需要事物支持、外键功能、及需要对整个表加锁的情形
引擎
- 查询存储引擎
show engines;
查看默认的引擎 :
SHOW VARIABLES LIKE 'default_storage_engine';
- 创建表指定存储引擎
在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。
create table t_student( sid int auto_increment primary key, sname varchar(20), sage int default 0 ) engine=MyISAM; #指定存储引擎,例如:MyISAM、InnoDB等等
Support列的值表示某种引擎是否能使用
Support列值 | 含义 |
YES | 表示可以使用 |
NO | 表示不能使用 |
DEFAULT | 表示该引擎为当前默认的存储引擎 |