事务

事务

  • 事务的基本介绍

    • 概念:如果一个包含多个步骤的业务操作,那么这些操作要么同时成功,要么同时失败

    • 操作:

      • 开启事务
      • 回滚
      • 提交
       CREATE TABLE account (
           id INT PRIMARY KEY AUTO_INCREMENT,
           NAME VARCHAR(10),
           balance DOUBLE
       );
       --添加数据
       
       INSERT INTO account (NAME,balance) VALUES ('zhangsan',1000),('lisi',1000);
       
       SELECT * FROM account;
       
       UPDATE account SET balance = balance - 500 WHERE NAME  = 'zhangsan'
       UPDATE account SET balance = balance + 500 WHERE NAME  = 'lisi'
       --张三给李四转账500元   注意不能用中文名字
       
       UPDATE account SET balance =1000; 
       
       --0.开启事务
       START TRANSACTION;
       --1.张三账户-500
       UPDATE account SET balance = balance - 500 WHERE NAME = 'zhangsan';
       buiu 
       --2.李四账户 +500
       UPDATE account SET balance = balance + 500 WHERE NAME = 'lisi';
       --发现执行没有问题,提交事务
       COMMIT;
       --发现出问题了,回滚事务
       ROLLBACK;
      
      • 在mysql数据库中事务默认自动提交

        • 事务提交的两种方式

          1. 自动提交

            mysql就是自动提交的

            一条DML(增删改)语句会自动提交一次事务

          2. 手动提交

            oracle数据库默认是手动提交事务

            需要先开启事务,在提交

        • 修改事务的默认提交方式:

          查看事务的默认提交方式:SELECT @@autocommit; --1代表自动提交 --0代表手动提交

          修改默认提交方式: SET @@autocommit = 0

  • 事务的基本特征:

    • 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
    • 持久性:当事务提交或回滚后。数据库会持久化保存数据
    • 隔离行:多个事务之间相互独立
    • 一致性:事务操作前后,数据总量不变
  • 事务的隔离级别(了解)

    • 概念:多个事务之间是相互独立的,但是如果多个事务操作同一个数据,则会引发一些问题,设置不同的隔离级别可以解决这些问题

    • 存在问题:

      • 脏读:一个事务,读取到另一个事务中没有提交的数据
      • 不可重复读(虚读):在同一个事务中,两次读取到的数不一样
      • 幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
    • 隔离级别:

      • read uncommitted:读未提交

        产生的问题:脏读,不可重复读,幻读

      • read committed:读已提交(oracle默认)

        产生的问题:,不可重复读,幻读

      • repatable read :可重复读(mysql默认)

        产生问题:幻读

      • serializable:串行化

        可以解决所有问题

      • 注意:隔离界别从小到大,安全越来越高,但是小路越来越低

      • 数据库查询隔离级别

        SELECT @@tx_isolation;

      • 数据库设置隔离级别

        SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值