事务隔离级别对事务的影响验证

通过四个操作分别验证,事务隔离级别对事务的影响
    READ UNCOMMITTED:读未提交
    READ COMMITTED:读提交
    REPEATABLE READ:可重读
    SERIALIZABLE:可串行

READ UNCOMMITTED(读未提交)验证:
启动两个终端
事务操作之前的表
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   26 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

终端一和二分别设置隔离级别为READ-UNCOMMITTED
mysql> SET tx_isolation=‘READ-UNCOMMITTED‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@tx_isolation;              
+------------------+
| @@tx_isolation   |
+------------------+
| READ-UNCOMMITTED |
+------------------+

终端一和二分别启动一个事务
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.01 sec)

终端一操作:更改SID为8的用户年龄为50;
mysql> UPDATE students SET Age=50 WHERE SID=8;

终端二操作:查看students表,查看SID号为8的用户年龄为50
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   50 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

终端一操作:撤销更改
mysql> ROLLBACK;
终端二操作:再次查看students表,看到SID为8的用户年龄为26
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   26 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

READ COMMITTED:读提交的影响
终端一和二操作:
mysql> SET tx_isolation=‘READ-COMMITTED‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@tx_isolation;                 
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
终端一和二操作:
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
终端一操作:更改SID为8的用户,年龄为50
mysql> UPDATE students SET Age=50 WHERE SID=8;
终端二查看:students中的SID=8的用户年龄没有更改
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   26 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

终端一操作:提交事务
mysql> COMMIT;
终端二查看:students中的SID=8的用户年龄已经更改

mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   50 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

REPEATABLE-READ验证:
终端一和二操作:
mysql> SET tx_isolation=‘REPEATABLE-READ‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@tx_isolation;                 
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+

终端一和终端二操作:
mysql> START TRANSACTION;

终端一操作:更改SID=8的用户年龄为80
mysql> UPDATE students SET Age=80 WHERE SID=8;
终端二操作:查看Sid=8的用户年龄没有更改
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   31 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+

终端一操作:提交事务
mysql> COMMIT;
终端二操作:查看数据还是31岁
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   31 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+
8 rows in set (0.00 sec)

终端二操作:提交事务查看结果数据以及更改了
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   80 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+
8 rows in set (0.00 sec)

SERIALIZABLE验证:
终端一和二操作:
mysql> SET tx_isolation=‘SERIALIZABLE‘;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@tx_isolation;                 
+----------------+
| @@tx_isolation |
+----------------+
| SERIALIZABLE   |
+----------------+
1 row in set (0.00 sec)

mysql> START TRANSACTION;

终端一操作:
mysql> UPDATE students SET Age=70 WHERE SID=8;
终端二操作:卡住不动了
mysql> SELECT * FROM students;
终端一操作:
mysql> COMMIT;
查看终端二:刚才的查询操作执行完成了,用时43.92秒
mysql> SELECT * FROM students;
+-----+--------------+------+--------+------+------+------+---------------------+
| SID | Name         | Age  | Gender | CID1 | CID2 | TID  | CreateTime          |
+-----+--------------+------+--------+------+------+------+---------------------+
|   1 | GuoJing      |   19 | M      |    2 |    7 |    3 | 2012-04-06 10:00:00 |
|   2 | YangGuo      |   17 | M      |    2 |    3 |    1 | 2012-04-06 10:00:00 |
|   3 | DingDian     |   25 | M      |    6 |    1 |    7 | 2012-04-06 10:00:00 |
|   4 | HuFei        |   31 | M      |    8 |   10 |    5 | 2012-04-06 10:00:00 |
|   5 | HuangRong    |   16 | F      |    5 |    9 |    9 | 2012-04-06 10:00:00 |
|   6 | YueLingshang |   18 | F      |    8 |    4 | NULL | 2012-04-06 10:00:00 |
|   7 | ZhangWuji    |   20 | M      |    1 |    7 | NULL | 2012-04-06 10:00:00 |
|   8 | Xuzhu        |   90 | M      |    2 |    4 | NULL | 2012-04-06 10:00:00 |
+-----+--------------+------+--------+------+------+------+---------------------+
8 rows in set (43.92 sec)

