MySQL数据库学习笔记(九)—— SQL(事务)

事务的基本介绍
  • 概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
  • 操作
    • 开启事务:start transaction
    • 回滚:rollb
    • 提交:commit
    // 事务管理代码
    // 创建资金表账户
    CREATE TABLE account(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(10),
    	money DOUBLE
    );
    INSERT INTO account (NAME,money) VALUES("zhangsan",1000),("lisi",100);
    SELECT * FROM account; // 查询account表数据
    // 开启事务后一旦发现错误,
    START TRANSACTION;
    // zhangsan转账给lisi
    UPDATE account SET money=money-500 WHERE NAME="zhangsan"; // zhangsan转500
    // 出错了。。。
    UPDATE account SET money=money+500 WHERE NAME="lisi"; // lisi收500
    // 未发现问题,提交事务
    COMMIT;
    // 发现问题,回滚事务到开启事务的点
    ROLLBACK;
    
  • 在MySQL数据库中事务默认提交
    • MySQL数据库中事务默认自动提交,一条(DML)增删改语句会自动提交一次事务
    • 一旦开启事务,那么事务只能手动提交才能保存数据
    • 修改事务的默认提交方式
      • 查看事务的默认提交方式:SELECT @@autocommit;1代表自动提交 0代表手动提交
      • 修改事务的默认提交方式:SET @@autocommit=0;
    • Oracle数据库中事务默认手动提交
事务的四大特征
  • 原子性:是不可分隔的最小操作单位,要么同时成功,要么同时失败
  • 持久性:当事务提交或者回滚后,数据库会持久性的保存数据
  • 隔离性:多个事务之间。相互独立。
  • 一致性:事务操作前后数据总量不变
事务的隔离级别
  • 概念:多个事务之间隔离的,相互独立的。但是多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题
  • 存在的问题:
    • 脏读:一个事务读取到另一个事务中没有提交的数据
    • 不可重复读:同一个事务中两次读取到的数据不一样,也称虚读
    • 幻读:一个事务操作(DML)数据表中所有的记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
  • 隔离级别
    • read uncommitted:读未提交,会产生 脏读、不可重复读、幻读问题
    • read committed:读已提交,会产生 不可重复读、幻读问题(Oracle默认)
    • repeatable read:可重复读,会产生 幻读问题(MySQL默认)
    • serializable:串行化,可以解决所有问题
  • 上述4种隔离级别,从小到大安全性越来越高,效率越来越低
  • 数据库查询隔离级别:select @@tx_isolation
  • 数据库设置隔离级别:set global isolation level 级别字符串
发布了113 篇原创文章 · 获赞 1 · 访问量 935

猜你喜欢

转载自blog.csdn.net/weixin_44876003/article/details/103421858
今日推荐