数据库三范式、事务

三范式

第一范式(1NF)

  在一张表中,组成表的每一个属性都是不能再分的属性,如果满足这一规则,则该表符合第一范式。

                

表1(不符合)                                                    表2(符合)

  表1的Info字段可以再拆分,故不符合1NF;表2所有属性不可再分,符合。

第二范式(2NF)

  首先要满足1NF,表中的每一个非主属性必须完全依赖于本表的主键(候选键),而不能是部分依赖。

              

            表1                             表2

  表1中,学号和课程为联合主键,由于姓名属性只依赖于学号,学分只依赖于课程,故不满足2NF;表2中,选修时间及成绩都完全依赖于主键,故符合2NF。由此也可知不满足2NF的情况只会出现在有联合主键的表中。

第三范式(3NF)

  首先满足1NF和2NF,另外所有非主属性都是与主键直接相关,而不能是间接相关

               

                            表1

  表1中,客户名称与订单号并不是直接相关,而是可以通过客户号与订单号间接相关,故不满足3NF

五大约束

  1、 Primary key:主键约束

  2、 UNIQUE:唯一性约束

  3、 NOT NULL:非空约束

  4、 Foreign key:外键约束

  5、 Default:默认值约束

事务

四大特性(ACID)

  1、 原子性(atomicity):一个事务是不可分割的,所以要么执行其全部内容,要么就根本不执行。如果一个事务开始执行,但是由于某些原因失败了,则事务对数据库造成的任何可能的修改都要撤销。

  2、 一致性(consistency):一个事务作为原子从一个一致的数据库状态开始独立运行,则事务结束时数据库也必须是再次是一致的。比如,在转账之前 A + B = 500,那么在转账之后也应是A + B = 500。

  3、 隔离性(isolation):多个并发执行的事务间互不干扰。

  4、 持久性(durability):事务一旦提交,数据库中的数据的改变是永久的,即使数据库出现故障。

三读

  1、 脏读:两个并发事务,事务T2读取了事务T1未提交的数据。如下图,事务T1尚未提交,这时事务T2进来读取了x的值,但是事务T1最终可能不提交而是进行了回滚,这样T2就读取了无效的x。

  2、 不可重复读:在事务内存在多次读取某变量的操作,但是前后读取的值不一样。如下图,事务T2存在两次读取x的操作,但是有可能在第一次读取完的时候,T1事务执行把x值修改,T2再次读取x的值就与第一次读取的结果不一样。

  3、 幻读:在某个事务内前后执行了相同的操作(如查询结果集),但得到的结果集不一样。如下图,T1在T2执行的过程中进行了插入操作,导致T2前后查询结果不一致。

事务隔离性级别

  1、 可串行化(serializable):最高隔离级别,通常保证可串行化调度,可避免脏读、不可重复读和幻读的发生。读时加表级共享锁,事务结束释放;更新时加表级排他锁,事务结束后释放。

  2、 可重复读(repeatable read):可避免脏读、不可重复读。读时加行级共享锁,直到事务结束释放;更新时加排他锁,直到事务结束后释放。(mysql默认隔离级别)

  3、 已提交读(read committed):可避免脏读。读时加行级共享锁,读完释放;更新时加行级排他锁,事务结束后释放。

  4、 未提交读(read uncommitted):最低隔离级别,允许读取未提交数据。更新时加排他锁,更新完释放。

原文地址:https://www.cnblogs.com/X-huang/p/10952761.html

时间: 2024-08-07 22:57:50

数据库三范式、事务的相关文章

戏谈数据库三范式

数据库三范式想必大家并不陌生,官方的解释很抽象,初学者比较难理解.对于这块知识,我是看了会,会了忘,忘了再看.每当别人问我的时候,必须先看看教材,回顾一段时间才能理清. 为什么当别人提问时不能立马把三范式的经典思想说出来呢?通过听米老师的"如何高效学习"这堂课,我发现原因是我自己没有融入到三范式中,三范式没有和自己发生关系.下面,我用三个有趣的小故事帮助大家快速.深刻的理解三范式的含义. 第一范式,官方解释:关系模式R的每个关系r的属性值都是不可分的原子值.这个官方解释还不算太难,比如

数据库三范式是什么?

第一范式(1NF):字段具有原子性,不可再分.所有关系型数据库系统都满足第一范式) 数据库表中的字段都是单一属性的,不可再分.例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段. 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF). 要求数据库表中的每个实例或行必须可以被惟一地区分.通常需要为表加上一个列,以存储各个实例的惟一标识.这个惟一属

秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助.本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式. 第一范式(列不可拆分) 如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了.简单点说就是不能有表中表,所以关系数据库都满足第一范式.例子略. 第二范式(完全依赖) 第二范式是在第一范式的基础上,保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分). 比如要设计一个订单信息表,因为订单中可能会

数据库三范式 无重复列 完全依赖主键 属性不依赖非主属性

细说数据库三范式 2.1 第一范式(1NF)无重复的列 第一范式(1NF)中数据库表的每一列都是不可分割的基本数据项       同一列中不能有多个值       即实体中的某个属性不能有多个值或者不能有重复的属性.       简而言之,第一范式就是无重复的列. 在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库. 2.2 第二范式(2NF)属性完全依赖于主键[消除部分子函数依赖] 满足第二范式(2NF)必须先满足第一范式(1NF

数据库---视图,触发器,事务,存储过程 ,函数,流程控制, 索引与慢查询优化,测试索引,数据库三范式(简介)

视图 1.什么是视图 ? 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 2.为什么要用视图 ? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调 1.在硬盘中,视图只有表结构文件,没有表数据文件 2.视图通常是用于查询,尽量不要修改视图中的数据 drop

数据库三范式的理解

画好e-r图,简单的设计好表结构以后,就需要进行三范式检验. 第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解: 即表中所有字段仅包含单值.(反例,用户表中一个人可能有多个银行账户,多个值存储同一单元,违反1NF).第二范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性: 要求数据表中每个记录或实例需要唯一区分(引入id),要求实体属性完全由主键决定,而且是完全依赖,即如果主键有2个字段,仅由其中一个主键决定的就违反2NF.第三范式:3NF是对字段冗余性的约

数据库 三范式

说到软件开发 就不能不说数据库 说到数据库 就不能不说三范式 其实数据库范式一共有六个 除了第一 二 三范式以 外还有第四 第五范式和一个BC范式  在此我们只讨论三范式 有兴趣的朋友可以自己找一些专业的书籍进一步学习 第一范式(1NF) 第一范式是指数据库表的每一列都是不可分割的基本数据项 同一列中不能有多个值 即实体中的某个属性不能有多个 值或者不能有重复的属性  这就是第一范式的基本概念 什么意思呢 举个例子吧 在一个表里有一个"电话"字段 其值既有手机号 又有座机号 那么 这样

数据库三范式的简单理解

数据库范式 范式的级别 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小. 目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).巴斯-科德范式(BCNF).第四范式(4NF)和第五范式(5NF,又称完美范式). 范式越高,冗余最低,一般到三范式,再往上,表越多,可能导致查询效率下降.所以有时为了提高运行效率,可以让数据冗余(反三范式,一般某个数据经常被访问时,比如数据

数据库三范式

1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物; 3NF:每列都与主键有直接关系,不存在传递依赖; 不符合第一范式的例子(关系数据库中create不出这样的表): 表:字段1, 字段2(字段2.1, 字段2.2), 字段3 ...... 存在的问题: 因为设计不出这样的表, 所以没有问题; 不符合第二范式的例子: 表:学号, 姓名, 年龄, 课程名称,