事务隔离级别越高事务安全性越好,但是并且能力越差
如果对事务隔离级别要求不是很高,可以降低事务安全级别

时间: 2024-10-05 09:56:52

事务隔离级别对事务的影响验证的相关文章

重新理解mysql的锁、事务隔离级别及事务传播行为

数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行.ACID,是指在可靠数据库管理系统(DBMS)中,事务(Transaction)所应该具有的四个特性:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability). 原子性原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生.如,A向B转钱,在事务中的扣款和加款两条语句,要么

初识事务,事务隔离级别,事务传播行为

本篇文章会介绍以下几个概念:事务,事务隔离级别,spring事务的传播模式.在介绍事务时会引出原子性的概念,在介绍事务隔离级别的时候会引出脏读和幻读的概念. 事务 什么是事务? 事务最开始是数据库中的概念,它把一系列的操作统一为一个整体,这一系列的操作要么同时成功,要么同时失败.一个事务基本的操作是: 开启事务 如果发生了错误,进行回滚 如果没有发生错误,则提交事务 为什么要有事务? 在我们处理简单业务的时候,比如说一条插入数据的操作,只会得到两个结果,要么插入成功,要么插入失败,这对应到代码逻

SQL Server 事务隔离级别详解

原文:SQL Server 事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设计数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK)R

事务隔离级别小记

事务的四个属性:原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability). 1.原子性(Atomic)    最重要的原则,也是最容易理解的原则.被事务管理的所有方法,要么一起被提交,要么一起回滚. 2.一致性(Consistency)    事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态.如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态. 3.隔离

Atitit.数据库事务隔离级别 attilax 总结

Atitit.数据库事务隔离级别 1. 事务隔离级别的作用 1 2. 在的隔离级别 2 3. 常见数据库的默认管理级别 3 1. 事务隔离级别的作用 较低的隔离级别可以增强许多用户同时访问数据的能力,但也增加了用户可能遇到的并发副作用(例如脏读或丢失更新)的数量.相反,较高的隔离级别减少了用户 可能遇到的并发副作用的类型,但需要更多的系统资源,并增加了一个事务阻塞其他事务的可能性.应平衡应用程序的数据完整性要求与每个隔离级别的开销,在此 基础上选择相应的隔离级别.最高隔离级别(可序列化)保证事务

spring 事务传播行为和事务隔离级别

1.Spring声明式事务 声明式事务(declarative transaction management)是Spring提供的对程序事务管理的方式之一. Spring的声明式事务顾名思义就是采用声明的方式来处理事务.这里所说的声明,就是指在配置文件中申明.用在Spring配置文件中声明式的处理事务来代替代码式的处理事务.这样的好处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想

16 [个人补充知识点]在Spring中定义了5中不同的事务隔离级别

在Spring中定义了5中不同的事务隔离级别: 1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) ; 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 2. ISOLATION_READ_UNCOMMITTED 4 p" L. I' F; k1 {) a. D( E5 ?: V这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据.这种隔离级别会产生脏读,不可重复读和幻像读. 大部分数据库缺省的事物隔

什么是事务、事务特性、事务隔离级别、spring事务传播特性

1.什么是事务: 事务是程序中一系列严密的操作,所有操作执行必须成功完成,否则在每个操作所做的更改将会被撤销,这也是事务的原子性(要么成功,要么失败). 2.事务特性: 事务特性分为四个:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持续性(Durability)简称ACID. 原子性(Atomicity):事务是数据库逻辑工作单元,事务中包含的操作要么都执行成功,要么都执行失败. 一致性(Consistency):事务执行的结果必须是使数据库数据

(转)SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)

五.锁与事务隔离级别 事务隔离级别简单的说,就是当激活事务时,控制事务内因SQL语句产生的锁定需要保留多入,影响范围多大,以防止多人访问时,在事务内发生数据查询的错误.设置事务隔离级别将影响整条连接. SQL Server 数据库引擎支持所有这些隔离级别: · 未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) · 已提交读(数据库引擎的默认级别) · 可重复读 · 可序列化(隔离事务的最高级别,事务之间完全隔离) SQL Server 还支持使用行版本控制的两个事务隔离级别.一个是