1、4个特性 ACID
在这些事务特性种,数据一致性是最终目标,其他特性都是为了这个目标而采取的措施、要求或手段!
2、数据并发问题
一个数据库,可能拥有多个访问客户端,这些客户端都可用并发的方式访问数据库。数据库种的相同数据可能同时被多个事务访问,如果没有采取必要的隔离措施,就会导致各种并发问题,破坏数据的完整性。
小知识: mysql开启事务的两种方式 start transaction begin ;提交 commit、回滚 rollback。
查看自动提交状态 mysql> show variables like '%autocommit%'; on表示自动提交已经打开。mysql默认的数据提交操作模式是autocommit,除非显式的打开一个事务,否则每个查询都被当做一个单独的事务自动执行!
mysql> set autocommit=0; 关闭当前线程的自动提交,直到主动执行commit、rollback或者断开连接。
2.1、脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作。如果恰巧B事务回滚,那么A事务读取到的数据根本是不被承认的。
ORACLE数据库中,不会发生脏读情况!
2.2、不可重复读:自己组织的语句(A事务读取B事务提交后的更改数据,与该数据在被更改前,两个时间点读取的值不一致)
2.3、幻像读:A事务读取B事务提交的新增数据。幻像读一般发生在计算统计数据的事务中。产生两次统计结果不一致的情况。
2.4、第一类丢失更新:A事务撤销时,把已经提交的B事务的更新数据覆盖了。
2.5、第二类丢失更新:A事务提交时覆盖B事务已经提交的数据,造成B事务所操作丢失。
3、数据库锁机制
按锁定的对象不同,分为表锁定和行锁定;
从并发事务锁定的关系上,分为共享锁定和独占锁定。共享锁定会防止独占锁定,但允许其他的共享锁定。而独占锁定防止其他的独占锁定,也防止其他的贡献锁定。
为了更改数据,数据库必须在进行更改的行上施加行独占锁定。insert、update、delete和select for update都会隐式采用必要的行锁定。
ORACLE数据库的5种锁定:
3.1、查看表锁信息: SHOW STATUS LIKE 'Table_locks%';
Table_locks_immediate结果,意思是表被锁了总数
Table_locks_waited表示有多少请求等待表锁
3.2、获取innoDB行锁争夺情况: show status like 'innodb_row_lock%';
3.3、手动给读