1.设置和验证MySQL数据库的隔离级别
- 登录数据库
mysql -u root - p
- 新建用户,各启动一个事物,用于同时操作数据库表中数据
create user tom identified by 'tom';
然后同时再用该用户启动MySQL。这样就能通过使用两个事物操作数据库进行验证了
mysql -u tom -p
- 新建的tom用户是没有权限对其他数据库进行操作的,因此要赋予权限。通过系统用户对该tom用户赋予权限:
grant select,insert,update,delete on test.* to tom@localhost identified by 'tom';
注意:MySQL8.0不支持这种写法了,需要把identified by 'tom'去掉。前面默认创建的主机是%,即任意主机,因此要把localhost改成'%'; - 两个用户分别
use test;
下面是我创建的test数据库中的user_table表:
root-->select * from user_table where user = 'CC';
tom-->select * from user_table where user = 'CC';
默认情况下,这两个DML操作都自动提交了。因此这两个语句事实上是两个事物。 - 让其执行完DML之后,不自动提交
set autocommit = false;
- 先查看其隔离级别
select @@tx_isolation;
MySQL8.0后是select @@transaction_isolation;
-->REPEATABLE-READ;
7.验证隔离级别
root-->select * from user_table where user = 'cc';
tom-->update user_table set balance = 3000 where user = 'cc';
tom-->select * from user_table where user = 'cc';
-->3000
root-->select * from user_table where user = 'cc';
-->2000
因为此时两者都没有提交,这里就验证了避免脏读的问题;
tom-->commit;
root-->select * from user_table where user = 'cc';
-->2000
这里tom提交,说明数据库已经改了,但是root查询到的仍然是2000,验证了避免不可重复读的问题;
若想root读到3000,只需root提交之后,再次查询即可。(提交意味着当前事物已经结束了) - 修改隔离级别
设置数据库系统的全局的隔离级别
set global transaction isolation level read committed;
然后需要把当前连接断掉,重新进入MySQL才能显示已修改的隔离级别。
9.再次执行5、6、7中代码进行验证既可。
10.再次修改隔离级别为read uncommitted
进行验证。
1.设置和验证MySQL数据库的隔离级别的更多相关文章
- Mysql数据库的隔离级别
Mysql数据库的隔离级别有四种 1.read umcommitted 读未提交(当前事务可以读取其他事务没提交的数据,会读取到脏数据) 2.read committed 读已提交(当前事务不能读 ...
- MySQL - 数据库的隔离级别
MySQL - 数据库的隔离级别 隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read) 未提交读(Read uncommitte ...
- Mysql数据库事务隔离级别
事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列.事务ACID属性,即原子性(Atomicity).一致性(Consistency ...
- mysql事务之一:MySQL数据库事务隔离级别(Transaction Isolation Level)及锁的实现原理
一.数据库隔离级别 数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 1 #可选参数 ...
- MySQL数据库的隔离级别之可重复读为什么能够有效防止幻读现象的出现
可重复读隔离级别,不允许存在幻读,该隔离级别之所以能够有效防止幻读现象的出现,是因为可重复读这个隔离级别有用到GAP锁(间隙锁).下面我们以解析SQL语句为切入点,来解释个中原因. 前提条件:①数据库 ...
- mysql数据库——事务隔离级别
四种隔离级别: 一:READ UNCOMMITTED(未提交读) 事务可以读取其他事务未提交的数据,称为脏读 二:READ COMMITTED(提交读) 一个事务开始时,只能"看见" ...
- MySQL数据库事务隔离级别(Transaction Isolation Level)
转自: http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html 数据库隔离级别有四种,应用<高性能mysql>一书中的 ...
- [转]MySQL 数据库事务隔离级别
然后说说修改事务隔离级别的方法: 1. 全局修改,修改 mysql.ini 配置文件,在最后加上 1 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATAB ...
- [原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
随机推荐
- Power Query 导入多源数据
导入方法: 导入数据库文件: 修改加载方式: 其他类型数据处理方式类似
- webpack理解
打包工具 可以将多个静态文件打包成一个静态文件例如将1.js.2.js.3.css打包成h.js一个静态文件 这样做的好处是:可以减少页面的请求次数 以往是请求多个静态页面,使用webpack后会减少 ...
- 按照阿里巴巴规范创建Java线程池
前言 Executors Executors 是一个Java中的工具类.提供工厂方法来创建不同类型的线程池. 常用方法: 1.newSingleThreadExecutor 介绍:创建一个单线程的 ...
- 使用OWASP Dependency-Check对应用做个安检
俗话说"人怕出名猪怕壮",当系统小有名气以后就会被一些黑客盯上,三天两头的用各种漏洞扫描工具做渗透,如果不希望某天你负责的系统因为安全问题而出名,那就提前行动起来吧,这就是今天要讲 ...
- EFCodeFirst属性映射约定
EFCodeFirst属性映射约定 EFCodeFirst 属性映射约定 CodeFirst与数据表之间得映射方式又两种:Data Annotation和Fluent API 默认约定: 表名为类名的 ...
- PHP Webshell List
目录 基础类 编码替换 无关键字函数类型 躲避检测记录 MySQL写入一句话 基础类 很容易被扫描.检测出来 <?php @eval($_GET['phpcode']);?> <?p ...
- AOP面试造火箭始末
本文已整理致我的github地址,欢迎大家 star 支持一下 这是一个困扰我司由来已久的难题,Dubbo 了解过吧,对外提供的服务可能有多个方法,一般我们为了不给调用方埋坑,会在每个方法里把所有异常 ...
- POJ-3259(最短路+Bellman-Ford算法判负圈)
Wormholes POJ-3259 这题是最短路问题中判断是否存在负圈的模板题. 判断负圈的一个关键就是理解:如果在图中不存在从s可达的负圈,最短路径不会经过一个顶点两次.while循环最多执行v- ...
- CCF(再卖菜60分)爆搜+记忆化搜索+差分约束
201809-4 再卖菜 我使用的是爆搜解决,只得了60分. 记忆化搜索 差分约束 #include<iostream> #include<cstdio> #include&l ...
- 【转载】java类加载时机与过程
1 开门见山 以前曾经看到过一个java的面试题,当时觉得此题很简单,可是自己把代码运行起来,可是结果并不是自己想象的那样.题目如下: class SingleTon { private stati ...