美文网首页
mysql(八)

mysql(八)

作者: Freestyle_0f85 | 来源:发表于2019-12-05 17:36 被阅读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;

    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

    image

    WAL:write ahead log
    日志优先写


    image.png
    image.png

    失误日志-undo

    image.png
    image.png

    相关文章

      网友评论

          本文标题:mysql(八)

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