Day04—MySQL事务与三大范式

一:事务概述

事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。 在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态。

例如转账操作:A账户要转账给B账户,那么A账户上减少的钱数和B账户上增加的钱数必须一致,也就是说A账户的转出操作和B账户的转入操作要么全部执行,要么全不执行;如果其中一个操作出现异常而没有执行的话,就会导致账户A和账户B的转入转出金额不一致的情况,为而事实上这种情况是不允许发生的,所以为了防止这种情况的发生,需要使用事务处理。

1.1:事务的ACID属性

(1)原子性(Atomicity)

(2)一致性(Consistency)

(3)隔离性(Isolation)

(4)持久性(Durability)

1.2:事务隔离级别

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:

脏读 :    (没提交)

不可重复读:  (提交之后,只修改)

幻读                (提交之后 ,增删)

不可重复度和幻读区别:

不可重复读的重点是修改,幻读的重点在于新增或者删除。

Day04—MySQL事务与三大范式_第1张图片

 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:第二范式

  • 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)

  • 即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

例如:

Day04—MySQL事务与三大范式_第2张图片

Day04—MySQL事务与三大范式_第3张图片

 2.2.3:第三范式

  • 确保数据表中的每一列数据都和主键直接相关,而不能间接相关

  • 属性不依赖于其他非主属性。

例如:

Day04—MySQL事务与三大范式_第4张图片

 Day04—MySQL事务与三大范式_第5张图片

 Day04—MySQL事务与三大范式_第6张图片

 Day04—MySQL事务与三大范式_第7张图片

 三:范式的优缺点

优点

  • 结构合理

  • 冗余较小

  • 尽量避免插入删除修改异常

缺点

  • 性能降低

  • 多表查询比单表查询速度慢

  • 数据库的设计应该根据当前情况和需求做出灵活的处理。

  • 在实际设计中,要整体遵循范式理论。

  • 如果在某些特定的情况下还死死遵循范式也是不可取的,因为可能降低数据库的效率,此时可以适当增加冗余而提高性能。

Day04—MySQL事务与三大范式_第8张图片

 Day04—MySQL事务与三大范式_第9张图片

 

 

 

你可能感兴趣的:(mysql,数据库,java)