MySQL事务管理和存储引擎

MySQL架构

1MySQL的逻辑视图

 
MySQL的存储引擎架构可以将查询处理和服务器任务与数据的存储/提取相分离

第一层的主要作用是提供客户端和数据库之通信服务,例如连接处理

授权处理、安全认证等。

第二层是MySQL的核心。它提供了查询解析、优化缓存内建函数(日期、时间);同时各种的存储引擎提供的功能也在这一层体现,如存储过程、触发器、视图功能。

第三层是MySQL的存储引擎,存储引擎主要负责存储和提取所有存放在MySQL中的数据。在存储引擎中,锁管理是个非常重要的议题,常见的锁测量有表锁行锁,行锁已经在InnoDBFalcon存储引擎中已经实现。整个逻辑框图除存储引擎之外的部分都可以看做是服务器层。

2、事务管理

简而言之事物管理就是ACID的概念。

A:Atomicity原子性:一个事物需要被视为不可分割的一部分,整个事物包含的业务逻辑需要确保全部执行或全部回滚。

C:Consistency 一致性:数据库执行事物从一个状态到另外一个状态的转换,当事物操作失败时不会导致原有数据的丢失或改变。

I:Isolation 隔离性:是指事物的不可见性,当一个正在执行的事务正在执行时,中间结果对其他数据库用户不可见。

D:Durability 持久性:一旦一个事物执行完毕,那么数据库中已经改变的数据是永久存在的。

3 数据库的隔离级别

Read Uncommitted 读取未提交,一个事物在未提交之前其结果不能被其他用户可见,比如A用户修改了表user中某行记录的名词,在未提交事物之前,其它用户看到该行记录的名词任然是之前的名称,读取未提交是数据又称之为脏的读。

Read Committed 读取已提交,一个事务从开始到结束之间的任何中间结果都是不可见的,除非已经提交。用户查看同一语句的结果可能不同,又称之为不可重复读。

Repeatable Read 可重复读,它确保了同一个事务的多个实例并发读取数据时,看到相同的结果,但如果有其它事务插入数据,用户在读取数据时会有幻影行,幻读。

MySQL默认的隔离级别是读未提交,也是最低的隔离级别

例如可以通过如下语句查询:

Select @@tx-isolation;

也可通过如下的命令设置隔离级别:

Set session transaction isolation level read commtted

MySQL事务管理是在存储引擎实现的,因此MySQL存储引擎的不同也体现在存储引擎是否支持事物操作,例如InnoDB是支持事物操作的而MyISAM是不支持事物操作的。

3、常见的存储引擎

如何查看一个表的使用何种存储引擎可以通过如下命令

Show table status like ‘表名’;

MyISAM存储引擎

一般来讲,该引擎将每个表存储成两个文件:数据文件索引文件,分别为后缀为.MYD.MYI格式的文件。MyISAM格式是平台通用的,使用该存储引擎的表可以包含动态行和静态行,可容纳大大小只受限于磁盘空间的大小和操作系统所允许的最大文件大小。MySQL5默认含有可变长定义的MyISAM表可以支持256T的数据处理,并使用6字节的指针记录数据,用户也可在创建表时创建项MAX_ROWS AVG_ROW_LENGTH,用户可以使用该选项创建表的大小。

Create table tablename{

       Id integer not null primary key,

    Des char(18) not null

} MAX_ROW=1000000000 AVG_ROW_LENGTH = 32

查看结果

Show table status like ‘tablename’;

特性:加锁与并发,自动、手工修复,支持全文索引

InnoDB存储引擎

该引擎支持事物,特别是短期处理,不需要回滚的事物,并支持四种事物的隔离级别,但是不能根据排序建立索引,查询速度相对MyISAM比较

猜你喜欢

转载自lovezehui.iteye.com/blog/2096634