数据库零基础之---了解数据库的事务[ACID]
事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功。
我们先举一个例子来描述一下事务:
假设要张三通过银行给李四进行转账1000元钱,张三原有余额10000元整,李四有人民币3000元整。
以下是操作流程:
时间 t1 检查张三余额是否够转账
时间 t2 从张三中扣除1000元
时间t3 在李四的账户中添加1000元
在上述的步骤的操作必须打包在一个事务-转账,我们可把它描述为这个事务程序:
t0 开始事务
t1 SELECT balance FROM account_tab WHERE account_name='张三'' ;
t2 UPDATE account_tab SET balance=balance-1000 WHERE account_name='张三'' ;
t3 UPDATE account_tab SET balance=balance+1000 WHERE account_name='李四'' ;
t4 COMMIT;
我们假设在t3李四的账户中添加1000元发生失败,则这次转账业务失败,我们需要数据回滚到最初始状态。
将扣除的1000元钱回滚给张三的账户,否则后果不堪设想。
要满足事务开发中的准确性,那么在数据库事务程序不可不理解事务的四大特性【ACID】
- 原子性(atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对一个事务来说,不可能
只执行其中的一部分操作,这是事务的原子性。
- 一致性(consistency)
数据库总数从一个一致性的状态转换到另外一个一致性状态。以转账为例,如果在t3出现错误,事务没有提交,所欲事务做的修改就不会保存到数据库。确保了数据的一致性。
- 隔离性(isolation)
通常说,一个事务所做的修改在最终提交前,对其它事务不可见的。它由一些隔离机制来控制。
- 持久性(durability)
一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统奔溃,修改的数据也不会丢失。
在四大特性中影响我们开发的主要以隔离性为主,接下来我们看看数据库的隔离性:
脏读(读取未提交数据)READ UNCOMMITED
在事务的修改即使没有提交也是对其它事务可见的。事务可以读取未提交的数据。这个级别的事务隔离会导致很多问题。
B事务读取A事务尚未提交的数据,此时如果A事务发生错误并执行回滚操作,那么A事务读取到的数据就是脏数据。举例如下
不可重复读
两次读取的内容不一致
幻读
当某个事务在读取某个范围内的记录时另外一个事务对该范围内插入了新的记录。
“不可重复读“和“幻读”的区别
- 不可重复读是读取了其他事务更改的数据
- 幻读是读取了其他事务新增的数据
数据库零基础之---了解数据库的事务[ACID]的更多相关文章
- 数据库开发基础 SQL Server 数据库的备份、还原与分离、附加
认识数据库备份和事务日志备份 数据库备份与日志备份是数据库维护的日常工作,备份的目的是 一.在于当数据库出现故障或者遭到破坏时可以根据备份的数据库及事务日志文件还原到最近的时间点将损失降到最低点 二. ...
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 2020年数据库概念与MySQL的安装与配置-从零基础入门MySQL-mysql8版本
作者 | Jeskson 来源 | 达达前端小酒馆 从零基础入门MySQL数据库基础课 数据的概念,简介,安装与配置,Windows平台下MySQL的安装与配置. 数据库的概念:数据库是一个用来存放数 ...
- Java应用程序连接数据库--JDBC基础
Java应用程序连接数据库--JDBC基础 Java应用程序连接数据库–JDBC基础 <!-- MySQL驱动,连接数据库用,由数据库厂商提供 --> <dependency&g ...
- ylb: 数据库操作方法基础
ylbtech-SQL Server:SQL Server-数据库操作方法基础 数据库操作方法基础. ylb: 数据库操作方法基础 返回顶部 ----------试图操作(view)--------- ...
- Sql基础(零基础学数据库_SqlServer版)
刚开始学C#时候的笔记,只是些基础的语句如有错误请批评指正,谢谢,(使用SqlServer2012以上) 一. 数据库概述 SQI全称 structrued Query Language 1.数据: ...
- 数据库MySQL(带你零基础入门MySQL)
(一)认识数据库 redis默认端口:6379 mysql默认端口:3306 什么是数据库? 数据库的英文单词:data base,简称DB. 数据库实际上就是一个文件集合,是一个存储数据的仓库,本质 ...
- 🚴♂️全套MySQL数据库教程_Mysql基础入门教程,零基础小白自学MySQL数据库必备教程☔ #002 # 第二单元 MySQL数据类型、操作表#
二.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.Mysql的数据类型2.如何选择数据类型3.创建表4.修改表5.删除表 (Ⅱ)能力目标 1.熟练创建数据库及删除数据 ...
- 零基础学Python--------第11章 使用Python操作数据库
第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...
随机推荐
- 定时器:Django-crontab
定时器是平时编程中比较常用的,今天分享一个Django里非常好用又简单的定时亲:Django-crontab.这个真的是非常的简单好用,比celery+Django执行周期任务简单的多 首先下载dja ...
- 第8.31节 Python中使用__delattr__清除属性数据
一. 引言 在前面几节我们介绍了__ getattribute__方法和__setattr__方法,分别实现了实例属性的查询和修改(含定义即新增),作为Python中数据操作必不可少的三剑客get.s ...
- pandas 标签映射成数值的几种方法
1. preprocessing.LabelEncoder() import pandas as pd from sklearn import preprocessing le = preproces ...
- ASP.NET Log4net数据库日志新增记录客户端ip
LOG4数据库记录器XML配置 1 <appender name="ADONetAppender" type="log4net.Appender.ADONetApp ...
- C# operator 关键字的用法
operator 只要是运算符都能重载 operator 关键字的主要作用是用来重载运算符的,还可以用于类或结构中类型的自定义转换. 下面看个例子 class Feige { //定义两个全局变量 i ...
- git使用-merge request开发操作步骤
0. 如果当前不在develop分支,则切换到develop分支 git checkout develop 1. 获取develop分支最新代码 git pull 注意:这一步正常来说应该是一个Fas ...
- Springboot mini - Solon详解(二)- Solon的核心
Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...
- SpringBoot使用Mybatis-plus及分页功能的细节部分
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- Python3中zipfile模块文件名乱码问题
inux下zip文件乱码已经是一个常见问题了,再加上python想不遇到乱码问题都难. 在zipfile.ZipFile中获得的filename有中日文则很大可能是乱码,这是因为 在zip标准中,对文 ...
- Anno 让微服务、混合编程更简单(Net love Java)
在社区或者QQ群我们经常看到有人争辩编程语言的好坏,只要一提起这个话题常常就能引来很多人参与,往往最后就变成了一群人几个小时的骂战.今天我们要说的是如何让Java和.Net(甚至更多语言)相结合.充分 ...