1. 什么是事务,事务的特性是什么?
事务是表示一组数据库操作(插入、更新、删除等),这组操作要么全部成功执行,要么全部失败回滚,保证数据库的一致性和完整性。事务具有四个重要特性为ACID特性:
原子性:事务是一个不可分割的操作单元,要么全部执行成功,要么全部失败回滚,不存在部分执行的情况。
一致性:事务执行前后,数据库从一个一致的状态转换到另一个一致的状态。事务的执行不会破坏数据库的完整性约束。
隔离性:多个事务可以并发执行,但它们之间应该是相互隔离的,一个事务的执行不应影响其他事务,直到事务提交后才对其他事务可见。
持久性:一旦事务提交,其所做的修改将永久保存在数据库中,即使系统崩溃,数据也不会丢失。
2. 数据库共定义了几种隔离级别?分别是什么?可避免什么?
数据库定义了四种隔离级别
读未提交:允许一个事务读取另一个事务尚未提交的数据。这是最低级别的隔离,可能导致脏读、不可重复读和幻读问题。
读已提交:允许一个事务读取另一个事务已提交的数据。这样可以避免脏读,但仍可能出现不可重复读和幻读问题。
可重复读:保证一个事务在同一事务中多次读取相同数据时,数据保持一致。这可以避免脏读和不可重复读,但仍可能出现幻读问题。
串行化:提供最高的隔离级别,确保事务之间完全隔离,不会出现任何并发问题,包括脏读、不可重复读和幻读。
不同的隔离级别可避免不同类型的并发问题。串行化隔离级别可以避免所有并发问题,而读未提交隔离级别则几乎不提供隔离,但性能最好。
3. 数据库三范式是什么?
数据库三范式是减少数据冗余和提高数据的一致性。它包括以下三个范式:
第一范式(1NF):确保表中的每个列都是原子性的,即每个列不可再分。这意味着每个表格单元格中的数据必须是不可分的。例如,如果有一个包含多个值的列,应将其拆分为多个列。
第二范式(2NF):在满足第一范式的基础上,确保非主键列完全依赖于表的候选键(候选键是可以唯一标识每一行的一组列)。如果非主键列部分依赖于候选键,就需要将其分离成独立的表,以消除数据冗余。
第三范式(3NF):在满足第二范式的基础上,确保非主键列之间不存在传递依赖关系。如果一个非主键列依赖于另一个非主键列,应将其分离成独立的表,以避免传递依赖关系。