您的位置:首页 > 数据库

数据库基础知识

2009-07-06 11:30 204 查看

事务隔离级别

数据库通过某种机制,在并行的多个事务之间进行分隔,使每个事务在其执行过程中保持独立。

数据库操作过程中可能出现三种不确定情况:

脏读取:一个事务读取了另一个并行事务未提交的数据。

不可重复读取:一个事务再次读取之前读过的数据时,发现该数据已经被另一个已提交的事务修改。

虚读:一个事务重新执行一个查询,查询结果包含因为其他最近提交的事务而产生的新记录。

为避免上述情况,SQL规范定义如下4个隔离等级:

Read Uncommitted......最低的事务隔离级别,仅仅保证读取过程中不会读取到非法数据,这种隔离级别,上述三种情况都可能发生。

Read Commited......保证一个事务不会读到另一个并行事务已修改但是未提交的数据,也就是说此隔离级别避免了脏读取,此隔离级别是大多数主流数据 库的默认事务等级。

Repeatable Read......此隔离等级避免了脏读取和不可重复读取情况,意味着一个事务不可能更新已经由另一个事务读取但未提交的数据。此隔离等级带来了更多性 能损失,而且可能出现虚读,如果当前数据库由应用所独享,可以通过乐观锁达到同样的目的。

Serializable......最高级别的事务隔离,可以规避上述三种情况。逻辑上所有事务都处于一个执行队列,依次执行。此事务隔离生产系统中很 少使用,因为会带来昂贵的性能开销。

设计范式

详细解释可参见blog.csdn.net/owenzh/archive/2006/03/26/638692.aspx

第一范式:数据库表中的每一列都是不可再分的,原子性的。

第二范式:数据库表中的非主键列必须完全依赖于所有侯选关键字,不存在非关键字段对任一侯选关键字的部分函数依赖。

第三范式:数据库表中的非主键字段对任一侯选关键字段的传递函数依赖。比如学号,姓名, 系号,系名称,系地址。系地址直接信赖于系号,系号信赖于学号,系地址是通过系号间接信赖于主键列的。

第四范式:在一个多对多的关系中,独立的实体不能存放在同一个表格中。比如学生和课程是多对多的关系,应该建立三张表,学生表,课程表和学生课程关系表, 而不能把学生和课程保存在一张表中。

第五范式:原来的表格必须可以通过由它分离出去的表格重新构建,使用这个规定的好处是,可以确保不会在分离的表格中 引入多余的列,所有你创建的表格结构都与它们的实际需要一样大。应用这条规定是一个好习惯,不过除非你要处理一个非常大型的数据,否则你将不需要用到它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: