TCL——事务控制语言
一.事务控制语言(TCL)介绍
1.1 事务
事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一-个不可分割的整体,如果单元中某条SQL语句一且执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。
1.2 存储引擎的概念
在mysql中数据用不同的技术存储在文件或内存中,有些数据存储引擎支持事务,但有些不支持事务
.引擎 | 是否支持mysql | Comment | 是否支持事务 | XA | Savepoints |
---|---|---|---|---|---|
MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
CSV | YES | CSV storage engine | NO | NO | NO |
FEDERATED | NO | Federated MySQL storage engine | |||
PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
MyISAM | YES | MyISAM storage engine | NO | NO | NO |
InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
ARCHIVE | YES | Archive storage engine | NO | NO | NO |
注:标红的是mysql常用的存储引擎
1.3 事务的属性/特性(ACID)
1.3.1 原子性(Atomicity)
原子性是指事务是-一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
1.3.2 一致性(Consistency)
事务必须使数据库从一个一致性状态 变换到另外一个一 致性状态
1.3.3 隔离性(Isolation)
事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事备之间不能互相干扰。
1.3.4 持久性(Durability)
持久性是指-一个事务--旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响
二 .事务的创建
2.1 隐式事务
隐式事务:事务没有明显的开始和结束标记
比如:insert update delete
2.2 显式事务
显性事务:事务具有明显的开始和结束标记
使用前提:必须先设置自动提交功能为禁用
语法:
开启事务的语句sql语句结束事务的语句;
2.2.1 查看事务的开启状态
SHOW VARIABLES LIKE 'autocommit';
注:默认情况下时开启的
2.2.2 创建显式事务的方法
步骤一:开启事务
set autocommit = 0;
start transaction; 可选
步骤二:编写事务中的sql语句(select insert update delete)
语句①;
语句②;
...
步骤三:结束事务
commit;提交事务 或 rollback;回滚事务
2.2.2.1 设置回滚点(SAVEPOINT)
步骤一:开启事务
set autocommit = 0;
start transaction; 可选
步骤二:编写事务中的sql语句(select insert update delete)
语句①;
SAVEPOINT 节点名;
语句②;
...
步骤三:结束事务
rollback to 节点名; 回滚事务
例一:删除id为1和3的数据
注:delete支持回滚, truncate不支持回滚 transaction
三 .数据库的隔离级别
①对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
- 脏读:对于两个事务T1,T2, T1读取了已经被T2更新但还没有被提交的字段.之后,若T2回滚,T1读取的内容就是临时且无效的.
- 不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段.之后,T1再次读取同一个字段,值就不同了,
- 幻读:对于两个事务T1, T2, T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行.之后,如果T1再次读取同一个表,就会多出几行.
②数据库事务的隔离性:
数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别.数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱.
3.1 数据库提供的4种事务隔离级别
隔离级别 | 描述 |
---|---|
READ UNCOMMITTED 读未提交的数据 |
允许事务读取未被其他事物提交的变更。 脏读,不可重复读和幻读的问题都会出现 |
READ COMMITTED 读已提交数据 |
只允许事务读取已经被其它事务提交的变更. 可以避免脏读, 但不可重复读和幻读问题仍然可能出现 |
REPEATABLE READ 可重复读 |
确保事务可以多次从一个字段中读取相同的值.在这个事务持续期问,禁止其他事物对这个字段进行更新.可以避免脏读和不可重复读,但幻读的问题仍然存在 |
SERIALIZABLE 串行化 |
确保事务可以从一个表中读取相同的行.在这个事务持续期问,禁止其他事务对该表执行插入,更新和删除操作.所有并发问题都可以避免,但性能十分低下. |
特点:
- Oracle支持的2种事务隔离级别:READCOMMITED,SERIALIZABLE。Oracle 默认的事务隔离级别为: READ COMMITED
- Mysql支持4种事务隔离级别.Mysql默认的事务隔离级别为: REPEATABLE READ (可重复读)
3.1.1 查看当前数据库的事务隔离级别
①mysql5.x版本
SELECT @@tx_isolation;
②mysql8.x版本
show variables like 'transaction_isolation';
或
select @@transaction_isolation ;
3.1.2 设置数据库事务级别
每启动一个mysql程序,就会获得一个单独的数据库连接,每个数据库都连接有一个全局变量transaction_isolation,表示当前的事务隔离级别
①设置当前mysql连接的隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
② 设置数据库的全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别;
TCL——事务控制语言相关推荐
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...
一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...
- MySQL-7 DDL约束 标识列 TCL事务控制语言 视图view
文章目录 DDL语言 常见约束 约束分类 添加约束的时机 创建表时添加约束 通用写法 修改表时添加约束 修改表时删除约束 主键和唯一的对比 外键约束 案例讲解常见约束 标识列 TCL事务控制语言 事务 ...
- DCL(数据控制语言)和TCL(事务控制语言)
文章目录 1.DCL(数据控制语言) 2.TCL(事务控制语言) 3. 其他常用sql语句 1.DCL(数据控制语言) DCL主要用来管理数据库用户以及用户涉及的权限 1.1 创建数据库中的新用户 语 ...
- 十八、MySQL之TCL事务控制语言(详解)
TCL : Transaction Control Language 事务控制语言 零.MySQL 中的存储引擎 1.概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中. 2.通过sho ...
- MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...
- MySQL_TCL事务控制语言_刘锋的博客
文章目录 TCL事务控制语言 一.事务的属性(ACIB) 原子性 一致性 隔离性 持久性 二.事务的创建 隐式的事务 显式的事务 三.事务的隔离级别 脏读: 不可重复度: 幻读: 四.delete和t ...
- mysql 事务 数量_MySQL 数据查询语言(DQL) 事务控制语言(TCL)详解
一. 数据查询语言(DQL)(重中之重) 完整语法格式: select 表达式1|字段,.... [from 表名 where 条件] [group by 列名] [having 条件] [order ...
- SQL事务控制语言(TCL)
1.什么是事务? 事务(Transaction)是由一系列相关的SQL语句组成的最小逻辑工作单元,在程序更新数据库时事务事关重要,因为必须维护数据的完整性.事务由数据操作语言完成,是对数据库所做的一个 ...
- 第五章 事务控制语言(Transaction Control Language,TCL)
事务 事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的.而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚.所 ...
最新文章
- SpringBoot项目的几种创建方式,启动、和访问
- [转] vim 正则表达式 很强大
- linux显卡驱动版本最好,Linux 用户如何安装 Nvidia 331.67 显卡驱动稳定版本
- Android 广播机制以及用法详解 (转)
- ubuntu安装python_使用WSL在Windows上搭建Python开发环境
- 他说,编程的黄金时代已到
- tomcat配置管理员帐号密码
- 如何求一个平面区域中心点问题--编程实现
- 连接远程计算机提示:“这可能是由于CredSSP加密数据库修正” 问题
- 大数据与认识论一、主体与对象
- 深度学习系列37:CLIP模型
- MySQL 数据库去重处理(小白)
- IBM X3650 M4安装win 2008 Server操作指南
- pdf加密如何解除?pdf转换器有什么用?
- POI之PPT中生成表格简单实例
- Vuex实战项目—ToDoList代码及流程详解
- ppt模板怎样用到html中,PPT如何使用在线模板制作精美页面
- Java 遍历List的4种方式
- 移动U盘文件误删怎么恢复
- 键盘上的双引号变成@了
热门文章
- 68 道Redis面试题
- ELK下Elasticsearch优化
- CentOS 7.3:LAMP 动静分离部署
- I have no name !;sudo: unknown uid 1000: who are you?
- 关于JS特效的兼容问题。
- linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
- 解决Python开发中,Pycharm中无法使用中文输入法问题
- Hadoop相关问题解决
- WIN10安装VS2013出现兼容性问题解决
- 【vue】---vue中使用async+await出现的问题及解决方案