• 事物与数据库锁的关系(锁只是数据库事物一方面)


    1.事物:

    首先是一组DB执行的最小逻辑单元,是一组sql语句。要么全部执行,要么全部执行失败回滚。

    首先是一组DB执行的最小逻辑单元,是一组sql语句。

    首先是一组DB执行的最小逻辑单元,是一组sql语句。

    2.事物有四种特性,acid,

    原子性:意味着数据库最小的逻辑执行单元

    隔离性:多线程执行同一数据库记录时,彼此无感知。事务不会查看到中间状态的数据

    一致性:记录与索引的一致性

    持久性:数据落地了,就不会丢了。哪怕数据库dow掉,依然数据可以恢复。

    3.事物的4种特性分别依靠什么来实现和保证的呢?

    :1).事务隔离性:是通过数据库的锁来保证的。通过锁住行,锁住表,来让并发的其他事物无法操控当前事物操控的记录。从而避免了其他事物造成的脏读,不可重复度,幻读。

    隔离性实现原理是通过数据库锁让其他事物无法操控当前记录,对当前的记录全部锁住,从而保证当前操控数据的干净性

    2).原子性,一致性,持久性:是通过数据库日志来保证的。对数据库的每次操作,日志都会有记录。回滚更是这个原理。

    事物的回滚就是通过数据库binlog来实现的。

    3)所以,事物是数据库提供的一套完整的数据库操作组合,满足业务的需要。利用了数据库的很多特性,包括不同的数据库锁,及日志。而隔离性通过数据库锁机制,知识事务的一个方面而已。

    事物是数据库提供的一套完整的数据库操作组合,满足业务的需要。利用了数据库的很多特性,包括不同的数据库锁,及日志

    事物是数据库提供的一套完整的数据库操作组合,满足业务的需要。利用了数据库的很多特性,包括不同的数据库锁,及日志

    事物是数据库提供的一套完整的数据库操作组合,满足业务的需要。利用了数据库的很多特性,包括不同的数据库锁,及日志

    注意:一条记录占有select共享锁时,独占锁x锁是无法update修改此条记录的。

    当记录被共享锁占有时,是不能被排他锁修改写的。必须等共享锁释放完,排他锁才能占有此记录,重新上排他锁。

    当记录被共享锁占有时,是不能被排他锁修改写的。必须等共享锁释放完,排他锁才能占有此记录,重新上排他锁。

    当记录被共享锁占有时,是不能被排他锁修改写的。必须等共享锁释放完,排他锁才能占有此记录,重新上排他锁。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    所以事物的隔离级别,就是通过加排他锁和共享锁,锁住当前的数据,保证不能被其他事物修改。从而实现了隔离级别。

    不同的隔离级别是因为数据库中内部锁机制的使用方式不同,例如有的是在select完成之后立马释放锁,有的是在整个事务commit 之后释放锁 。

    不同的隔离级别是因为数据库中内部锁机制的使用方式不同,例如有的是在select完成之后立马释放锁,有的是在整个事务commit 之后释放锁 。

    不同的隔离级别是因为数据库中内部锁机制的使用方式不同,例如有的是在select完成之后立马释放锁,有的是在整个事务commit 之后释放锁 。

    不同的隔离级别是因为数据库中内部锁机制的使用方式不同,例如有的是在select完成之后立马释放锁,有的是在整个事务commit 之后释放锁 。

    update排他锁在并发场景下是串行执行的,所以要排队等待。

    update排他锁在并发场景下是串行执行的,所以要排队等待。

    update排他锁在并发场景下是串行执行的,所以要排队等待。

    数据库事务各隔离级别加锁情况

    1.单纯加锁是怎么实现 Repeatable Read 的?

    1.多线程同时更新同一条记录,加X锁。所以并发场景下的 update 是串行执行的。
    2.工业定义上的 select 一条记录,这个时候会在记录上加读共享锁(S锁),并到事务结束,因为在这种情况下才能实现记录在事务时间跨度上的可重复读。在读的时候不允许其他事务修改这条记录。
    3.update 一条语句,这个时候会在记录上加行级排他锁(X锁),并到事务结束,这中场景下,其他读事务会被阻塞。

    repeatable read加了行级锁,就防止了其他事物对单条记录的值修改,防止了不可重复读现象。但因为只是行级锁,依然不能对insert新增记录防止幻读。只有表锁才能防止。

    repeatable read 加了行级锁,就防止了其他事物对单条记录的值修改,防止了不可重复读现象。但因为只是行级锁,依然不能对insert新增记录防止幻读。只有表锁才能防止。

    repeatable read加了行级锁,就防止了其他事物对单条记录的值修改,防止了不可重复读现象。但因为只是行级锁,依然不能对insert新增记录防止幻读。只有表锁才能防止。

    2.真实的情况是什么样子的?


    读不影响写,写不影响读。

    1.读不影响写:事务以排他锁的形式修改原始数据,读时不加锁,因为 MySQL 在事务隔离级别Read committed 、Repeatable Read下,InnoDB 存储引擎采用非锁定性一致读--即读取不占用和等待表上的锁。即采用的是MVCC中一致性非锁定读模式。因读时不加锁,所以不会阻塞其他事物在相同记录上加 X锁来更改这行记录。
    2.写不影响读:事务以排他锁的形式修改原始数据,当读取的行正在执行 delete 或者 update 操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB 存储引擎会去读取行的一个快照数据。

  • 相关阅读:
    react学习总结(一)
    jQuery的attr()与prop()的区别
    Vue.js学习(常用指令)
    Node.js学习(篇章一)
    CSS3关于-webkit-tap-highlight-color属性
    position布局影响点击事件以及冒泡获取事件目标
    取消事件默认行为(移动端)
    rem与px之间的换算(移动端)
    Node.js(初识)
    ES6(变量的解构赋值)
  • 原文地址:https://www.cnblogs.com/panxuejun/p/9053180.html
Copyright © 2020-2023  润新知