zoukankan      html  css  js  c++  java
  • mysql 核心事务特性

    InnoDB核心特性-事务

    1.什么是事务

    主要针对DML语句(update,delete,insert)
    
    1.一组数据操作执行步骤,这些步骤被视为一个工作单元:
    	1)用于对多个语句进行分组
    	2)可以在多个客户机并发访问同一个表中的数据时使用
    	
    2.所有步骤都成功或都失败
    	1)如果所有步骤正常,则执行
    	2)如果步骤出现错误或不完整,则回滚
    

    2.事务演示

    #1.创建一个表
    mysql> create table jiaoyi(id int,name varchar(10),money int);
    
    #2.插入数据
    mysql> insert jiaoyi values(1,'qiudao',300),(2,'lhd',200);
    
    #3.开启一个事务
    mysql> begin;
    mysql> update jiaoyi set money=400 where id=2;
    mysql> update jiaoyi set money=100 where id=1;
    
    #4.提交事务之前,再开一个窗口查看数据,数据没有发生改变
    mysql> select * from jiaoyi;
    +------+--------+-------+
    | id   | name   | money |
    +------+--------+-------+
    |    1 | qiudao |   300 |
    |    2 | lhd    |   200 |
    +------+--------+-------+
    2 rows in set (0.00 sec)
    
    #5.提交事务
    mysql> commit;
    
    #6.再次到新窗口查看数据
    mysql> select * from jiaoyi;
    +------+--------+-------+
    | id   | name   | money |
    +------+--------+-------+
    |    1 | qiudao |   100 |
    |    2 | lhd    |   400 |
    +------+--------+-------+
    2 rows in set (0.00 sec)
    
    #7.再次开启事务修改数据
    mysql> begin;
    mysql> update jiaoyi set money=-100 where id=1;
    mysql> update jiaoyi set money=600 where id=2;
    mysql> select * from jiaoyi;
    +------+--------+-------+
    | id   | name   | money |
    +------+--------+-------+
    |    1 | qiudao |  -100 |
    |    2 | lhd    |   600 |
    +------+--------+-------+
    2 rows in set (0.00 sec)
    
    #8.结束事务之前,由程序判断,发现money钱数不能为负数,所以这次修改数不符合逻辑,只能回滚
    mysql> rollback;
    mysql> select * from jiaoyi;
    +------+--------+-------+
    | id   | name   | money |
    +------+--------+-------+
    |    1 | qiudao |   100 |
    |    2 | lhd    |   400 |
    +------+--------+-------+
    2 rows in set (0.00 sec)
    

    3.事务的通俗理解

    伴随着“交易”出现的数据库概念。
    
    我们理解的“交易”是什么?
    	1)物与物的交换(古代)
    	2)货币现金与实物的交换(现代1)
    	3)虚拟货币与实物的交换(现代2)
    	4)虚拟货币与虚拟实物交换(现代3)
    
    数据库中的“交易”是什么?
    	1)事务又是如何保证“交易”的“和谐”?
    	2)ACID
    

    4.事务完整流程

    #成功的事务
    begin;
    sql1;
    sql2;
    ....
    commit;
    
    #失败的事务
    begin;
    sql1;
    sql2;
    ....
    rollback;
    

    5.事务的特性(ACID)

    Atomic(原子性)
    所有语句作为一个单元全部成功执行或全部取消。
    
    Consistent(一致性)
    如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
    
    Isolated(隔离性)
    事务之间不相互影响。
    
    Durable(持久性)
    事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
    

    6.事务的控制语句

    #事务常用的语句
    BEGIN:		开始一个新事务
    COMMIT:		永久记录当前事务所做的更改
    ROLLBACK:	回滚当前事务所做的更改
    
    #事务指定回滚
    SAVEPOINT:	分配事务过程中的一个位置,以供将来引用
    ROLLBACK TO SAVEPOINT:取消在 savepoint 之后执行的更改
    RELEASE SAVEPOINT:删除 savepoint 标识符
    
    #自动提交
    SET AUTOCOMMIT:为当前连接禁用或启用默认 autocommit 模式
    

    7.自动提交

    #临时关闭自动提交
    mysql> set autocommit=0;
    
    #永久关闭自动提交
    [root@db01 ~]# vim /etc/my.cnf
    [mysqld]
    autocommit=0
    

    8.隐式提交

    1.现在版本在开启事务时,不需要手工begin,只要你输入的是DML语句,就会自动开启事务。
    2.有些情况下事务会被隐式提交
    	1)在事务运行期间,手工执行begin的时候会自动提交上个事务
    	2)在事务运行期间,加入DDL、DCL操作会自动提交上个事务
    	3)在事务运行期间,执行锁定语句(lock tables、unlock tables)
    	
    	4)load data infile
    	5)select for update
    
  • 相关阅读:
    android一个纠结的VFY错误
    icon在线编辑和查找工具
    增加Android可用内存
    android对大图片的缓存处理
    MySQL sql语句大全
    Canvas
    Docker 微服务教程
    Docker 入门教程
    项目管理
    JavaScript standard 代码规范的全文
  • 原文地址:https://www.cnblogs.com/xiaolang666/p/13897561.html
Copyright © 2011-2022 走看看