程序员面试笔记-数据库2
来源:互联网 发布:达观数据 融资 编辑:程序博客网 时间:2024/06/07 13:50
8.1.8 共享锁与互斥锁
数据库中,锁是一种对数据进行读写操作的保护机制。
- 共享锁简称S锁,也叫读锁,用于不更改或不更新数据的操作。共享锁可以组织其他并发运行的程序获取重叠的独占锁定,但是允许该程序获取重叠的共享锁定。其他用户可以获取共享锁定的资源但是不能进行修改该共享锁。
- 互斥锁简称X锁,也叫排他锁,用于数据修改操作,如insert、update、delete。确保会同时对同一资源进程多重更新。互斥锁用户保证数据的完整性,保证在任意时刻只能有一个线程访问对象。
注意:对锁的使用要遵循俩个原则:1)先加锁再操作2)事务结束后必须解锁。
8.1.9 一二三四范式有何区别
“数据库规范化”,它的目的就是减少数据库中数据冗余,从而增加数据的一致性。
范式是在识别数据库中的数据元素、关系,以及定义所需的表和各表中的项目这些初始工作之后的一个细化的过程(1NF,2NF,3NF,BCNF以及4NF)。
1NF
1NF,第一范式:数据库表的每一类都是不可分割的基本数据项,同一列中不能有个多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。即第一范式就是无重复的列。
2NF
定义:如果关系R为第一范式,并且R中每一个非主属性完全函数依赖于R的某个候选键,则称R为第二范式模式。特点:第二范式在第一范式的基础上建立,因此,满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以被唯一地区分,为了实现区分通常需要为表加上一列,以存储各个实例的唯一标识。例子:选课关系表(学号,课程号,成绩,学分) 关键字为:(学号,课程号) 而非主属性如“学分”部分依赖于课程号,而不是完全依赖。 解决方法:分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分)。
3NF
定义:如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式模式。例子:学生表(学号,姓名,课程号,成绩)其中姓名不重名,因此有学号和姓名两个候选码(学号,课程号)和(姓名,课程号)。则从中函数依赖:学号->姓名,(学号,课程号)->成绩。(姓名,课程号)->成绩,唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖。属于第三范式。
BCNF
定义:如果关系R是第三范式,且每个属性都不传递依赖于R的候选键,则称R为BCNF模式。例子:仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则有 (仓库号,存储物品号)->(管理员号,数量) (管理员号,存储物品号)->(仓库号,数量) 所以(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表中的候选键。表中唯一非关键字属性为“数量”,可以看出此关系目前满足第三范式。但是由于有: (仓库号)->(管理员号) (管理员号)->(仓库号) 即关键字传递依赖于关键字,也就是说有属性传递依赖于R的候选键,因此不是BCNF范式。 解决方法:把仓库管理关系表拆分为仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量)
4NF
定义:如果在R中,D是R的多值依赖集合,如果在D中成立非平凡多值依赖X->Y是,X必为R的超键,称R为第四范式的模式。例子:职工表(职工号,职工孩子姓名,职工选修课程)。在这个关系表中,同一个职工号,会对应多个孩子姓名,同一职工号也会对应多个职工选修课程,所以存在多只事实,不符合第四范式。解决方法:拆分关系为职工表一(职工号,职工孩子姓名);职工表二(职工号,职工选修课程)
8.1.10 取表中指定区间的记录
写一个SQL语句,取出表S中第21到30的记录
+ SELECT Top 10 * From S Where ID>(Select MAX(ID) From (Select Top 20 ID Form S) as S)+ Select Top 10 * From S Where ID NOT IN(SELECT Top 20 ID Form S)
8.1.11 Check约束
check约束是指限制表中某一列或某些列中可接受的数据值或数据个数,用于限制列的取值范围。CHECK(约束表达式)
8.1.12 视图
视图是由从数据库的基本表中选取出来的数据组成的逻辑窗口,它是一个虚表,数据库中只存放视图的定义而不存放视图包含的数据项。
视图的作用:
+ 简化数据查询语句
+ 使用户多角度看待同一数据
+ 提高数据安全性
+ 数据逻辑独立性
阅读全文
0 0
- 程序员面试笔记-数据库2
- 程序员面试 -- 数据库
- 程序员面试-数据库 1
- 程序员面试-数据库3
- 《程序员面试宝典》一些笔记(2)
- 程序员面试笔记2---struct,enum,union
- 《程序员面试宝典第四版》笔记2
- 程序员面试宝典笔记
- 程序员面试宝典笔记
- 程序员面试笔记---数组
- 数据库面试笔记
- 程序员笔试面试--数据库知识
- 【求职】程序员面试宝典--笔记
- 程序员面试笔记5---类
- <<Java程序员面试宝典>>笔记
- 程序员面试宝典知识点笔记
- 程序员面试金典 笔记
- java程序员面试宝典笔记
- 网页中<a>标签属性统一设置新窗口打开
- Hadoop SSH 无密码登陆
- C++学习(六)入门篇——确定常量类型
- 广播接受者 时间很短,不要用耗时的,不要超过16s。 这个运行在主线程。
- HDU 1856 More is better 基础并查集★(经典)
- 程序员面试笔记-数据库2
- 如何成为架构师系列:技术选型1
- app引导页
- 高清摄像头MIPI接口与ARM处理器的连接
- C++ algorithm sort自定义排序
- FFmpeg 编译
- 1039. 到底买不买
- 源码分析 There is no getter for property named '*' in 'class java.lang.String
- 二进制相加