一、事务 概念 事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。
ACID 1. 原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 回滚可以用回滚日志来实现,回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。 2. 一致性(Consistency) 数据库在事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。 3. 隔离性(Isolation) 一个事务所做的修改在最终提交以前,对其它事务是不可见的。 4. 持久性(Durability) 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。 使用重做日志来保证持久性。
二、并发一致性问题 在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。 丢失修改 T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。
读脏数据 T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。
不可重复读 T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
幻影读 T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次 读取的结果不同。
产生并发不一致性问题主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过 封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供了事务的隔离级别,让用户以一种更 轻松的方式处理并发一致性问题。 三、 读写锁 排它锁(Exclusive),简写为 X 锁,又称写锁。 共享锁(Shared),简写为 S 锁,又称读锁。
一个事务对数据对象 A 加了 X 锁,就可以对 A 进行读取和更新。加锁期间其它事务不能对 A 加任何锁。 一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。
四、隔离级别 未提交读(READ UNCOMMITTED)
事务中的修改,即使没有提交,对其它事务也是可见的。 提交读(READ COMMITTED) 一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所做的修改在提交之前对其它事务是不可见的。 可重复读(REPEATABLE READ) 保证在同一个事务中多次读取同样数据的结果是一样的。 可串行化(SERIALIZABLE) 强制事务串行执行。

五、drop、delete和truncate区别
delete和truncate都是删除表中的内容而不能删除表的结构,而drop则是删除表的结构和内容(表将不复存在)
六、范式 范式理论是为了解决以下四种异常: 冗余数据 修改异常 删除异常 插入异常 高级别范式的依赖于低级别的范式,1NF 是最低级别的范式。 1. 第一范式 (1NF) 属性不可分。 2. 第二范式 (2NF) 每个非主属性完全函数依赖于键码。
3. 第三范式 (3NF) 非主属性不传递函数依赖于键码。
七、视图 视图是虚拟的表,本身不包含数据,也就不能对其进行索引操作。 对视图的操作和对普通表的操作一样。 视图具有如下好处: 简化复杂的 SQL 操作,比如复杂的连接; 只使用实际表的一部分数据; 通过只给用户访问视图的权限,保证数据的安全性;
更改数据格式和表示。
八、存储过程 存储过程可以看成是对一系列 SQL 操作的批处理。 使用存储过程的好处: 代码封装,保证了一定的安全性; 代码复用; 由于是预先编译,因此具有很高的性能。
九、索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。数据库索引好比是一本书前面的目录,能加快数据库的查询速度。
|