My SQL中事务那点事

   日期:2020-08-29     浏览:92    评论:0    
核心提示:My SQL中事务那点事1.定义2.操作3.提交方式4.事务特征(ACID)5.事务的隔离级别5.1 定义5.2 产生问题5.3 隔离级别1.定义也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。2.操作开启事务: start transaction;回滚:rollback;提交:commit;3.提交方式自动提交当我们进行DML(增删改)操作后,mysql默认

My SQL中事务那点事

  • 1.定义
  • 2.操作
  • 3.提交方式
  • 4.事务特征(ACID)
  • 5.事务的隔离级别
    • 5.1 定义
    • 5.2 产生问题
    • 5.3 隔离级别

1.定义

也称工作单元,是由一个或多个SQL语句所组成的操作序列,这些SQL语句作为一个完整的工作单元,要么全部执行成功,要么全部执行失败。在数据库中,通过事务来保证数据的一致性。

2.操作

  1. 开启事务: start transaction;
  2. 回滚:rollback;
  3. 提交:commit;

3.提交方式

  1. 自动提交
    当我们进行DML(增删改)操作后,mysql默认进行自动提交,我们无需commit;来提交。
  2. 手动提交
    这需要我们先开启事务后(START TRANSACTION;),然后执行SQL语句,最后进行提交(commit;)。

    可以查看事务的提交方式:SELECT @@autocommit;
    设置事务手动提交方式:set @@autocommit = 0;
    默认自动提交:@@autocommit = 1;

4.事务特征(ACID)

  1. 原子性(Atomicity)
    事务就像“原子”一样,不可被分割,组成事务的DML操作语句要么全成功,要么全失败,不可能出现部分成功部分失败的情况。
  2. 一致性(Consistency)
    事务使得系统从一个一致的状态转换到另一个一致状态,不论事务的成功还是失败,整个系统处于数据一致的状态。
  3. 隔离性(Isolation)
    一个事务的执行不会被另一个事务所干扰。比如两个人同时从一个账户从取钱,通过事务的隔离性确保账户余额的正确性。
  4. 持久性(Durability)
    也称为永久性,指事务一旦提交,对数据的改变就是永久的,不可以再被回滚。

5.事务的隔离级别

5.1 定义

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

5.2 产生问题

  1. 脏读

    一个事务,读取到另一个事务中没有提交的数据

  2. 不可重复读

    在同一个事务中,两次读取到的数据不一样
    简单来说:
    两个事务都进行了开启,事务①首先进行了select,读出一些数据,然后事务②进行DML操作,已提交,这时事务①再次进行select数据,发现在事务①中,两次提交的数据不一致。

  3. 幻读

    由于mysql不能进行操作实现,大家可能对其理解为两次读取获取的结果集不同,其实更加侧重某一次的的select查询得到的结果无法支撑后续的业务操作。
    简单来说:
    当小王准备去数据库添加一条id为999的数据,他首先应该查询该数据是否存在,经查询不存在,于是他就开始进行插入数据,但是数据已经存在了,无法实现插入的操作,一脸**的小王感觉怀疑人生了,这就发生了幻读。

5.3 隔离级别

隔离级别 脏读 不可重复度 幻读
读未提交 (read uncommitted) 未解决 未解决 未解决
读已提交(read committed) 解决 未解决 未解决
可重复读 (repeatable read) 解决 解决 未解决
可串行化 (serializable) 解决 解决 解决

注意:隔离级别从小到大安全性越来越高,但是效率越来越低

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服