范式说明和数据库脏读、幻读、不可重复读

来源:互联网 发布:华云数据集团有限公司 编辑:程序博客网 时间:2024/04/30 16:58

第一范式: 对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性.     
第二范式: 要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。一旦创建,主键无法改变,外键关联一个表的主键。主外键关联意味着一对多的关系. 
第三范式: 前提必须遵循2NF,要求非主键列互不依赖,消除传递依赖。
BCNF范式: 前提必须遵循3NF,要求主键列互不依赖。
第四范式: 禁止多值依赖。
第五范式: 第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余.

第一范式用来消除某个表列存储多个值的冗余现象。
第二范式用来处理冗余数据的删除问题。
第三范式用来消除没有直接依赖于第一范式和第二范式形成的非主键列。
BCNF范式用来消除没有直接依赖于第一范式和第二范式形成的主键列。
第四范式用来消除多值依赖。
第五范式用来处理消除所有的业务冗余,以独立的表来表达每一个业务需求。


1. 脏读 :一个事务读到另一个事务未提交的更新数据。 
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个被更新后的数据。 

2. 幻读 : 一个事务读到另一个事务已提交的新插入的数据。 
例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时第二个事务向表中插入一行新数据。那么第一个事务发现表中还有没有修改的数据行,就好象发生了幻觉一样。 
3. 不可重复读 :一个事务读到另一个事务已提交的更新数据。 
指一个事务两次对同一行数据查询,由于第二个事务在此期间对此行数据进行了修改导致第一个事务两次读取到的同一行数据不同称之为不可重复读。 

基于元数据的 Spring 声明性事务(spring的隔离性事务) : 
Isolation 属性一共支持五种事务设置,具体介绍如下: 
   default:使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别。 
   read_uncommitted:会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 ) 
   read_committed: 会出现不可重复读、幻读问题(锁定正在读取的行) 
   repeatable:会出幻读(锁定所读取的所有行) 
   serializable: 保证所有的情况不会发生(锁表)

0 0
原创粉丝点击