事务的ACID特性
1、Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消,不能出现中间状态
2、Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态
3、Isolated(隔离性)
事务之间不相互影响
4、Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在数据库中,所做的更改不会丢失
事务的生命周期
1、如何开启事务?
begin / start transaction; 开启命令
2、标准的事务语句
DML: insert update delete
3、事务的结束
commit 提交
rollback 回滚(提交之后无法回滚)
自动提交机制
1、查看当前机制
select @@autocommit; 默认打开
2、在线修改参数
set autocommit=0 (会话级别,只修改当前窗口)
set global autocommit=0 (全局修改,关闭所有会话窗口然后再打开)
永久修改: vim /etc/ny.cnf autocommit=0 重启修改
3、触发隐式提交的情况
(1) begin insert... delete... [commit] begin 重复开启begin会隐式提交
(2) begin insert... delete... [commit] set... set命令会隐式提交
(3)create... DDL语句、DCL语句、锁定语句。 turncate table... load data infile... select for update...
-------------------------------------------------------------------------------------------------------------------------------------------------------
1、概念性名词
redo log: 重做日志
ib_logfile0/ib_logfile1: 默认50M,轮询使用
redo log buffer: redo内存区域
ibd: 存储数据行和索引
data buffer pool: 缓冲区池,数据和索引的缓冲
LSN: 日志序列号
存储再磁盘数据页(ibd),redo log,data buffer pool,redo log buffer。 mysql每次数据库启动,
都会比较磁盘数据页(ibd)和redo log的LSN,必须要求两者LSN一致,数据库才能正常启动
WAL(write ahead log): 日志优先写的方式实现持久化
日志是优先于数据写入磁盘的
脏页: 内存脏页,内存中发生了修改,没写入磁盘之前,我们把内存也称之为脏页
CKPT: checkpoint,检查点,就是将脏页刷写到磁盘的动作
TXID: 事务号,Innodb会为每一个事务生成一个事务号,伴随个整个事务