事物的隔离级别

时间:2019-11-02 23:24:37   收藏:0   阅读:91

Begin:

mysql 事物默认是自动提交的

 

事物:

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。

例如:A——B转帐,对应于如下两条sql语句

  update account set money=money-100 where name=‘a’;

  update account set money=money+100 where name=‘b’;

 

事物特性acid

涉及命令

 

隔离级别:

脏读

不可重复读

幻读

一个单表数据

DROP TABLE IF EXISTS `heros_temp`;
CREATE TABLE `heros_temp`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of heros_temp
-- ----------------------------
INSERT INTO `heros_temp` VALUES (1, 张飞);
INSERT INTO `heros_temp` VALUES (2, 关羽);
INSERT INTO `heros_temp` VALUES (3, 刘备);

基础:

注意: 这里不能开始就在cmd下启动两个客户端, 将无法出现演示结果(原因: 设置session连接是对于单个client的,所以最好是设置全局事物原则)

 

mysql> SHOW VARIABLES LIKE transaction_isolation; // 查询当前隔离级别
mysql> SET global TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; // 设置隔离级别为读未提交
mysql> SET autocommit = 0; // 设置事务不自动提交(由于MySQL的事务是自动提交的, 这里需要改一下)

mysql> slelect @@autocommit // 查询默认的提交事物的方式

mysql> slelect @@transaction_isolation // 查询默认的隔离级别
登录:
mysql -u root -p

 

脏读

  确认下面两个配置

  技术分享图片

 

   客户端一 开始事物 并且插入一条数据

技术分享图片

 

  我们来客户端查看的表中的数据

技术分享图片

 

 显然出现 了问题

不可重复读

  客户端2 查询全表数据

  技术分享图片

 

 

  客户端1 开启事物  修改id=3原name‘为刘备的数据

技术分享图片

 

 再次来客户端2查看一下的数据

技术分享图片

 

   出现问题

幻读

客户端2查询数据

技术分享图片

 

 

 客户端1增加一条数据

技术分享图片

 

 再次来客户端2查看一下数据,必须满足第一次查询的条件

 

技术分享图片

 

 出现问题,

最后;别忘记了 将将全局隔离级别 恢复为可重复读

 

技术分享图片

 

原文:https://www.cnblogs.com/dgwblog/p/11784421.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!