1.表空间

支持两类表空间:共享、独立表空间
5.5版本:    默认共享表空间模式,包含了数据字典,undo,tmp,用户表数据和索引
5.6版本:    默认独立表空间模式,包含数据字典,undo,tmp,将用户数据和索引独立,每个表单单独存储
5.7版本:    默认独立表空间模式,包含数据字典,undo,tmp被独立,将用户数据和索引独立,每个表单单独存储
8.0版本:    默认独立表空间模式,数据字典被取消,undo独立,tmp独立 ,将用户数据和索引独立,每个表单单独存储

2.功能名词介绍

transaction                                     事务
undo:ibdata1      				回滚日志/撤销日志
tmp : ibtmp1       				临时表空间
redo: ib_logfile0~N				重做日志
ibd :t1.ibd       				表空间数据文件
InnoDB buffer pool:				数据缓冲区池(70-80%)
log buffer:        				重做日志缓冲区
LSN                				日志序列号/版本号
Trx_id             				事务ID
checkpoint         				检查点

3.事务

1.什么是事务
将多条DML(标准的事务语句),放在一个组中运行,要么全成功,要么全失败。
oldguo的解释:
    1. 交易?
    以物换物
    货币换物
    虚拟币换物

2.事物ACID特性
A    :原子性    :每一个事务都是一个完整整体,不可再分性。要么全执行成功或者失败
C    :一致性    :在事务发生前,中,后,保证事务操作的数据前后一致
I    :隔离性    :多个事务之间,所作的操作互不干扰,不能同时更新同一行数据
D    :持久性    :事务完成之后,所涉及的数据,必须永久有效(落地)

3.事务的生命周期管理
(1)开启一个事务
begin/    start transaction;

(2)标准的事务语句
insert
update
delete

(3)结束事务
commit;        #提交事务
rollback;      #回滚事务

非标准的事务生命周期
(1)自动提交机制
MySQL 5.6 以后:
1.begin子句会自动添加
2.每条语句执行完成之后都会自动提交


说明:默认情况下,开启事务时不加begin,逐条自动提交,手动开启begin命令,按照正常事务工作过程

(2)隐式提交
用于隐式提交的 SQL 语句:
begin 
a
b
begin
SET AUTOCOMMIT = 1
导致提交的非事务语句:
DDL语句: (ALTER、CREATE 和 DROP)
DCL语句: (GRANT、REVOKE 和 SET PASSWORD)
锁定语句:(LOCK TABLES 和 UNLOCK TABLES)
导致隐式提交的语句示例:
TRUNCATE TABLE
LOAD DATA INFILE
SELECT FOR UPDATE

(3)隐式回滚
数据库重启
会话断开
死锁

4.事务底层的工作过程

1.redo
分布:
    内存区域:log buffer
    磁盘区域:id_logfile0~N

功能:
    1.保存内存数据页的变化
    2.commit时,实现事务的快速持久化的特性:量少,顺序IO
    3.宕机时,通过redo实现重做事务,将数据库恢复到宕机之前,我们把这步称之为 ACSR 中的“前滚” 操作

2.undo 回滚日志
分布:    默认 ibdate1, 5.7 开始独立undo, 8.0后自动独立

功能:    
    1.保存当前事务操作的反操作
    2.在执行rollback命令时,undo提供回滚操作,在ACID中主要实现A的特性,CI也有部分功能
    3.宕机时,ACSR过程中提供回滚操作(将没有commit标记的)
补充:ckpt是将内存中恢复的脏页立马刷新到磁盘中

3.锁 及 隔离级别主要保证隔离性
(1) 锁:
S    : 共享锁,读锁
X    : 排它锁,写锁
IS   : 意向S
IX   : 意向X

其中:S-S    S-IS    兼容
     X和任何锁都不兼容
     IX-IS 不兼容
     X-IS  不兼容
     X-S   不兼容

(2) X 锁的细分
TX    表锁-------> DDL语句(更新表结构)
RX    行锁(记录锁)-------> DML语句(更新数据行)
GAPX(GAP LOCK X)    间隙锁------> 特殊的DML
Next LOCK X-------> 下一键锁定(间隙锁和行锁的结合)


(3)隔离级别    (transaction_isolation)
RU    :读未提交    READ-UNCOMMITTED
RC    :读已提交    READ-COMMITTED
RR    :可重复读    REPEATABLE-READ
SR    :串行化

RU  读未提交可能会出现的问题:
    1.脏读:读到未提交的数据
    2.不可重复的现象
    3.幻读:所谓的幻读,是指在操作表数据时,另外的窗口插入了满足要求的值,却没有被操作。

RC  读已提交  可能会出现的问题
    1.不可重复读
    2.幻读

RR    可重复读
    1.幻读
说明:RR级别下 + GAP + Next lock 可以防止幻读


 

posted on 2019-12-25 10:34  杨港澳  阅读(122)  评论(0)    收藏  举报