一个事务对数据对象(库、表、页、行)A加X锁,能够对A进行读写操做,其余事务不能再加X锁或S锁。mysql
一个事务对数据对象(库、表、页、行)A加S锁,只能对A进行读操做,不能进行写操做,其余事务只能加S锁,不能加X锁。sql
要加行锁的话,先要在表级别加上IX或者IS,表示下面已经有行级别的X或S锁,不用再一个个检查。 表级别存在,X、S、IX、IS锁。IX,IS是表级锁,不会和行级的X,S锁发生冲突。只会和表级的X,S发生冲突数据库
先获取锁以后再作更新等其余操做。由于要先获取锁再作操做,因此须要在事务中操做。适合锁冲突比较高、重试代价比较大的场景网络
先获取数据并获得时间戳或者版本号,在更新等其余操做的时候再去Check,在不在事务中无所谓。适合高并发,锁冲突几率比较低场景。并发
MySQL 的 InnoDB 会根据隔离级别在须要的时候自动加锁,而且全部的锁都是在同一时刻被释放,这被称为隐式锁定。 InnoDB 也可使用特定的语句进行显示锁定: SELECT … LOCK In SHARE MODE; SELECT … FOR UPDATE;oracle
对系统中数据的查询、变动操做所组成的逻辑单元。高并发
1.事务的4个基本特征-ACID Atomicity 原子性 总体视为一个操做,要么所有成功,要么所有失败。任何一个分步骤失败都认为所有失败。 Consistency 一致性 事务执行先后数据处于一致性状态,如A给B转钱,则A减B加,不能出现A减,B不动。 Isolation 隔离性 事务和事务之间是隔离的,相互不干扰。 Duration持久性 事务提交以后,数据变动结果不受网络、宕机等影响。code
并发的事务之间会存在问题,为此数据库对并发事务之间的隔离作了分级。通常分为read uncommitted、read committed、 repeatable read、serializable对象
A事务读到B事务未提交的数据。
A事务内读取屡次同一个数据值不同。
A事务执行过程当中,其余事务插入、删除数据。 如A事务把某个表中的某字段进行了更新,在更新过程当中又有新的数据插入,这时候新数据就没有被更新。
通常数据库中都会有默认的隔离级别。mysql是repeatable、oracle和oceanbase是read commited,这里oracle和oceanbase是经过其余方式解决掉不可重复读问题的。事务