什么是事务?

一个或者一组 sql 语句组成一个执行单元,这个执行单元要么全部执行,要么全部都不执行,在这个单元中每个 sql 语句都是相互依赖的。整个单元作为一个不可分割的整体,如果单元中的某条 sql 语句一旦执行失败或者产生错误,整个单元将会回滚。所有受影响的数据将返回到事务开始前的状态,如果单元中的所有 sql 语句均执行成功,则事务被顺利执行。

事务的属性 (ACID)

一、原子性 (Atomicity)

原子性指的是事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

二、一致性 (Consistency)

事务必须使数据库从一个一致性状态变换到另外一个一致性状态。比如,转账前和转账后两个账户的金额是一致性状态。

三、隔离性 (Isolation)

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能相互干扰。

四、持久性 (Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响。

事务的创建

一、隐式事务

事务没有明显的开启和结束的标记,比如 select、insert、update、delete 语句,只要执行这些语句,就相当于开启了一个事务,执行完毕后,事务就提交结束了,一条语句就是一个事务。

二、显式事务

事务具有明显的开启和结束的标记,前提必须设置自动提交功能为禁用 (set autocommit=0)。

书写步骤:

# 步骤1:开启事务
set autocommit = 0;
start transaction;# 步骤2:编写事务中的 sql 语句 (select、insert、update、delete)# 步骤3:结束事务 (提交和回滚二选一)
commit; # 提交事务
rollback; # 回滚事务

数据库的隔离级别

一、并发问题

对于同时运行的多个事务,当这些事务访问数据中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:

  1. 脏读:对于两个事务,T1 和 T2,T1 读取了已经被 T2 更新但还没有被提交但字段,之后如果 T2 回滚,T1 读取但内容就是临时且无效的。(被打钱看见余额后对方又撤回了)
  2. 不可重复读:对于两个事务 T1 和 T2,T1 读取了一个字段,然后 T2 更新了该字段,之后 T1 再次读取同一个字段,值就不同了。(重在更新)
  3. 幻读:对于两个事务 T1 和 T2,T1 从一个表中读取了一个字段,然后 T2 在该表中插入了一些新的数据,如果 T1 再次读取同一个表就会多出几行记录。(重在增删)

二、数据库事务的隔离性

数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。

三、隔离级别

一个事务与其他事务的隔离程度称为隔离级别。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。

隔离级别 描述
read uncommitted(读未提交数据) 允许事务读取未被其他事务提交的变更,脏读、不可重复读和幻读的问题都会出现
read commited(读已提交数据) 只允许 事务读取 已经被其他事务提交 的变更,可以避免脏读,但是不可重复读和幻读问题仍然可能出现
repeatable read(可重复读) 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止 其他事务对这个字段进行 更新 ,可以避免脏读和不可重复读,但是幻读的问题仍然存在
serializable(串行化) 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止 其他事务对该表执行 更新、删除、插入 操作,所有并发问题都可以避免,但是性能十分低下

MySQL 支持上诉四种隔离级别,默认情况下为 repeatable read

MySQL 事务控制语句(TCL)相关推荐

  1. MySQL事务控制语句

    在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begin,start transaction,或者执行 set autocommi ...

  2. MySQL 学习笔记(9)— 事务控制语句、事务属性以及并发和隔离级别

    1. 事务概念 事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的 MySQL 操作要么完全执行,要么完全不执行. 下面是关于事务处理需要知道的几个术语: ...

  3. mysql 事务 数量_MySQL 数据查询语言(DQL) 事务控制语言(TCL)详解

    一. 数据查询语言(DQL)(重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...

  4. mysql begin rollback_事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句

    事务控制语句 在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作.因此开始一个事务,必须使用BEGIN.START TRANSACTION,或者执行SE ...

  5. MySQL(InnoDB剖析):42---事务之(事务控制语句:begin、commit、rollback、savepoint、transaction)

    一.事务的自动提交 默认情况下,没有使用begin显式开启事务,事务都是自动提交的 autocommit变量 该变量用于控制SQL语句是否自动提交(auto commit) 默认值为1,表示自动提交 ...

  6. php mysql 嫦娥,介绍MySQL和JDBC的事务控制(TCL)

    文章目录一.MySQL的事务控制(Transaction Control Language) (1)事务的特性(ACID) (2)MySQL的事务控制 (3)mysql事务演示 二.JDBC的事务控制 ...

  7. DB-MySQL:MySQL 事务

    ylbtech-DB-MySQL:MySQL 事务 1.返回顶部 1. MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人 ...

  8. ci mysql 事务_MySQL事务-学习笔记

    MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...

  9. mysql事务并发控制_MySQL之事务及并发控制

    本节索引: 一.事务Transaction 二.事务的隔离级别 三.并发控制 四.MVCC-多版本的并发控制协议 一.事务 什么是事务? 事务Transactions:一组原子性的SQL语句,或一个独 ...

最新文章

  1. Django 各类配置选项全集
  2. codeforces597c[树状数组+dp]
  3. 概率论与数理统计(三)
  4. 怎样能用计算机打出表白数字,怎么用数字表白?盘点数字表白暗语
  5. 我一哥们,在东莞和五名女孩被抓了.....
  6. spss非线性回归分析步骤_SPSS与简单线性回归分析
  7. BOM之navigator对象和用户代理检测
  8. LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
  9. 调整eclipse、SpringToolSuite4编辑器的内存大小以及显示
  10. tcp udp区别优缺点_TCP和UDP的区别
  11. UVALive 3211 Now or Later (2-SAT)
  12. mysql日期教程_MySQL日期函数详解
  13. vue element 调用后台下载文件
  14. HTTP 接口测试的流程
  15. android dagger2 讲解,dagger 2 详解
  16. 计算机英语的四种变量,计算机英语:BASIC语言变量
  17. Python手写强化学习Q-learning算法玩井字棋
  18. python+flask+html/css+mysql+BAE 打造CSDN简历自动生成系统(附网站完全源码)
  19. s3c2440移植Linux内核,移植Linux-3.4.2内核到S3C2440
  20. 华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;百度网盘下线SVIP会员免第三方广告特权;一加宣布与OPPO合并...

热门文章

  1. Luogu P3373 【模板】线段树 2
  2. Java每天学习一点点 09.10.13
  3. 设计模式学习--工厂模式
  4. Github部署+Hexo搭建免费博客 next主题美化
  5. 【网络安全面试题】——文件目录穿越实现特权文件读取
  6. CTA策略07_MultiTimeframeStrategy
  7. 刚刚人均国民收入突破1万美元,作为打工人的你有感知吗?
  8. JAVA将list2合并到list1_java如何将两个list合并的问题
  9. ajax取消数据获取
  10. python面向对象是什么?面试技巧(三分钟读懂)