MySQL 事务控制语句(TCL)
什么是事务?
一个或者一组 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; # 回滚事务
数据库的隔离级别
一、并发问题
对于同时运行的多个事务,当这些事务访问数据中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
- 脏读:对于两个事务,T1 和 T2,T1 读取了已经被 T2 更新但还没有被提交但字段,之后如果 T2 回滚,T1 读取但内容就是临时且无效的。(被打钱看见余额后对方又撤回了)
- 不可重复读:对于两个事务 T1 和 T2,T1 读取了一个字段,然后 T2 更新了该字段,之后 T1 再次读取同一个字段,值就不同了。(重在更新)
- 幻读:对于两个事务 T1 和 T2,T1 从一个表中读取了一个字段,然后 T2 在该表中插入了一些新的数据,如果 T1 再次读取同一个表就会多出几行记录。(重在增删)
二、数据库事务的隔离性
数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题。
三、隔离级别
一个事务与其他事务的隔离程度称为隔离级别。数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱。
隔离级别 | 描述 |
---|---|
read uncommitted(读未提交数据) | 允许事务读取未被其他事务提交的变更,脏读、不可重复读和幻读的问题都会出现 |
read commited(读已提交数据) | 只允许 事务读取 已经被其他事务提交 的变更,可以避免脏读,但是不可重复读和幻读问题仍然可能出现 |
repeatable read(可重复读) | 确保事务可以多次从一个字段中读取相同的值,在这个事务持续期间,禁止 其他事务对这个字段进行 更新 ,可以避免脏读和不可重复读,但是幻读的问题仍然存在 |
serializable(串行化) | 确保事务可以从一个表中读取相同的行,在这个事务持续期间,禁止 其他事务对该表执行 更新、删除、插入 操作,所有并发问题都可以避免,但是性能十分低下 |
MySQL 支持上诉四种隔离级别,默认情况下为 repeatable read
。
MySQL 事务控制语句(TCL)相关推荐
- MySQL事务控制语句
在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begin,start transaction,或者执行 set autocommi ...
- MySQL 学习笔记(9)— 事务控制语句、事务属性以及并发和隔离级别
1. 事务概念 事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的 MySQL 操作要么完全执行,要么完全不执行. 下面是关于事务处理需要知道的几个术语: ...
- mysql 事务 数量_MySQL 数据查询语言(DQL) 事务控制语言(TCL)详解
一. 数据查询语言(DQL)(重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...
- mysql begin rollback_事务控制语句,begin,rollback,savepoint,隐式提交的SQL语句
事务控制语句 在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作.因此开始一个事务,必须使用BEGIN.START TRANSACTION,或者执行SE ...
- MySQL(InnoDB剖析):42---事务之(事务控制语句:begin、commit、rollback、savepoint、transaction)
一.事务的自动提交 默认情况下,没有使用begin显式开启事务,事务都是自动提交的 autocommit变量 该变量用于控制SQL语句是否自动提交(auto commit) 默认值为1,表示自动提交 ...
- php mysql 嫦娥,介绍MySQL和JDBC的事务控制(TCL)
文章目录一.MySQL的事务控制(Transaction Control Language) (1)事务的特性(ACID) (2)MySQL的事务控制 (3)mysql事务演示 二.JDBC的事务控制 ...
- DB-MySQL:MySQL 事务
ylbtech-DB-MySQL:MySQL 事务 1.返回顶部 1. MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人 ...
- ci mysql 事务_MySQL事务-学习笔记
MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...
- mysql事务并发控制_MySQL之事务及并发控制
本节索引: 一.事务Transaction 二.事务的隔离级别 三.并发控制 四.MVCC-多版本的并发控制协议 一.事务 什么是事务? 事务Transactions:一组原子性的SQL语句,或一个独 ...
最新文章
- Django 各类配置选项全集
- codeforces597c[树状数组+dp]
- 概率论与数理统计(三)
- 怎样能用计算机打出表白数字,怎么用数字表白?盘点数字表白暗语
- 我一哥们,在东莞和五名女孩被抓了.....
- spss非线性回归分析步骤_SPSS与简单线性回归分析
- BOM之navigator对象和用户代理检测
- LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
- 调整eclipse、SpringToolSuite4编辑器的内存大小以及显示
- tcp udp区别优缺点_TCP和UDP的区别
- UVALive 3211 Now or Later (2-SAT)
- mysql日期教程_MySQL日期函数详解
- vue element 调用后台下载文件
- HTTP 接口测试的流程
- android dagger2 讲解,dagger 2 详解
- 计算机英语的四种变量,计算机英语:BASIC语言变量
- Python手写强化学习Q-learning算法玩井字棋
- python+flask+html/css+mysql+BAE 打造CSDN简历自动生成系统(附网站完全源码)
- s3c2440移植Linux内核,移植Linux-3.4.2内核到S3C2440
- 华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;百度网盘下线SVIP会员免第三方广告特权;一加宣布与OPPO合并...