MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 :
/*
Transaction control language : 事物控制语言
事务:
一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行;
事务由单独单元的一个或多个SQL语句组成,在这 个单元中,每个MySQL语句是相互依赖的;
处理事务的关键字:
建立事务:
SET autocommit=0;
START TRANSACTION;
结束事务:
commit;
#rollback; #回滚
设置断点:
SAVEPOINT a; #设置一个回滚点
ROLLBACK TO a; #回滚到保存点a
-----------------------
事务的隔离级别中出现的异常:
脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段.
之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段.
之后, T1再次读取同一个字段, 值就不同了.
幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插 入了一些新的行.
之后, 如果 T1 再次读取同一个表, 就会多出几行.
---------------------------
(回滚无效)脏读 幻读 不可重复读
read uncommited : √ √ √
read commited : × √ √
repeatable read : × x √
serializable : x x x
--------------------------
Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。
Oracle 默认的事务隔离级别为: READ COMMITED
Mysql 支持 4 种事务隔离级别. Mysql 默认的事务隔离级别 为: REPEATABLE READ ;
----------------------------
查看隔离级别: (未能实现,找不到该命令!!)
select @@tx_isolation;
设置隔离级别:
set session/global(全库) transaction isolation level 隔离级别; */
#1、通过show engines;来查看mysql支持的存储引擎。
SHOW ENGINES; #Engine Support Comment Transactions XA Savepoints
#InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES #2/演示事务的使用步骤:转账
#(1)建立表
CREATE DATABASE test;
DROP TABLE IF EXISTS account;
CREATE TABLE account(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
balance DOUBLE
);
INSERT INTO account(username,balance)
VALUES('张无忌',1000),('赵敏',1000);
#(2)开启事务,编写一组事务的语句,结束事务COMMIT(提交)
SET autocommit=0;
START TRANSACTION; UPDATE account SET balance =500 WHERE username='张无忌';
UPDATE account SET balance =1500 WHERE username='赵敏'; COMMIT;
SELECT * FROM account;
#---------------------------------
#: 或者使用#rollback 进行回滚,滚回更新前的结果
SET autocommit=0;
START TRANSACTION;
UPDATE account SET balance =1000 WHERE username='张无忌';
UPDATE account SET balance =1000 WHERE username='赵敏'; ROLLBACK;
SELECT * FROM account; #命令行下设置事务最低的隔离级别 : read uncommitted
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
# 结果: Query OK, 0 rows affected (0.00 sec)
#---------------------------
#2.演示事务对delete 和 truncate 的处理的区别
SET autocommit=0;
START TRANSACTION; DELETE FROM account;
#truncate from account; # 事务不支持这种删除!
ROLLBACK; SELECT * FROM account; INSERT INTO account VALUES(25,'qwq',111),(26,'aaa',222);
#3:演示savapoint(保存点) 的使用
SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a; #设置一个回滚点
DELETE FROM account WHERE id=25;
ROLLBACK TO a; #回滚到保存点a SELECT * FROM account;
MySQL进阶15--TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读的更多相关文章
- MySQL(25):事务的隔离级别出现问题之 不可重复读
1. 不可重复读 所谓的不可重复读(Non-Repeatable Read)是指事务中两次查询的结果不一致,原因是在查询的过程中其他事务做了更新的操作. 例如,银行在做统计报表的时候,第一次查询a账户 ...
- mysql的默认隔离级别
原文:https://www.cnblogs.com/rjzheng/p/10510174.html 知识点总结 ------------------------------------------- ...
- (7)MySQL进阶篇SQL优化(InnoDB锁-事务隔离级别 )
1.概述 在我们在学习InnoDB锁知识点之前,我觉得有必要让大家了解它的背景知识,因为这样才能让我们更系统地学习好它.InnoDB与MyISAM的最大不同有两点:一是支持事务(TRANSACTION ...
- MySQL默认隔离级别为什么是RR
曾多次听到“MySQL为什么选择RR为默认隔离级别”的问题,其实这是个历史遗留问题,当前以及解决,但是MySQL的各个版本沿用了原有习惯.历史版本中的问题是什么,本次就通过简单的测试来说明一下. 1. ...
- SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- SQL Server中的事务与其隔离级别之脏读, 未提交读,不可重复读和幻读
原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...
- Java -- JDBC 事务处理, 事务的隔离级别 脏读 不可重复读 等...
1. 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 数据库开启事务命令 •start transaction 开启事务 •Rollback 回滚事务 •Commit ...
- Spring 声明式事务,propagation属性列表及isolation(隔离级别)
Spring 声明式事务,propagation属性列表 TransactionDefinition接口中定义,共有7种选项可用: PROPAGATION_REQUIRED:支持当前事务,如果当前没有 ...
- Confluence设置MySQL数据库报错:必须使用'READ-COMMITTED'作为默认隔离级别。
解决方案: mysql -u root -p123456 SET GLOBAL tx_isolation='READ-COMMITTED'; mysql数据库创建 1.设置mysql隔离级别 SET ...
随机推荐
- Django:将后台返回的数据填充到select下拉框中
select选择框如下: <select data-placeholder="选择项目..." class="form-control" name=&qu ...
- idea删除工作记录
或者
- linux中安装软件的方法
1. apt-get 安装方法ubuntu 世界有许多软件源,在系统安装篇已经介绍过如何添加源, apt-get 的基本软件安装命令是: sudo apt-get install 软件名 2. 编译安 ...
- [ES] - 图形化界面工具
推荐更新: Windows平台为 ElasticSearch 6.x 安装 Head 客户端插件 elasticsearch-head A web front end for an Elasticse ...
- C++ 配置文件解析类 ParseConfig
依赖项: 依赖于 ProcessString 类,可从该篇博客获取「字符串处理类 ProcessString (包含常用字符串处理函数)」 ParseConfig.h //Linux & C+ ...
- 【MIT 6.824 】分布式系统 课程笔记(一)
Lecture 02 Infrastructure: RPC & threads 一.多线程挑战 共享数据: 使用互斥信号量.或者避免共享 线程间协作: 使用channels 或者 waitg ...
- django修改表数据结构后报错的解决办法
1.进入数据库删除app之前创建的表,如果删除有关联的表报错的话可以先删除其他表然后再删除因关联关系删除不了的表 2.删除django_migrations表中对应的app记录,删除命令delete ...
- PAT(B) 1037 在霍格沃茨找零钱(Java)
题目链接:1037 在霍格沃茨找零钱 (20 point(s)) 题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle) ...
- JSON & 虚拟列
什么是虚拟列? 在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Gener ...
- Spring Boot使用@Value注解获取配置文件中的属性
获取配置文件的内容——