数据库事物,数据一致性的基石

2024-08-20 94 0

1.事物特性(ACID)

  • 原子性Atomicity
  • 一致性 Consistency
  • 隔离性Isolation
  • 持久性 Durability

备:
1.一致性和持久性是通过双写机制和redolog实现的
2.当事物回滚,通过undolog进行数据的恢愎,保证原子性

2.隔离级别

事务的四个隔离级别,是来解决并发下产生的脏读、不可重复读、幻读等问题

  • 脏读 :读到了其它事务的回滚数据
  • 不可重复读:同一个事物中,同一记录多次查询数据不一致
  • 幻读:同一事物中,同一条件sql多次查询,数据条数变多了

file

3.查询mysql当前隔离级别

mysql> select @@transaction_isolation;
+-------------------------+
| @@transaction_isolation |
+-------------------------+
| REPEATABLE-READ         |
+-------------------------+
1 row in set (0.00 sec)

4.解决隔离性的问题两个手段

  1. Lock Based Concurrency Control(LBCC)
    事物开始操作数据前,对其加锁,阻止其它事务对数据进行修改(当前读)

什么是当前读:SQL读取的数据是最新版本。通过锁机制来保证读取的数据无法通过其他事务进行修改,如:update、delete、insert、select..Lock IN SHARE MODE、select..for update都是当前读。

  1. Multi Version concurrency Control(MVCC)
    事务开始操作数据前,将数据在当下时间点进行一份数据快照(Snapshot)的备份,并用这个快照来提供给其它事务进行一致性读取(快照读)

什么是快照读:SQL读取的数据是快照版本,也就是历史版本.普通的select就是快照读,如:select * from table where col>1 and col<100

5.innodb中锁的分类

  • 共享锁(行锁) ==S==hared Locks
    共享锁又称读锁,简称S锁。当一个事务对数据加上读锁之后,其他事务只能对该数据加读锁,而无法对数据加写锁,直到所有的读锁释放之后其他事务才能对其进行加写锁。 加了共享锁之后,无法再加排它锁,这也就可以避免读取数据的时候会被其它事务修改,从而导致重复读问题

  • 排他锁(行锁) E==x==clusive Locks
    他锁又称写锁,简称X锁;当一个事务对数据加上写锁之后,其他事务将不能再为数据加任何锁,直到该锁释放之后,其他事务才能对数据进行加锁。加了排他锁之后,其它事务就无法再对数进行读取和修改,所以也就避免了脏写和脏读的问题。

6.行锁的具体实现

  • 临键锁 Next-key Locks
  • 间隙锁 Gap Locks
  • 记录锁 Record Locks

相关文章

版本号命名规范,为软件开发注入秩序
解决Docker Hub镜像超时困扰
听歌搜歌下歌,尽在MusicFree
线上PostgreSQL锁表故障分析
PostgreSQL创建外部表场景及使用
vim常用命令

发布评论