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

1.事物:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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

猜你喜欢

转载自www.cnblogs.com/panxuejun/p/9053180.html