当前位置: 首页 > news >正文

10.MySQL事务(上)

个人主页:Lei宝啊 

愿所有美好如期而遇


目录

前言:

是什么?

为什么?

怎么做?


前言:

本篇文章将会说明什么是事务,为什么会出现事务?事务是怎么做的?

是什么?

我们以买火车票为例:

首先我们可以肯定的是买票这个动作不止一个人在做,也就是说是许多人并行的,不是串行的。

那么假设我们对买火车票数据库的CURD不加控制:

那么假设就剩一张票,有两个客户同时买票,客户端A买的时候发现还有一张,客户端B也发现还有一张,那么当他们买完之后,数据传回数据库,就会发现一张票被卖了两次。

问题:数据库的CURD要满足什么属性才能解决上述问题?

  • 买票互相之间不能影响
  • 买的票不重复且有效
  • 买前买后状态确定,要么没买上,要么就买上了


接下来解释什么是事务:
事务就是一组SQL语句,这一组语句要么全部执行成功,要么全部失败,他们是一个整体,而且MySQL保证了我们能够达到这样的效果。

并且事务规定不同客户端看到的数据不同,   因为数据库不止一个事务在访问,而有可能多人同时访问一个表数据,我要改,他要查,她要删,对表数据不加保护的话就一定会出问题。

共享表单,几十人同时填写一个表单,一个人在填写自己的那一列时,别人是无法填写的,但是他又可以实时看到别人填写的东西,最重要的是,当你填写后,别人可以删改你填写的,共享表单的数据,谁也可以修改,那最后一定会出问题。

所以买火车票的数据库他一定有保护措施,并不会互相影响,被互相看到,互相删改。

那么他一定满足以下四个属性:

原子性:

一个事务要么就全部完成,要么就全部不完成,在事务执行过程中出现错误时,会回滚到事务开始前的状态,就像没执行过一样。

隔离性:

数据库允许多个并发事务同时对数据修改和读写,隔离性可以防止多个事务并发执行时由于交叉执行而导致的数据不一致。

事务隔离分为四个级别:

  • 读未提交 (read uncommitted)
  • 读提交    (read committed)
  • 可重复读(repeatable)
  • 串行化

持久性:

事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。

一致性:

由前三个属性保证,要求在事务前后,数据库的完整性不能受到破坏,即所有插入的数据都符合我们预设的条件。

为什么?

事务被MySQL编写者设计出来是为了简化我们编程,即不需要我们去考虑各种各样潜在的错误和并发问题,即要么我们操作成功,要么回滚,不用去考虑网络异常等问题,就很方便,因此事务不是天生就有的,本质是为了上层应用而诞生的。

另外,MySQL中只有innodb引擎支持事务,myisam是不支持的。(transaction表示事务)

怎么做?

  • 手动提交
  • 自动提交 

 查看事务提交方式

show variables lile 'autocommit'

 

用set来改变MySQL的自动提交方式

set autocommit = 0;

set autocommit = 1;

 


下节我们将使用一个简单银行用户表来进行事务的手动操作,对比自动和手动操作,对比不同隔离级别。

http://www.lryc.cn/news/217865.html

相关文章:

  • nexus搭建npm私有镜像
  • 智能化的宠物喂食器解决方案
  • java配置GDAL
  • 采购对接门禁系统采购进厂 空车出厂
  • 服务器经常被攻击的原因
  • 子女购买房屋,父母出资的如果父母有关借贷的举证不充分则应认定该出资为赠与行为
  • 【腾讯云HAI域探秘】速通腾讯云HAI
  • R语言爬虫代码模版:技术原理与实践应用
  • 行业观察:数字化企业需要什么样的数据中心
  • PHP依赖注入 与 控制反转详解
  • 算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历
  • 大数据毕业设计选题推荐-旅游景点游客数据分析-Hadoop-Spark-Hive
  • 单片机,0.06
  • [PyTorch][chapter 59][强化学习-2-有模型学习]
  • 【接口测试】HTTP接口详细验证清单
  • ALLRGRO拼板的问题。
  • YOLO算法改进6【中阶改进篇】:depthwise separable convolution轻量化C3
  • 自定义类型枚举
  • PHP foreach 循环跳过本次循环
  • lua-web-utils库
  • 大数据毕业设计选题推荐-热门旅游景点数据分析-Hadoop-Spark-Hive
  • Oracle-执行计划
  • Pytho入门教程之Python运行的三种方式
  • 如何修改docker容器中的MySQL数据库的密码?
  • JOSEF约瑟 数显三相电压继电器 HJY-931A/D 导轨安装
  • 第6章_多表查询
  • 吴恩达《机器学习》4-1->4-5:多变量线性回归
  • 搜索引擎系统简要分析
  • 蓝桥杯(C++ 扫雷)
  • LuatOS-SOC接口文档(air780E)--mobile - 蜂窝网络