MySQL事务

一、 DCL:数据控制语言(Data Control Language )

​ 一般包括管理用户,授权,事务相关操作。

二、事务

  1. 概念:指的是一个或一组sql语句组成的一个执行单元,这个执行单元要么全部执行,要么全部不执行。

  2. 事务的特性:(ACID)

    1. 1 原子性: 一个事务不可在分割,要么全部执行要么全部不执行。

    2. 2 一致性: 一个事务执行完毕,数据在执行完毕的前后的整体状态是不变的。比如银行转账,转账的操作成功之后,两个账户的金额之和是不变的。

    3. 3 隔离性: 一个事务执行不受其它事务的干扰。

    4. 4 持久性: 一个事务一旦提交,则会永久性的改变数据库的数据。

三、事务的创建

  1. 隐式事务:事务没有明显的开启或者结束的标记。

    如:insert、update、delete语句就是自动会开启事务,并且自动提交。

    delete from 表 where id = 1;
    
  2. 显示事务:事务具有明显的开启和结束的标记

    前提:必须先设置自动提交事务功能为禁用。

    #设置自动提交为禁用
    SET AUTOCOMMIT = 0;
    
    #步骤1:开启事务
        set autocommit=0;
        start transaction; #可选的
    #步骤2:编写事务中的sql语句(select insert update delete)
        语句1;
        语句2;
        ...
    #步骤3:结束事务
        commit;提交事务
        rollback;回滚事务
    
    #设置保存点
    savepoint 节点名;
    

四、事务的隔离级别

  1. 事务操作产生的几种严重的数据问题:

    1. 1 脏读:一个事务读取了另一个未提交事务修改的数据,如果事务提交失败,则读到的就是一个不存在的脏数据。

    2. 2 不可重复读:一个事务读取了另一个已提交事务修改的数据,当进行了多次事务提交时,之前的事务中发现每次读取的数据都是不一样的。所以这就是不可重复读的问题。

    3. 3 幻读:一个事务读取了另一个已提交事务添加的数据,导致原本没有的数据后来又被读出来了。就像幻觉一样,称之为幻读。

  2. MySQL中事务的隔离级别为:

    1. 1 read uncommitted : 读 未提交

    2. 2 read committed : 读 已提交

    3. 3 repeatable read:可重复读

    4. 4 serializable :序列化

  3. 事务隔离级别与数据问题的关系

    		  			脏读		不可重复读	幻读
    read uncommitted:	√		√			√
    read committed:  	×		√			√
    repeatable read: 	×		×			√
    serializable	  	 ×       ×       	 ×
    
    

五、其它操作

  1. 查看事务隔离级别

    #mysql中默认 第三个隔离级别 repeatable read
    #oracle中默认第二个隔离级别 read committed
    SELECT @@tx_isolation;
    
  2. 设置隔离级别

    set session|global transaction isolation level 隔离级别; #在dos窗口使用
    #简便写法
    SET tx_isolation = 'read-committed'; #客户端可是这样设置
    
  3. 事务的使用步骤

    #1.演示事务的使用步骤
    
    #开启事务
    SET autocommit=0;
    START TRANSACTION;
    #编写一组事务的语句
    UPDATE account SET balance = 1000 WHERE username='张无忌';
    UPDATE account SET balance = 1000 WHERE username='赵敏';
    
    #结束事务
    ROLLBACK;
    #commit;
    
    #2.演示事务对于delete和truncate的处理的区别
    
    SET autocommit=0;
    START TRANSACTION;
    
    DELETE FROM account;
    ROLLBACK;
    #区别:delete可以进行rollback回滚,truncate不能。
    
    
    #3.演示savepoint 的使用
    SET autocommit=0;
    START TRANSACTION;
    DELETE FROM account WHERE id=25;
    SAVEPOINT a;#设置保存点
    DELETE FROM account WHERE id=28;
    ROLLBACK TO a;#回滚到保存点
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值