一、什么是事务,事务的特性是什么?
事务的概念
Transaction,一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)。一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。
数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
DML语句必须同时成功或者同时失败。最小单元不可再分,当第一条DML语句执行成功后,并不能将底层数据库中的第一个账户的数据修改,只是将操作记录了一下;这个记录是在内存中完成的;当第二条DML语句执行成功后,和底层数据库文件中的数据完成同步。若第二条DML语句执行失败,则清空所有的历史操作记录,要完成以上的功能必须借助事务。
事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
事务处理(事务操作):保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;
要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
为确保数据库中数据的一致性,数据的操纵应当是离散的成组的逻辑单元:当它全部完成时,数据的一致性可以保持,而当这个单元中的一部分操作失败,整个事务应全部视为错误,所有从起始点以后的操作应全部回退到开始状态。
事务的特性
事务是由一组SQL语句 组成的逻辑处理单元,它的ACID特性如下:
原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。
隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
二、数据库共定义了几种隔离级别?分别是什么?可避免什么?
为了处理这些问题,SQL标准定义了以下几种事务隔离级别
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | x | √ | √ |
Repeatable read | x | x | √ |
Serializable | x | x | x |
数据库共定义了四种隔离级别:
- Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)
- Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)
- Read committed:可避免脏读情况发生(读已提交)。
- Read uncommitted:最低级别,以上情况均无法保证。(读未提交)
三、数据库三范式是什么?
数据库三范式是关系型数据库设计的基础理论,指的是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
第一范式(1NF)是指属性不可再分,即每个属性都是不可分割的原子项。这意味着在数据库表中,每个字段都是最小的数据单元,不可再次分割。
第二范式(2NF)是在第一范式的基础上建立的,它要求非主属性必须完全依赖于主属性。也就是说,非主键列必须完全依赖于主键,而不是部分依赖。
第三范式(3NF)是在满足第二范式的基础上建立的,它要求非主属性之间不存在依赖关系。也就是说,非主键列必须直接依赖于主键,不能间接依赖主键。
数据库三范式的目标是减少数据冗余、提高数据结构的清晰度和简洁性,从而确保数据库的稳定性和可维护性。在设计数据库时,应当尽可能地遵循三范式的原则,这样可以提高数据库的效率和可靠性。