一.innodb的核心特点------事务
1.什么是事务
在一组数据操作执行步骤,这些步骤被视为一个单元,主要针对dml语句(update、delete、insert)
2.事务ACID特性
Atomic(原子性)
所有语句作为一个单元全部成功执行或全部取消。
Consistent(一致性)
如果数据库在事务开始时处于一致状态,则在执行该。
事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
Durable(持久性)
事务成功完成后,所做的所有更改都会准确地记录在
数据库中。所做的更改不会丢失。
3.事务的控制语句
START TRANSACTION(或 BEGIN):显式开始一个新事务
SAVEPOINT:分配事务过程中的一个位置,以供将来引用
COMMIT:永久记录当前事务所做的更改
ROLLBACK:取消当前事务所做的更改
ROLLBACK TO SAVEPOINT:取消在 savepoint 之后执行的更改
RELEASE SAVEPOINT:删除 savepoint 标识符
SET AUTOCOMMIT:为当前连接禁用或启用默认 autocommit 模式
4.事务演示
成功事务
mysql> begin;
mysql> insert into stu(id,name,sex,money) values(,'zhang3','m',), (,'zhang4','m',);
mysql> commit; 事务回滚
mysql> begin;
mysql> update stu set name='zhang3';
mysql> delete from stu;
mysql> rollback;
6.事务自动提交
#查看自动提交
mysql> show variables like 'autocommit';
#临时关闭
mysql> set autocommit=;
#永久关闭
[root@db01 world]# vim /etc/my.cnf
[mysqld]
autocommit=
5.事务隐式提交情况
a)现在版本在开启事务时,不需要手工begin,只要你输入的是DML语句,就会自动开启事务。
b)有些情况下事务会被隐式提交
如下:
在事务运行期间,手工执行begin的时候会自动提交上个事务
在事务运行期间,加入DDL、DCL操作会自动提交上个事务
在事务运行期间,执行锁定语句(lock tables、unlock tables)
load data infile
select for update
在autocommit=1的时候
7.事务日志redo基本功能
a( redo是什么
redo,顾名思义“重做日志”,是事务日志的一种。
b( 作用是什么
在事务ACID过程中,实现的是“D”持久化的作用。
特性:WAL(Write Ahead Log)日志优先写
REDO:记录的是,内存数据页的变化过程
8.redo的工作过程
执行步骤
update t1 set num= where num=;
a)首先将t1表中num=1的行所在数据页加载到内存中buffer page
b)MySQL实例在内存中将num=1的数据页改成num=2
c)num=1变成num=2的变化过程会记录到,redo内存区域,也就是redo buffer page中
提交事务执行步骤
commit;
a)当敲下commit命令的瞬间,MySQL会将redo buffer page写入磁盘区域redo log
b)当写入成功之后,commit返回ok
9.事务日志undo
a( undo 是什么?
undo,顾名思义“回滚日志”,是事务日志的一种。
b( 作用是什么?
在事务ACID过程中,实现的是“A”原子性的作用。当然CI的特性也和undo有关
10.redo和undo的存储位置
#redo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- mysql mysql Aug : ib_logfile0
-rw-rw---- mysql mysql Mar ib_logfile1
#undo位置
[root@db01 data]# ll /application/mysql/data/
-rw-rw---- mysql mysql Aug : ibdata1
-rw-rw---- mysql mysql Aug : ibdata2