zoukankan      html  css  js  c++  java
  • 关于事务和隔离性的一些随想

    2018-09-30

    昨天面试被问得一脸萌逼。不过回想起来,在这么短时间要高速思考中,居然想通了东西。(当然了,是事后补习了一下知识)。现分享如下:

    事务仅仅是数据插入或修改完整性的一种表述。

    隔离性()仅仅只读的一种表述。

    以前总是把事务性和隔离性混在一起,傻傻分不清。

    可以说事务和隔离性关注的点不同,事务性关注的是操作的一致性,而隔离性是一种读,是一种观察,

    而脏读、不可重复读、幻读都是读到我们不期望的状态(和事务想表达的意思不同),虽然是不期望的,但一般概率比较低,或者说是一瞬间,事务并没有破坏掉,或者说,这些都是在正常事务机制下产生了一种中间态。

    比如脏读,这一秒你读到了,刷新一下,就重现不了了(没有缓存的情况下,纯查询),以后无论刷新多少下,都重现不了,说明事务是有效的,

    你只是读到了一个本不该读到的中间状态。

    不可重复读。当看字面,很难明白。其它它可以翻译为“在同一个事务中,多次读取同一条记录,返回的结果可能不同”。

    过几天我整理一下脏读的demo验证方式。

    2018-10-07

    如果你的数据库设置的是“读未提交”,那你在代码里设置成“读已提交”是不生效的。

    如果你的数据库设置的是“读已提交”,但是你在代码里设置成“读未提交”也是不生效的。

    验证的方法:

    我是用的Navicat,它有一个“命令行界面”,打开它之后,use database_name;选中某一个数据库。(填你自己的数据库名)

    然后set autocommit=off; 取消自动提交。

    SELECT @@global.tx_isolation,  @@tx_isolation,  @@session.tx_isolation;  这个是查看目前的隔离级别

    set global transaction isolation level read committed;//设置全局的隔离级别

    然后你想验证读未提交的话,执行

    start transaction;

    update tb_student set s_name = '013' where s_id = 7;

    一直不输入commit;,这样就一直卡在事务未提交的状态。

    然后你可以用写代码去读数据。就是这样。

    隔离级别常量:

    Read uncommitted

    Read committed

    Repeatable read

    Serializable

  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/angelshelter/p/9728605.html
Copyright © 2011-2022 走看看