美文网首页
MySQL事务

MySQL事务

作者: 吃可爱长大鸭 | 来源:发表于2019-12-06 14:04 被阅读0次

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;

事务的控制语句

#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

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="bash" cid="n36" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, &quot;Andale Mono&quot;, &quot;DejaVu Sans Mono&quot;, monospace; margin-top: 0px; margin-bottom: 20px; background: rgb(51, 51, 51); font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">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

image.png

WAL:write ahead log

日志优先写

-rw-rw---- 1 mysql mysql 50331648 12月 5 16:13 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 12月 5 16:13 ib_logfile1

事务日志-undo

img

-rw-rw---- 1 mysql mysql 79691776 12月 5 16:13 ibdata1
-rw-rw---- 1 mysql mysql 52428800 12月 5 15:37 ibdata2

SCR

T4N4F8(K~D(~NS}%DT@1ENG.png

相关文章

网友评论

      本文标题:MySQL事务

      本文链接:https://www.haomeiwen.com/subject/ehosgctx.html