MySQL-innodb-事务
事务主要针对DML语句
事务都是伴随着交易出现的
将一个执行的单元,划分为几个步骤
mysql> create table jiaoyi(name varchar(10),money int);
事务中执行的SQL语句,要么全部成功,如果有一条失败,则全部回滚。
事务的特性
A:原子性,将一个事务视为一个单元,要么全部成功(commit),要么全部失败(rollback)
C:一致性,在事务执行前后,数据保持一致
I:隔离性(隔离级别),事务和事务之间没有任何影响,完全隔离
D:持久性,事务执行结束后,commit的那一刻,写入磁盘,永久保存。
事务的生命周期
成功的事务:
begin;
SQL1
SQL2
SQL3
...
commit;
失败的事务:
begin;
SQL1
SQL2
SQL3
...
rollback;
image事务的控制语句
#START TRANSACTION(或 BEGIN)# 开始一个新事务
mysql> start transaction;
mysql> select * from jiaoyi;
#SAVEPOINT #分配事务过程中的一个位置,以供将来引用
mysql> savepoint angzang;
#COMMIT #永久记录当前事务所做的更改
#ROLLBACK #取消当前事务所做的更改
#ROLLBACK TO SAVEPOINT #取消在 savepoint 之后执行的更改
mysql> rollback to savepoint angzang;
#RELEASE SAVEPOINT #删除 savepoint 标识符
#SET AUTOCOMMIT #为当前连接禁用或启用默认 autocommit 模式
事务的隐式提交
在MySQL5.6,不需要手动执行begin;只要执行DML语句,会自动开启一个事务
update、insert、delete
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
[root@db01 data]# vim /etc/my.cnf
autocommit=0
[root@db01 data]# /etc/init.d/mysqld restart
Shutting down MySQL.... SUCCESS!
Starting MySQL.. SUCCESS'
面试题
begin;
update
create database
update
select
insert
begin;
update
commit;
1.在事务执行期间,如果执行begin或者 start transaction会自动提交上一个事务,并且开启新的事务
2.在事务执行期间,如果运行了DDL和DCL都会自动提交事务
3.在事务执行期间,执行lock table 或者 unlock table 也会自动提交事务
4.导出数据 load data infile ,会自动提交事务
5.在事务执行期间,执行select for update,会自动提交事务
6.在autocommit=1的时候,会自动提交事务
事务日志-redo
imageWAL:write ahead log
日志优先写
image.png
image.png
失误日志-undo
image.pngimage.png
网友评论