zoukankan      html  css  js  c++  java
  • Mysql事务学习笔记

    1. 什么是事务

    通俗的说就是:保证一组sql语句要么全部执行成功,要么全部失败,不会出现中途失败。
    并不是所有数据库引擎都支持事务,MyISAM就不支持事务。

    例如:收款100,余额+100。若收款操作执行成功后,余额增加的操作却失败了,这就出现了错误。使用事务便可防止这一错误的出现,即保证收款和余额的操作都成功后才提交事务,中途一旦执行失败则放弃此次事务的提交并回滚所有操作。

    2. 特性

    1. 原子性

    一个事务中的所有操作要么全部成功要么全部失败,不会在结束在中途某个环节。若某个操作执行失败则回滚所有操作,还原到这个事务开始前的样子。

    1. 一致性

    一个事务执行之前和执行之后数据库都必须处于一致性状态。在事务执行的过程中,只要事务未提交,就不会改变数据库的状态。提交之后事务已完成,此时数据库状态发生变化。

    1. 隔离性

    事务在执行过程中与外界完全隔离的,即使数据库发生了变更,事务中也获取不到。A 事务对数据库做的变更,在事务未提交之间,数据库中也看不到,B 事务中也看不到。
    隔离性可以防止多个事务并发执行导致数据的不一致。

    1. 持久性

    事务处理结束后,对数据的修改是永久的

    3. 隔离级别

    关于事务的特性中有一项隔离性,而隔离性实际上还可以划分为4个等级,如下:

    1. 读未提交
      一个事务未提交时,它所做的变更可以被其他事务读到。
      最低级别,这将产生4个常见问题(脏读、不可重复读、幻读、丢失更新

    2. 读已提交
      一个事务要提交后,它所做的变更才能被其他事务读到。
      解决了脏读问题,还存在3个常见问题(不可重复读、幻读、丢失更新)

    3. 可重复读
      在开始读取数据(事务开启)时,不再允许修改操作 。
      解决了脏读和不可重复读,还存在2个常见问题(幻读、丢失更新)。

    4. 串行化
      将事务按一定顺序去执行。单个事务对某一行的操作会加锁,在锁释放掉之前,其它的事务都无法对这一行的记录进行操作。必须等之前的事务执行完毕,释放锁。后面的事务又会重新加锁。

    参考:
    MySQL事务之不可重复读问题
    MySQL 什么是事务?

    春花秋月何时了?往事知多少。小楼昨夜又东风,故国不堪回首月明中。 雕栏玉砌应犹在,只是朱颜改。问君能有几多愁?恰似一江春水向东流。
  • 相关阅读:
    OpenCvSharp 识别颜色
    树莓派 Raspberry Pi 4,.net core 3.0 ,Avalonia UI 开发
    iis频繁奔溃,分析dump
    prerender.io 搜索引擎优化 部署成windows服务 实现开机自动开启服务
    ionic3包还原使用yarn命令执行步骤(解决ionic3懒加载报找不到 module的错误)
    firebreath 在谷歌和火狐浏览器下的调试 以及打包
    ASP.NET Web API 2 对 CORS 的支持
    .net mvc通过ucenter和 discuz的整合,nopcommerce ucenter 插件的方式实现
    EF + Mysql
    Jenkins持续集成 & .NET
  • 原文地址:https://www.cnblogs.com/dengxiaobo/p/14776303.html
Copyright © 2011-2022 走看看