数据库事务概述

1. 事务的特性

事务:一组业务操作,要么全部成功,要么全部不成功。

特性:ACID

  1. 原子性:整体,事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。
  2. 一致性:数据, 事务执行的结果必须是使数据库一个一致性状态变到另一个一致性状态。
  3. 隔离性:并发, 一个事务的执行不能其它事务干扰。
  4. 持久性:结果,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。

2. MysqL 的四种隔离级别

2.1 隔离问题:

  1. 脏读:一个事务读到另一个事务未提交的内容

  2. 不可重复读:一个事务读到另一个事务已提交的内容(insert)

  3. 虚读(幻读):一个事务读到另一个事务已提交的内容(update)

2.2 隔离级别

  1. 读未提交(read uncommittd):在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。存在3个问题

  2. 读已提交(read committed):一个事务只能看见已经提交事务所做的改变。解决:脏读。存在2个问题。

  3. 可重复读(repeatable read):这是MysqL认事务隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。解决:脏读、不可重复读。存在1个问题。

  4. 串行化(serializable):单事务。这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁在这个级别,可能导致大量的超时现象和锁竞争。没有问题。

3. 悲观锁和乐观锁

3.1 悲观锁

在这里插入图片描述


悲观锁:(数据库提供实现) . 认认为一定会发送别人要修改我使用的数据. 那我就可以为我读取的数据加锁。丢失更新肯定会发生

  • 读锁/共享锁:读锁可被其他线程所共享,如果是读取的话大家都可以用这把锁读到数据.

    • select * from table lock in share mode(读锁、共享锁
  • 写锁/排他锁:(独占). 写锁不能共享,只要有人为数据加入了写锁,其他人就不能为数据加任何锁.

    • select * from table for update (写锁、排它锁

3.2 乐观锁

乐观锁:需要自己实现, 丢失更新肯定不会发生

在表中提供一个字段(版本字段),用于标识记录。如果版本不一致,不允许操作。

在这里插入图片描述

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...