一.事务控制语言(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种事务隔离级别

数据库提供的4种事务隔离级别
隔离级别 描述

READ UNCOMMITTED

读未提交的数据

允许事务读取未被其他事物提交的变更。

脏读,不可重复读和幻读的问题都会出现

READ COMMITTED

读已提交数据

只允许事务读取已经被其它事务提交的变更.

可以避免脏读, 但不可重复读和幻读问题仍然可能出现

REPEATABLE READ

可重复读

确保事务可以多次从一个字段中读取相同的值.在这个事务持续期问,禁止其他事物对这个字段进行更新.可以避免脏读和不可重复读,但幻读的问题仍然存在

SERIALIZABLE

串行化

确保事务可以从一个表中读取相同的行.在这个事务持续期问,禁止其他事务对该表执行插入,更新和删除操作.所有并发问题都可以避免,但性能十分低下.

特点:

  1. Oracle支持的2种事务隔离级别:READCOMMITED,SERIALIZABLE。Oracle 默认的事务隔离级别为: READ COMMITED
  2. 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——事务控制语言相关推荐

  1. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...

    一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...

  2. MySQL-7 DDL约束 标识列 TCL事务控制语言 视图view

    文章目录 DDL语言 常见约束 约束分类 添加约束的时机 创建表时添加约束 通用写法 修改表时添加约束 修改表时删除约束 主键和唯一的对比 外键约束 案例讲解常见约束 标识列 TCL事务控制语言 事务 ...

  3. DCL(数据控制语言)和TCL(事务控制语言)

    文章目录 1.DCL(数据控制语言) 2.TCL(事务控制语言) 3. 其他常用sql语句 1.DCL(数据控制语言) DCL主要用来管理数据库用户以及用户涉及的权限 1.1 创建数据库中的新用户 语 ...

  4. 十八、MySQL之TCL事务控制语言(详解)

    TCL : Transaction Control Language 事务控制语言 零.MySQL 中的存储引擎 1.概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中. 2.通过sho ...

  5. MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读

    #TCL事物控制语言 : /*   Transaction control language : 事物控制语言   事务:     一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...

  6. MySQL_TCL事务控制语言_刘锋的博客

    文章目录 TCL事务控制语言 一.事务的属性(ACIB) 原子性 一致性 隔离性 持久性 二.事务的创建 隐式的事务 显式的事务 三.事务的隔离级别 脏读: 不可重复度: 幻读: 四.delete和t ...

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

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

  8. SQL事务控制语言(TCL)

    1.什么是事务? 事务(Transaction)是由一系列相关的SQL语句组成的最小逻辑工作单元,在程序更新数据库时事务事关重要,因为必须维护数据的完整性.事务由数据操作语言完成,是对数据库所做的一个 ...

  9. 第五章 事务控制语言(Transaction Control Language,TCL)

    事务 事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的.而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚.所 ...

最新文章

  1. SpringBoot项目的几种创建方式,启动、和访问
  2. [转] vim 正则表达式 很强大
  3. linux显卡驱动版本最好,Linux 用户如何安装 Nvidia 331.67 显卡驱动稳定版本
  4. Android 广播机制以及用法详解 (转)
  5. ubuntu安装python_使用WSL在Windows上搭建Python开发环境
  6. 他说,编程的黄金时代已到
  7. tomcat配置管理员帐号密码
  8. 如何求一个平面区域中心点问题--编程实现
  9. 连接远程计算机提示:“这可能是由于CredSSP加密数据库修正” 问题
  10. 大数据与认识论一、主体与对象
  11. 深度学习系列37:CLIP模型
  12. MySQL 数据库去重处理(小白)
  13. IBM X3650 M4安装win 2008 Server操作指南
  14. pdf加密如何解除?pdf转换器有什么用?
  15. POI之PPT中生成表格简单实例
  16. Vuex实战项目—ToDoList代码及流程详解
  17. ppt模板怎样用到html中,PPT如何使用在线模板制作精美页面
  18. Java 遍历List的4种方式
  19. 移动U盘文件误删怎么恢复
  20. 键盘上的双引号变成@了

热门文章

  1. 68 道Redis面试题
  2. ELK下Elasticsearch优化
  3. CentOS 7.3:LAMP 动静分离部署
  4. I have no name !;sudo: unknown uid 1000: who are you?
  5. 关于JS特效的兼容问题。
  6. linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
  7. 解决Python开发中,Pycharm中无法使用中文输入法问题
  8. Hadoop相关问题解决
  9. WIN10安装VS2013出现兼容性问题解决
  10. 【vue】---vue中使用async+await出现的问题及解决方案