数据库事务的基础知识

本文介绍了数据库事务的四个特性ACID,讨论了数据并发可能导致的问题如脏读、不可重复读等,并详细阐述了数据库的锁机制和事务隔离级别,以确保数据一致性。
摘要由CSDN通过智能技术生成

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、手动给读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值