事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。 在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。
1.1:事务的ACID属性例如转账操作:A账户要转账给B账户,那么A账户上减少的钱数和B账户上增加的钱数必须一致,也就是说A账户的转出操作和B账户的转入操作要么全部执行,要么全不执行;如果其中一个操作出现异常而没有执行的话,就会导致账户A和账户B的转入转出金额不一致的情况,为而事实上这种情况是不允许发生的,所以为了防止这种情况的发生,需要使用事务处理。
1.2:事务隔离级别(1)原子性(Atomicity)
(2)一致性(Consistency)
(3)隔离性(Isolation)
(4)持久性(Durability)
对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:
脏读 : (没提交) 不可重复读: (提交之后,只修改) 幻读 (提交之后 ,增删)不可重复度和幻读区别:
不可重复读的重点是修改,幻读的重点在于新增或者删除。
二:数据库设计的三大范式Oracle 支持的 2 种事务隔离级别:READ-COMMITED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ COMMITED 。
Mysql 支持 4 种事务隔离级别。 Mysql 默认的事务隔离级别为: REPEATABLE-READ。在mysql中REPEATABLE READ的隔离级别也可以避免幻读了。
2.1:为什么要有范式
1>数据库设计的合理性 数据库设计关系整个系统的架构,关系到后续开发效率和运行效率 数据库的设计主要包含了设计表结构和表之间的联系 2>数据库要求 结构合理 冗余较小 尽量避免插入删除修改异常 3> 如何才能保证数据库设计水平 遵循一定的规则 在关系型数据库中这种规则就称为范式2.2范式的分类 2.2.1第一范式
例如:
- 最基本的范式
- 数据库表每一列都是不可分割基本数据项,同一列中不能有多个值
- 简单说就是要确保每列保持原子性 (使得字段不可再分)
2.2.2:第二范式
用户表(用户名,家庭地址)
用户表(用户名,省,城市,详细地址)
系(系名称,系主任,系高级职称人数)
系(系名称,系主任,系教授人数,系副教授人数)
例如: 2.2.3:第三范式
- 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。
- 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
例如:
- 确保数据表中的每一列数据都和主键直接相关,而不能间接相关
- 属性不依赖于其他非主属性。
三:范式的优缺点
优点
结构合理
冗余较小
尽量避免插入删除修改异常
缺点
性能降低
多表查询比单表查询速度慢
数据库的设计应该根据当前情况和需求做出灵活的处理。
在实际设计中,要整体遵循范式理论。
如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。



