1-什么是事务,事务的特性是什么?
事务是指一系列数据库操作组成的逻辑工作单元,要么全部成功执行,要么全部失败回滚。事务具有以下四个特性(ACID):
- 原子性(Atomicity):事务中的操作要么全部执行成功,要么全部回滚失败,没有中间状态。
- 一致性(Consistency):在事务开始和结束时,数据库必须处于一致状态。事务执行的结果必须符合数据库的定义和约束条件。
- 隔离性(Isolation):并发执行的事务之间不能相互影响,每个事务具有独立的工作空间。
- 持久性(Durability):事务一旦成功提交,其结果就会永久保存在数据库中,即使发生系统故障也不会丢失。
2-数据库共定义了几种隔离级别?分别是什么?可避免什么?
数据库定义了四种隔离级别,分别为:
--读未提交(Read Uncommitted):最低的隔离级别,允许一个事务读取另一个事务尚未提交的未经验证的数据。该级别可能导致读取到脏数据。
--读已提交(Read Committed):允许一个事务只能读取到已经提交的数据,避免了读取脏数据。但可能出现不可重复读的问题,即在一个事务中,多次读取同一行数据时,可能会得到不同的结果。
--可重复读(Repeatable Read):允许一个事务在执行期间多次读取同一行数据,并确保在同一个事务中的多次读取结果始终一致。避免了不可重复读的问题。但可能出现幻读的问题,即在同一个事务中,多次查询时,可能得到不同数量的行。
--串行化(Serializable):最高的隔离级别,强制事务串行执行,避免了幻读的问题。但可能导致并发性能下降,因为事务需要互斥地访问数据。
不同的隔离级别提供了不同的数据一致性和并发性能之间的权衡。隔离级别的选择取决于具体的业务需求,需要在保证数据的一致性和并发性能的前提下进行权衡。
3-数据库三范式是什么?
数据库的三范式(Three Normal Forms)是一种规范化数据库的设计方法,旨在减少数据冗余和提高数据存储效率。三范式包括以下三个规范:
--第一范式(1NF):表中的每一列都是原子的,不可再分。每个列值都是不可拆分的单一数据项,不允许多个值存储在同一列中。
--第二范式(2NF):表必须满足第一范式,并且非主键列必须完全依赖于主键。换句话说,非主键列不能部分地依赖于主键,而是必须依赖于整个主键。
--第三范式(3NF):表必须满足第二范式,并且消除传递依赖。换句话说,非主键列之间不能存在传递依赖关系,每个非主键列只能依赖于主键列。
通过遵循三范式,可以减少数据冗余、提高数据的一致性和查询效率,使数据库设计更加规范和优化。