技术复习-数据锁和数据库事务

1、数据库锁

1.读写锁

排它锁 简称X锁(Exclusive)

一个事务对数据对象(库、表、页、行)A加X锁,能够对A进行读写操做,其余事务不能再加X锁或S锁。mysql

共享锁 简称 S锁(Share)

一个事务对数据对象(库、表、页、行)A加S锁,只能对A进行读操做,不能进行写操做,其余事务只能加S锁,不能加X锁。sql

2.意向锁

要加行锁的话,先要在表级别加上IX或者IS,表示下面已经有行级别的X或S锁,不用再一个个检查。 表级别存在,X、S、IX、IS锁。IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突数据库

3.其余锁

悲观锁:

先获取锁以后再作更新等其余操做。由于要先获取锁再作操做,因此须要在事务中操做。适合锁冲突比较高、重试代价比较大的场景网络

乐观锁:

先获取数据并获得时间戳或者版本号,在更新等其余操做的时候再去Check,在不在事务中无所谓。适合高并发,锁冲突几率比较低场景。并发

MySQL 的 InnoDB 会根据隔离级别在须要的时候自动加锁,而且全部的锁都是在同一时刻被释放,这被称为隐式锁定。 InnoDB 也可使用特定的语句进行显示锁定: SELECT … LOCK In SHARE MODE; SELECT … FOR UPDATE;oracle

2、数据库事务

1.事务定义 (Trasnsaction)

对系统中数据的查询、变动操做所组成的逻辑单元。高并发

1.事务的4个基本特征-ACID Atomicity 原子性 总体视为一个操做,要么所有成功,要么所有失败。任何一个分步骤失败都认为所有失败。 Consistency 一致性 事务执行先后数据处于一致性状态,如A给B转钱,则A减B加,不能出现A减,B不动。 Isolation 隔离性 事务和事务之间是隔离的,相互不干扰。 Duration持久性 事务提交以后,数据变动结果不受网络、宕机等影响。code

2.数据库事务隔离级别

并发的事务之间会存在问题,为此数据库对并发事务之间的隔离作了分级。通常分为read uncommitted、read committed、 repeatable read、serializable对象

并发事务产生的问题

1.脏读
A事务读到B事务未提交的数据。
2.不可重复读
A事务内读取屡次同一个数据值不同。
3.幻读
A事务执行过程当中,其余事务插入、删除数据。
如A事务把某个表中的某字段进行了更新,在更新过程当中又有新的数据插入,这时候新数据就没有被更新。

数据库事务隔离级别

  • read uncommitted 读未提交, 存在脏读、不可重复读、幻读问题
  • read committed 读已提交, 存在不可重复读、幻读问题
  • repeatable read 可重复读 存在幻读问题
  • serializable 串行化 不存在问题,效率低

通常数据库中都会有默认的隔离级别。mysql是repeatable、oracle和oceanbase是read commited,这里oracle和oceanbase是经过其余方式解决掉不可重复读问题的。事务

相关文章
相关标签/搜索