zoukankan      html  css  js  c++  java
  • mysql事务测试及delete和update是使用行级锁,还是表级锁

    mysql5.5版本以上默认的引擎是InnoDB,5.5以下,默认引擎是MYISAM,根本还是要根据引擎的不同去考虑。

    InnoDB和MyISam区别:

    区别项Innodbmyisam
    事务 支持 不支持
    锁粒度 行锁,适合高并发 表锁,不适合高并发
    是否默认 默认 非默认
    支持外键 支持外键 不支持
    适合场景 读写均衡,写大于读场景,需要事务 读多写少场景,不需要事务
    全文索引 不支持,可以通过插件实现, 更多使用ElasticSearch 支持全文索引

    有如下表:

    表中的数据有:

    开启事务(begin),执行更新语句,将'user_name'全部更新为'woxbwo',但不提交(commit)事务:

    在事务内查询:

    事物外查询,新开一个窗口查询:

    可以发现,事务外查到的数据author没有发生改变

    提交事务:

    顺便测试MySQL插入是表级锁还是行级锁

    开启事务,插入数据,但不提交事务

    查看事务内数据

    查看事务外数据

    在另外一个窗口,再次插入一条数据,并查看数据;

    再查看事务内数据:

    提交事务,并查看。

    上述测试过程可以看出,mysql使用innodb引擎时,插入数据(insert)没有锁

    测试delete和update过程

    查看数据:

    开启事务,删除id=1的行 但不提交数据:

    在另外一个窗口也删除id=1的行,会发生生么样的情况呢?

    会发现处于等待状态

    那么在这种情况下,我们是否能够删除其他的行呢,我们再开一个窗口删除id=2的行,试试

    照样能删除,说明删除没使用表级锁。

    我们提交事务发现:

    综上所属:delete是使用行级锁的,update也是实现行级锁的。同理可测;

     

  • 相关阅读:
    adb 连接时候不弹出授权对话框【转】
    Android设备adb授权的原理【转】
    JDK-Logger
    使用xpath时出现noDefClass的错误(找不到某个类)
    Netty系列之Netty 服务端创建
    windows 如何查看端口占用情况?
    解决Apache/PHP无法启动的问题
    多个mysql解决方法
    Qt 静态编译后的exe太大, 可以这样压缩.
    烈焰SWF解密
  • 原文地址:https://www.cnblogs.com/woxbwo/p/11538237.html
Copyright © 2011-2022 走看看