为提升和巩固个人现有知识水平,选择牛客网的选择题进行练习,仅作为个人总结,分享给有需要的人,如有错误,请纠正,万分感谢!
摘自 百度百科 —— 数据库系统
数据库系统的基本要求:
① 保证数据的独立性。数据和程序相互独立有利于加快软件开发速度,节省开发费用。
② 冗余数据少,数据共享程度高。
③系统的 用户接口简单,用户容易掌握,使用方便。
④确保系统 运行可靠,出现故障时能迅速排除;能够保护数据不受非受权者访问或破坏;能够防止错误数据的产生,一旦产生也能及时发现。
⑤ 有重新组织数据的能力,能改变数据的存储结构或数据存储位置,以适应用户操作特性的变化,改善由于频繁插入、删除操作造成的数据组织零乱和时空性能变坏的状况。
⑥具有 可修改性和 可扩充性。
⑦能够 充分描述数据间的内在联系。
摘自 牛客网评论
数据库的直接目标:解决数据存储问题
数据库的根本目标:为了不同用户或应用程序之间的数据共享
摘自 维基百科 —— 数据库管理系统 、 MBA智库 —— 数据库管理系统
数据库管理系统(DBMS):
是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。为管理数据库而设计的 大型电脑软件管理系统。具有代表性的数据管理系统有:Oracle、Microsoft SQL Server、Access、MySQL及PostgreSQL等。通常数据库管理师会使用数据库管理系统来创建数据库系统。
【答】数据库管理系统的主要作用是 _____ 。
A.实现数据的统一管理以及对数据库数据的一切操作
B.收集数据
C.进行数据库的规划、设计、维护等工作
D.提供数据查询界面
【问】数据库管理系统的工作不包括( )。
A.定义数据库
B.对已定义的数据库进行管理
C.为定义的数据库提供操作系统
D.数据通信
摘自 牛客网评论
数据库管理系统要做的工作通常有以下四个方面: ①描述数据库;②管理数据库;③维护数据库;④ 数据通讯。
摘自 牛客网评论
SQL是高级的非过程化编程语言,它允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解其具体的数据存放方式。而它的界面,能使具有底层结构完全不同的数据库系统和不同数据库之间,使用相同的SQL作为数据的输入与管理。 SQL 决定了应该做什么而不是如何去做 。
摘自 各大网站零碎的学习笔记
数据查询语言(DQL): select语句
数据操纵语言(DML): insert, update, delete
数据定义语言(DDL): create(创建) , alter(修改) , drop(删除) , rename(重命名), truncate(删除表中的数据)
数据控制语言(DCL): grant(授权), revoke(回收权限),lock(对数据库的特定部分进行锁定)
控制语句(TCL): commit(提交) , rollback(回滚) , savepoint(记录点,用来回滚)
摘自 菜鸟教程 —— MySQL 存储过程
存储过程是什么:
存储过程是一种 在数据库中存储复杂程序,以便外部程序调用的一种数据库对象 。为完成 特定功能的SQL语句集 ,经编译创建并保存 在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想:数据库 SQL 语言层面的代码封装与重用 。
优点:
可封装,并隐藏复杂的商业逻辑。
可回传值,并可接受参数。
无法使用 SELECT 指令来运行(因为它是子程序),与查看表,数据表或用户定义函数不同。
可以用在数据检验,强制实行商业逻辑等。
缺点:
往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
存储过程的性能调校与撰写,受限于各种数据库系统。
本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?
原子性 Atomicity:一个原子事务中的所有操作要么全部成功,要么全部失败。
一致性 Consistency:数据库总是从一个一致性的状态转换到另一个一致性的状态。
隔离性 Isolation:针对并发事务而言,事务必须在不干扰其他进程或事务的前提下独立执行。
永久性(持续性) Durability:一旦事务提交成功,它对于数据的修改就会永久保存到数据库中,此时即使系统崩溃,修改的数据也不会丢失(磁盘损坏不包括,需要靠备份等)。
【答】 数据库事务的4个特征是:原子性、一致性、持续性(永久性)、隔离性。
【问】在并发控制技术中,最常用的是封锁机制,基本的封锁类型有排它锁 X 和共享锁 S ,下列关于两种锁的相容性描述不正确的是( )
A.X/X :TRUE
B.S/S:TRUE
C.S/X:FALSE
D.X/S:FALSE
摘自 牛客网评论,本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?
如果具有排他锁(X 锁),则在释放排他锁(X 锁)之前,其他事务均无法获取该资源的任何类型(共享、更新或排他)的锁。
如果共享锁(S 锁)已应用到资源,则即使第一个事务尚未完成,其他事务也可以获取该项的共享锁或更新锁(U 锁)。但是,在释放共享锁之前,其他事务无法获取排他锁。
摘自 牛客网评论
两段锁协议:每个事务的执行可以分为两个阶段: 生长阶段(加锁阶段) 和 衰退阶段(解锁阶段)
加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁,在进行写操作之前要申请并获得X锁。 加锁不成功,则事务进入等待状态,直到加锁成功才继续执行 。
解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段, 在该阶段只能进行解锁操作不能再进行加锁操作 。
两段锁协议要求 每个事务中,所有的封锁请求先于所有的解锁请求 ,事务T1前面都是加锁阶段阶段,后面都是解锁阶段满足要求。而事务T2又加锁又解锁,不满足要求。
【答】已知事务T1 的封锁序列为:LOCK S(A)…LOCK S(B)…LOCK X( C)…UNLOCK(B) …UNLOCK (A) …UNLOCK ( C)
事务T2 的封锁序列为:LOCK S(A) …UNLOCK (A) …LOCK S(B)
…LOCK X( C) …UNLOCK ( C) …UNLOCK (B)
则遵守 两段封锁协议 的事务是( )。
A.T1
B.T2
C.T1和T2
D.没有
【问】可串行化调度肯定是正确的并发调度?
摘自 本人博客详解 —— 数据库事务的四大特性(ACID),四种隔离级别,如何避免脏读、不可重复读、幻读(如何加锁)?
事务隔离级别 脏读 ② 不可重复读③ 幻读④ 未提交读[Read Uncommitted] 允许 允许 允许 已提交读[Read Committed] 禁止 允许 允许 可重复读[Repeatable Read] 禁止 禁止 允许 可串行化[Serializable] 禁止 禁止 禁止 上表中,在相同运行环境下,不同隔离级别的顺序按照并发性由高到低,隔离性由低到高排序。
事务提交后就不能回滚了
摘自 牛客网评论
关系的描述称为关系模式,可 形式化为R(U,D,DOM,F)。 R为关系名,U是组成该关系的属性名集合,D是属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。 通常将关系模式简记为R(U)或R(A1,A2,…,An),其中R为关系名,U为属性名集合,A1,A2,…,An为各属性名。
摘自 百度知道 —— 二维表是什么数据模型 、 牛客网评论
关系数据模型的数据结构: 逻辑结构是一张二维表(Table,简称表) ,由行和列组成。其常用术语有:
① 关系模式(Relational Schema):对应一个 二维表的表头,它 对应E-R模型中的实体型,是相对稳定的。
② 属性(Attribute): 二维表中的一列即为一个属性,给每一个属性起一个名称即属性名。它们与E-R模型中实体型的属性相同。
③ 关系(Relation):对应通常所说的 一张二维表,它与E-R模型中的实体集对应。
④ 元组(Tuple):二维表中 除表头以外的一非空行即为一个元组,元组与E-R模型中的实体对应。
⑤ 候选键(Candidate Key):二维表中的某些属性的集合,它 可以唯一确定一个元组。一个关系可以有若干个候选键,通常选择一个作为主键(Primary Key)。它们分别与E-R模型中的关键字和主关键字对应。
⑥ 域(Domain); 属性的取值范围。属性的域同E-R模型中属性的域意义相同。
⑦ 分量(Attribute Value): 元组中一个属性所取的具体值。
数据模型分类:数据库系统可以分为 层次模型、 网状模型、 关系模型,树结构为层次数据模型的,网结构为网状数据模型的。
部分摘自 维基百科 —— 关系代数 (数据库) 与 百度百科 —— 关系运算
传统集合运算符:并(∪),差(-),交(∩)
专门的关系运算符:选择(σ),投影(π),连接(⋈),除法(÷)
基本关系运算:并(∪),差(-),笛卡尔积(×),投影(π),选择(σ)
集合 R , S , T 颜色如下:
并(UNION):设有两个关系R和S,它们具有相同的结构。R和S的并是由属于R或属于S的元组组成的集合,运算符为∪。记为T=R∪S。图示如下:
差(DIFFERENCE):设有两个关系R和S,它们具有相同的结构。R和S的差是由属于R但不属于S的元组组成的集合,运算符为-。记为T=R-S。图示如下:
交(INTERSECTION):设有两个关系R和S,它们具有相同的结构。R和S的交是由既属于R又属于S的元组组成的集合,运算符为∩。记为T=R∩S。R∩S = R -(R-S)。图示如下:
笛卡尔积(直积):两个集合A和B的笛卡尔积表示为A × B,第一个对象是X的成员,第二个对象是Y的所有可能有序对的其中一个成员。记为 A×B={(x,y)|x∈A∧y∈B}。
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}选择:从关系中找出满足给定条件的那些元组,筛选符合条件的行。
投影:从关系模式中挑选若干属性组成新的关系,筛选符合条件的列。
连接:从两个关系的笛卡尔积中选择属性间满足一定条件的元组。
除法:可理解为笛卡尔积的逆运算。
【答】在下列4 个选项中,不属于基本关系运算的是
A.连接
B.投影
C.选择
D.比较
【问】在查询优化策略中,首先应该让投影操作尽可能早的做,然后再尽可能早的进行选择运算?
CSDN 猪哥原创——关于sql和MySQL的语句执行顺序(必看!!!)
这篇文作者真的讲得太透彻了!下面是学习笔记(仅为个人理解,如有错误请指正,谢谢! ),部分概念摘自 菜鸟教程 —— SQL 篇 、51CTO —— 数据库频道
在下面过程中,每一步都会为生成一个虚拟表,作为下一步的输入:
from ① ——> join ② ——> on ③ ——> where ④ ——> group by ⑤——> avg,sum… ⑥ ——> having ⑦ ——> select ⑧——> distinct ⑨ ——> order by ⑩ ——> limit ⑪
【注】
① from ——> ② join(如果有) 【选择】:
为 确定需要查询的表范围 。从前往后,每次将join前后的表【join前:如果是第一个join就是单个真实表,如非第一个join就是虚拟表;join后:单个真实表】进行笛卡尔积,生成虚拟表,然后执行③
③ on(如果有)【选择】:
筛选出满足条件的元组 ,生成虚拟表【如果on后还有join,重回②,如非进④】
④ where(如果有)【选择】:
对③得到的最终虚拟表进行 筛选过滤 ,生成虚拟表
⑤ group by(如果有)【选择】:
用于结合聚合函数(⑥中的函数), 根据一个或多个列 (group by后面的语句决定)对结果集进行 分组 ,生成虚拟表,进⑥
⑥ avg,sum…(如果有)【选择】:
将group by后组内元组(行)根据【avg/sum/…】 进行结合运算 ,最终 每组不论多少元组(行)只生成一元组(行) ,生成虚拟表
⑦ having (如果有)【选择】:
将⑥生成的虚拟表 按分组数据按条件进行筛选 ,生成虚拟表
⑧ select 【投影】:
将⑦虚拟表中的 属性(列)筛选 ,生成虚拟表
⑨ distinct(如果有)【选择】:
只 保留 ⑧完成后 不相同的元组 (如果之前运用过⑤则不存在元组相同的部分)
⑩ order by(如果有):
这一步在排序后返回的是游标而不是集合(集合中的元组之间只是逻辑组合,没有顺序;将元组按特定的顺序组织在一起返回的对象称为游标), 对表进行排序
⑪ limit (如果有)【选择】:
选取 指定的条数的数据
摘自 牛客网评论
R x S 元祖数为 9
R ∩ S 元祖数为 1
R U S 元祖数为 5
R - S 元祖数为 2
部分摘自 菜鸟教程 —— SQL连接(JOIN)
SQL join 用于把来自两个或多个表的行结合起来。
下图展示 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。
INNER JOIN:如果表中有至少一个匹配,才返回行
LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
FULL JOIN:只要其中一个表中存在匹配,则返回行
本题解析:
假设Student表和Dorm表如下:
Student表
stu_id name 1 ling 2 xu Dorm表
dorm_id room_id bed_id stu_id 1 1 1 2 1 1 2 null 学生xu选择了床位1,学生li没有选择床位,床位2没有被占用。
当 Student 表和 Dorm 表进行在stu_id属性上进行连接时:
1. 使用内连接(Student inner join Dorm on stu_id),只有stu_id互相匹配时才会显示,即:
stu_id name dorm_id room_id bed_id 2 xu 1 1 1 2. 如果使用左外连接(Student left join Dorm on stu_id),即使Dorm表中没有匹配的行,也要从Student表中返回所有行,对应的Dorm表的属性显示null值补齐。但这样2号床不会显示。
stu_id name dorm_id room_id bed_id 1 ling null null null 2 xu 1 1 1 3. 如果使用右外连接(Student right join Dorm on stu_id),即使Student表中没有匹配的行,也要从Dorm表中返回所有行,对应的Student表的属性显示null值补齐。但这样1号学生不会显示。
stu_id name dorm_id room_id bed_id 2 xu 1 1 1 null null 1 1 2 4. 使用全外连接(Student full outer join Dorm on stu_id),两个表的有匹配和没有匹配的行都会显示。
stu_id name dorm_id room_id bed_id 1 ling null null null 2 xu 1 1 1 null null 1 1 2
摘自 牛客网评论
链接:
题目要求的是关系代数中的seita连接操作,运算条件1<2,实际上是用列号来代替相应的属性,实现效果:即 用R中的每一行的第一个分量的值与S中每一行的第二个分量值进行比较,如果 满足条件,则 进行列连接操作,那么实际上可以转化成先进行笛卡尔积运算,这样 S中的第2列合并以后就变成了第4列了, 将符合条件的行留下来就行。
摘自 牛客网评论
投影:选取相应列组成新元组
连接:在多个关系的笛卡尔积中进行筛选出的新关系
交:是多个关系之间交集所产生的新的关系
指定元组通过选取得到,如 select *** where ***
摘自 牛客网评论
投影功效:
消除原关系中的某些列
消除投影后重复的元组,因此元组也有变少的可能
摘自 百度百科 —— 数据库完整性 、 菜鸟教程 —— SQL CHECK约束 、 菜鸟教程 —— SQL DEFAULT约束
数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证。
在关系模型中有四类完整性约束: 实体完整性 、 域完整性 、 参照完整性 和 用户定义的完整性,其中实体完整性和参照完整性约束条件,称为关系的两个不变性。系统在进行更新、插入或删除等操作时都要检查数据的完整性,核实其约束条件,即关系模型的完整性规则。
实体
关系数据库的完整性规则是数据库设计的重要内容。绝大部分关系型数据库管理系统RDBMS都可自动支持关系完整性规则,只要用户在定义(建立)表的结构时,注意选定 主键 、 外键 及其 参照表 ,RDBMS可自动实现其完整性约束条件。
实体完整性(Entity Integrity): 表中行的完整性 。主要用于保证操作的数据(记录)非空、唯一且不重复。即实体完整性 要求每个关系(表)有且仅有一个主键,每一个主键值必须唯一,而且不允许为“空①”(NULL)或重复 。
【注】
①其中的空值(NULL)不是0,也不是空隔或空字符串,而是没有值。是指暂时“没有存放的值”、“不知道”或“无意义”的值。因为主键是实体数据(记录)的惟一标识,若主属性取空值,这与实体的定义矛盾。
域完整性(Domain Integrity)
指数据库表中的 列必须满足某种特定的数据类型或约束 。其中约束又包括取值范围、精度等规定。表中的 CHECK②、FOREIGN KEY 约束和DEFAULT③、 NOT NULL定义都属于域完整性的范畴 。
【注】
②CHECK 约束用于 限制列中的值的范围 。如果对单个列定义 CHECK 约束,那么该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
③DEFAULT 约束用于 向列中插入默认值 。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
参照完整性(引用完整性)(Referential Integrity)
属于 表间规则 。对于永久关系的相关表,在更新、插入或删除记录时,如果只改其一,就会影响数据的完整性。如删除父表的某记录后,子表的相应记录未删除,致使这些记录称为孤立记录。对于更新、插入或删除表间数据的完整性,统称为参照完整性。
在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值 。
要求:若属性组F是关系模式R1的主键,同时F也是关系模式R2的外键,则在R2的关系中,F的取值只允许两种可能:空值或等于R1关系中某个主键值。
R1称为“被参照关系”模式,R2称为“参照关系”模式。(外键不一定与对应的主键同名。外键常用下划曲线标出。)
用户定义完整性(User-defined Integrity)
是 对数据表中字段属性的约束 ,用户定义完整性规则(User-defined integrity)也称域完整性规则。包括字段的值域、字段的类型和字段的有效规则(如小数位数)等约束,是 由确定关系结构时所定义的字段的属性决定 的(如,百分制成绩的取值范围在0~100之间等)。
【答】设属性A是关系R的主属性,则属性A不能取空值(NULL)。这是()
A.实体完整性
B.参照完整性
C.用户定义完整性
D.域完整性
【问】数据库的( )是指数据的正确性和相容性
A.并发控制
B.完整性
C.安全性
D.共享性
摘自 百度百科 —— 数据库完整性ql/sql-default.html)
数据库完整性(Database Integrity)是指数据库中数据在逻辑上的一致性、正确性、有效性和相容性。数据库完整性由各种各样的完整性约束来保证。
【答】数据库的( )是指数据的正确性和相容性
A.并发控制
B.完整性
C.安全性
D.共享性
【问】小明设计了如下的学籍管理系统:(PK为主键,FK为外键)
已知关系:
学籍(学号,学生姓名) PK=学号
成绩(科目号,成绩,学号) PK=科目代码,FK=学号
已有表记录如下,请给出能够插入的成绩记录:
A.(1,99,2)
B.(5,68,1)
C.(3,70,3)
D.(7,45,null)
部分摘自 百度百科 —— 数据库完整性ql/sql-default.html)
在关系数据库中,关系之间的联系是通过公共属性实现的。这个公共属性经常是一个表的主键,同时是另一个表的外键。参照完整性体现在两个方面:实现了表与表之间的联系,外键的取值必须是另一个表的主键的有效值,或是“空”值 。
本题解析:
A.主键科目号"1"已存在,不可重复
C.主键科目号"3"已存在,不可重复
D.外键的取值必须是另一个表的主键的有效值,或是“空”值
摘自 百度百科 —— 数据库三级模式
数据库领域公认的标准结构是三级模式结构,包括 外模式 、概念模式 、内模式 ,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。
用户级对应外模式,概念级对应概念模式,物理级对应内模式,使不同级别的用户对数据库形成不同的视图①。
【注】①视图:指观察、认识和理解数据的范围、角度和方法,是数据库在用户“眼中"的反映。
外模式(子模式/用户模式)
对应于 用户级 。是某个或某几个用户所看到的数据库的数据视图,是与某一应用有关的数据的逻辑表示。是从模式导出的一个子集, 包含模式中允许特定用户使用的那部分数据 。用户可以通过外模式描述语言来描述、定义对应于用户的数据记录(外模式),也可以利用数据操纵语言(Data Manipulation Language,DML)对这些数据记录进行操作。外模式反映了数据库系统的用户观。
概念模式(模式/逻辑模式)
对应于 概念级 。它是由数据库设计者综合所有用户的数据,按照统一的观点构造的全局逻辑结构,是 对数据库中全部数据的逻辑结构和特征的总体描述 ,是所有用户的公共数据视图( 全局视图 )。它是由数据库管理系统提供的数据模式描述语言(Data Description Language,DDL)来描述、定义的。概念模式反映了数据库系统的整体观。
内模式(存储模式)
对应于 物理级 。它是数据库中全体数据的内部表示或底层描述,是数据库最低一级的逻辑描述,它描述了数据在存储介质上的存储方式和物理结构 ,对应着实际存储在外存储介质上的数据库。内模式由内模式描述语言来描述、定义的。内模式反映了数据库系统的存储观。
在一个数据库系统中,只有唯一的数据库, 因而作为定义 、描述数据库存储结构的 内模式 和定义、描述数据库 逻辑结构 的模式,也是 唯一 的,但建立在数据库系统之上的应用则是非常广泛、多样的,所以对应的 外模式不是唯一 的,也不可能是唯一的。
综上
类别 级别 内容 内模式(存储模式) 物理级别 全体数据的内部表示或底层描述 模式(概念模式/逻辑模式) 概念级别 数据库设计者构造的全局逻辑结构 外模式(子模式/用户模式) 用户级别 全局中的子集,给用户的
【答】在数据库的三级模式结构中,描述数据库中 全体数据的全局逻辑结构和特征 的是( )
A.外模式
B.内模式
C.存储模式
D.模式
概念模型独立于 ( )
A.E-R模型
B.硬件设备和DBMS
C.操作系统和DBMS
D.DBMS
【问】数据库系统达到了数据独立性 是因为采用了 ( )。
A.层次模型
B.网状模型
C.关系模型
D.三级模式结构
摘自 百度百科 —— 数据库三级模式
数据库领域公认的标准结构是三级模式结构,包括 外模式 、概念模式 、内模式 ,有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性 。
摘自 之前总结的各大网站零碎笔记
数据库 三级模式体系结构 的划分,有利于 保持数据库的数据独立性 。
三级模式之间提供了两级映像:
模式/内模式的映像 、 外模式/模式的映像 。这两级映射 保证数据库中的数据具有较高的物理独立性和逻辑独立性 。
数据的物理独立性:
当数据库的 内模式发生改变时,数据的的逻辑结构不变 。由于应用程序处理的只是数据的逻辑结构,这样物理独立性可以保证,当数据的物理结构改变了,应用程序不用改变。但是,为了保证应用程序能够正确执行,需要修改概念模式/内模式之间的映像。
数据的逻辑独立性:
用户的 应用程序与数据库结构相互独立 。数据的逻辑结构发生变化后,用户程序也可以不修改。但是,为了保证应用程序能够正确执行,需要修改外模式/概念模式之间的映像。
本人博客详解 —— 数据库设计的1NF+2NF+3NF+BCNF的故事,只一篇就搞懂
1NF:关系中的每个属性都不可分。
2NF:在1NF基础之上,消除了非主属性对于码(键)的部分函数依赖。
3NF:在2NF基础之上,消除了非主属性对于码(键)的传递函数依赖。
BCNF:在3NF基础之上,消除了主属性对码(键)的部分函数依赖和传递函数依赖。
本人博客详解 —— 数据库设计的1NF+2NF+3NF+BCNF的故事,只一篇就搞懂
1NF:关系中的每个属性都不可分。
视图 :从一个或几个基本表 ( 或其他视图 ) 导出的表 。
数据字典:是 描述数据的信息集合 ,是对系统中使用的所有数据元素的定义的集合。
指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。
是一种用户可以访问的记录数据库和应用程序元数据的目录。 主动数据字典 是指在对数据库或应用程序结构进行修改时,其内容可以由DBMS自动更新的数据字典。 被动数据字典 是指修改时必须手工更新其内容的数据字典。栗子如下:
摘自 百度百科 —— 触发器 (数据库原理术语)
触发器(trigger):SQL server 提供给程序员和数据分析员来 保证数据完整性 的一种方法,它是与表事件相关的特殊的存储过程。是 当对某一个表进行操作 。
它的执行不是由程序调用,也不是手工启动,而是 由事件来触发 ,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
作用:
可在写入数据表前, 强制检验或转换数据 。
触发器发生错误时, 异动的结果会被撤销 。
部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。
可依照特定的情况,替换异动的指令 (INSTEAD OF)。
分类(SQL Server 包括三种常规类型的触发器):
DML 触发器 :当数据库 表中的数据发生变化时 ,包括insert,update,delete任意操作,如果我们对该表写了对应的DML触发器,那么该触发器自动执行。DML触发器的主要作用在于 强制执行业务规则,以及扩展Sql Server约束,默认值 等。因为我们知道约束只能约束同一个表中的数据,而触发器中则可以执行任意Sql命令。
DDL 触发器 :主要用于审核与规范对数据库中表,触发器,视图等结构上的操作。比如在修改表,修改列,新增表,新增列等。它 在数据库结构发生变化时执行 ,我们主要用它来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。
登录触发器 :将 在登录的身份验证阶段完成之后且用户会话实际建立之前激发 。因此,来自触发器内部且通常将到达用户的所有消息(例如错误消息和来自 PRINT 语句的消息)会传送到 SQL Server 错误日志。如果身份验证失败,将不激发登录触发器。
摘自 —— 牛客网评论
- b-tree索引
Oracle数据库中最常见的索引类型是b-tree索引,也就是B-树索引,以其同名的计算科学结构命名。
CREATE INDEX语句时,默认就是在创建b-tree索引。没有特别规定可用于任何情况。- 位图索引(bitmap index)
特定于该列只有几个枚举值 的情况,比如性别字段,标示字段比如只有0和1的情况。- 基于函数的索引
比如经常对某个字段做查询的时候是 带函数操作 的,那么此时建一个函数索引就有价值了。- 分区索引和全局索引
这2个是用于 分区表 的时候。前者是分区内索引,后者是全表索引。- 反向索引(REVERSE)
这个索引不常见,但是特定情况特别有效。
「比如一个varchar(5)位字段(员工编号)含值(10001,10002,10033,10005,10016…)。这种情况默认索引分布过于密集,不能利用好服务器的并行,但是反向之后10001,20001,33001,50001,61001就有了一个很好的分布,能高效的利用好并行运算。」
6.HASH索引
HASH索引可能是访问数据库中数据的最快方法,但它也有自身的缺点。集群键上不同值的数目必须在创建HASH集群之前就要知道。需要在创建HASH集群的时候指定这个值。使用HASH索引必须要使用HASH集群。
摘自 之前各大网站零碎的笔记 、 牛客网评论
索引越多数据库检索不一定越快:
对于在查询中很少使用或者参考的列不应该创建索引。相反,由于增加了索引,反而降低系统的维护速度和增大空间需求。
字段索引,会提高检索速度,降低写入速度。因为在插入字段时,还要添加索引,所以写入速度会降低。
本题解析:
A. 索引需要额外的磁盘空间,一索引页,包含着索引记录,每条索引记录包含键值和逻辑指针。
B. 索引不会提升写效率 。
C. 常见数据库管理系统通常使用 B+树 来存储索引。(底层:B+树或者哈希表,但99%用B+树,因为哈希对范围查找支持很低)
D. 删除相关字段需要动态维护索引,故效率降低 。
摘自 牛客网评论
索引的特点:
加快检索数据的速度
通过创建唯一性索引,可以 保证数据库表中每一行数据的唯一性
加速表与表之间的连接
查询语句汇总 含有分组或者排序的语句时,速度更快
查询的过程中,使用索引、优化隐藏器,从而 提高系统的性能
create table T(
k INT UNSIGNED NOT NULL AUTO_INCREMENT,
a DATE,
b varchar(24),
c INT,
d varchar(24),
PRIMARY KEY(k),
UNIQUE KEY a_index(a DESC,b DESC),
KEY k1(b),
KEY k2(c),
KEY k3(d)
)
如下哪些sql语句查询能较好的利用索引 ?()
A. select b from T WHERE b like ‘aaa%’;
B. select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC;
C. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC;
D. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b;
摘自 牛客网评论
4个选项中的sql语句可以分为两类:
没有使用排序:(A),使用排序:(B,C,D)。
对于 没有使用排序的查询 ,可以直接通过查询索引返回所需要的结果;对于 使用排序的查询语句 在利用索引的同时,排序是否也利用索引进行排序而不是进行外部排序(explain 中的using filesort)。
选项A . select b from WHERE b like ‘aaa%’:
根据条件b查询,使用的是索引k1,由于通过索引查询,索引列包含结果b。(select b)因此只需要通过查询索引,而不需要在访问原表即可得到最终结果。
like操作:like 中 %若位于开头则无法比较,只能全表扫描。
选项B. select a,b from T WHERE a=‘2015-10-25’ ORDER BY b ASC,c ASC:
通过索引a_index(a,b)完成,而排序中的字段b,c无法通过索引直接来排序,因此需要再次使用外部排序最终获取结果。
选项C. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY b ASC:
通过explain可以看到使用了a_index索引,由于a字段在查询时使用了常量,因此b满足最左前最的条件,可以使用索引排序。
选项D. select a,b,c from T WHERE a=‘2015-10-25’ ORDER BY a,b:
显然排序可以直接通过索引a_index完成,而不需要额外的filesort.
摘自 知乎 —— DBC文件到底是个啥
DBC是Database Can的缩写,代表CAN的数据库文件,在这个文件中把CAN通讯的信息定义的非常完整清楚,CAN网络的通讯依据这个文件的描述进行。DBC文件的作用非常强大,正是因为有了它才可以使得整个CAN网路的节点控制器无差错的协同同步开发。
摘自 牛客网评论
归档模式(Archivelog):可以 在线或离线备份数据库 ,可以是 全备份或者是部分备份(单个表空间|数据文件) ;能够做到零数据丢失,但是归档会消耗一些存储和性能资源。
非归档模式(No-Archivelog):只能 离线备份 而且必须备份 所有的数据文件,控制文件,日志文件查询运行模式 。
1.【问】当 局部 E-R 图合并成全局 E-R 图 时可能出现 冲突 , 不属于 合并冲突的是( )。
A.属性冲突
B.语法冲突
C.结构冲突
D.命名冲突
摘自 CSDN —— 合并分ER图产生的冲突
夜晚的海滨小镇 - 皮璐宇
子系统E-R图之间的冲突主要有三类: 属性冲突①、 命名冲突②和 结构冲突③。
【注】
①属性冲突:
属性值的 类型 、 取值范围 或 取值集合 不同
②命名冲突:
同名异义、异名同义
③结构冲突:
1. 同一对象在不同应用中具有不同的抽象 。
(职工在某一局部应用中被当作实体,而在另一局部应用中则被当作属性)
2. 同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同 。
3. 实体间的联系在不同的E-R图中为不同的类型 。
(实体E1与E2在一个E-R图中是多对多联系,在另一个E-R图中是一对多联系)
1.【答】当 局部 E-R 图合并成全局 E-R 图 时可能出现 冲突 , 不属于 合并冲突的是( )。
A.属性冲突
B.语法冲突
C.结构冲突
D.命名冲突
1.【问】若系统在允许过程中,由于某种 硬件故障,使存储在外存上的数据部分损失或全部损失 ,这种情况称为( )。
A.事务故障
B.系统故障
C.介质故障
D.运行故障
摘自 牛客网评论
数据库常见四种故障:
事务内部故障:
分为预期的和非预期的,大部分为预期的。
预期的事务内部故障:可以通过事务程序本身发现的事务内部故障; 非预期的事务内部故障:不能由事务程序处理的,如运算溢出故障、并发事务死锁故障、违反了某些完整性限制而导致的故障等。
系统故障(软故障):
数据库在运行过程中,由于 硬件故障、 数据库软件及 操作系统的漏洞、 突然停电灯情况,导致系统停止运转,所有正在运行的事务以非正常方式终止,需要系统重新启动的一类故障。这类事务 不破坏数据库,但是影响正在运行的所有事务。
介质故障(硬故障):
主要指数据库在运行过程中,由于 磁头碰撞、 磁盘损坏、 强磁干扰、 天灾人祸等情况,使得数据库中的 数据部分或全部丢失的一类故障。
计算机病毒故障:
一种恶意的计算机程序,它可以像病毒一样繁殖和传播,在对计算机系统造成破坏的同时也可能对数据库系统造成破坏(破坏方式以数据库文件为主) 。
1.【问】若系统在允许过程中,由于某种 硬件故障,使存储在外存上的数据部分损失或全部损失 ,这种情况称为( )。
A.事务故障
B.系统故障
C.介质故障
D.运行故障
摘自 SQL语句执行过程详解 —— thychan(简书)
SQL语句执行原理: 客户端把语句传送到服务器端执行 ——> 语句解析【 查询高速缓存 ——(如果Cache里没有对应) ——> 语句合法性检查 ——> 语言含义检查① ——> 获得对象解析锁 ——> 数据访问权限的核对 ——> 确定最佳执行计划②】 ——> 语句执行③ ——> 提取数据④
注:
① 语言含义检查:对语句中的字段、表等内容进行检查。
② 确定最佳执行计划:当服务器进程的优化器确定这条查询语句的最佳执行计划后,就会将这条 SQL 语句与执行计划保存到数据高速缓存。如此的话,等以后还有这个查询时,就会省略以上的语法、语义与权限检查的步骤,而直接执行 SQL 语句,提高 SQL 语句处理效率。
③语句执行:若被选择行所在的数据块已经被读取到数据缓冲区,则服务器进程会直接把这个数据传递给客户端;若数据不在缓冲区中,则服务器进程将从数据库文件中查询相关数据,并把这些数据放入到数据缓冲区中。
④提取数据:把查询到的数据结果返回给用户端进程。
摘自 牛客网评论
CASCADE:表的删除没有限制条件,在 删除基本表的同时,相关的依赖对象(如视图)都将被删除 。
RESTRICT:表的删除是有条件限制的,要 删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数等 。如果存在这些依赖该表的对象,则表不能被删除
摘自 之前学习各大网站的笔记拼凑
删除表的语句 :drop、truncate、delete:
定义:
drop: 完全删除表,包括表结构,释放空间。将 删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是 变为invalid状态 。
delete: 删除表数据,不释放空间,保留表的结构。可以 加where,只删除一行或者多行。
truncate: 只能删除表数据,释放空间,会保留表结构。 不能加where, 对于 由 FOREIGN KEY 约束引用的表以及参与了索引视图的表都不可用。
相同点与不同点
相同:truncate 和不带 where 子句的 delete, 以及 drop 都会删除表内的数据。
不同:
- truncate 和 delete 只删除数据不删除表的结构(定义) ,drop 语句将删除表的结构被依赖的约束(constrain), 触发器(trigger), 索引(index);但依赖于该表的存储过程/函数将保留, 只是变为 invalid 状态。
- delete 语句是 dml(数据操纵语言insert, update, delete), 这个操作 会放到回滚段中, 事务提交之后才生效; 如果有相应的触发器,执行的时候将被触发。 truncate, drop 是 ddl(数据定义语言【create(创建), alter(修改), drop(删除), rename(重命名), truncate(删除表中的数据)】), 操作立即生效, 原数据不放到 rollback segment 中, 不能回滚。 操作不触发 trigger。
- delete 语句不影响表所占用的 extent, 高水线(high watermark)保持原位置不动 。 drop 语句 将表所占用的空间全部释放 。 truncate 语句缺省情况下将空间释放到 minextents 个 extent, 除非使用 reuse storage; truncate会将高水线复位(回到最开始)。
- 速度:一般来说: drop > truncate > delete 。
- 安全性: 小心使用 drop 和 truncate, 尤其没有备份的时候。
Truncate 和 delete对比:
- truncate table 命令将快速删除数据表中的所有记录,但保留数据表结构。这种快速删除与 delete from 数据表的删除全部数据表记录不一样,delete 命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate 命令删除的数据是不可以恢复的。
- DELETE 语句每次删除一行,就在事务日志中 为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中 记录页的释放。TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变,新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。
- 在删除时如果 遇到任何一行违反约束(主要是外键约束), TRUNCATE TABLE仍然删除,只是表的结构及其列、约束、索引等保持不变,但 DELETE是直接返回错误;
- 对于 由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而 应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。TRUNCATE TABLE 不能用于参与了索引视图的表。
删除部分数据行用 delete, 注意带上 where 子句,回滚段要足够大。 删除表, 用 drop。 想保留表而将所有数据删除,如果和 事务无关, 用 truncate 即可; 如果和 事务有关, 或者想触发 trigger, 还是 用 delete。
如果是整理表内部的碎片, 可以用 truncate 跟上 reuse stroage, 再重新导入/插入数据。
where在分组前过滤,having在分组后过滤,两者之间不冲突。
【答】关于数据库,下列描述中,正确的是()
A.having 和where都是用来筛选用的,having是筛选组,而where是筛选记录
B.在sql中,关键字delete表示直接删除表,而drop表示删除表中数据
【问】订单表 ( 订单号,雇员代号,地区代号,订购日期 ) 中订单号为主键,要 删除订单中前三年以前的信息, SQL 为:
A.delete from 订单表 where 订购日期
摘自 牛客网评论
DATEADD() 函数:在日期中添加或减去指定的时间间隔。
DATEADD(datepart①,number②,date③)
【注】
①datapart取值范围 :{yy/yyyy,qq/q,mm/m,dy/y,dd/d,wk/ww,dw/w,hh,mi/n,ss/s,ms,mcs,ns}
②number :希望添加的间隔数
③date :合法的日期表达式
【答】订单表 ( 订单号,雇员代号,地区代号,订购日期 ) 中订单号为主键,要 删除订单中前三年以前的信息, SQL 为:
A.delete from 订单表 where 订购日期
关系规范化中的插入操作异常是指 应该插入的数据未被插入
插入异常:该插入的没插入
删除失败:该删除的没删除
删除异常:不该删除的被删除
摘自 牛客网评论
导出整个数据库:
mysqldump -u 用户名 -p 数据库名 > 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
导出一个表:
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
导出一个数据库结构:
mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table
摘自 Microsoft —— 备份文件和文件组
【注】
①差异数据库备份:记录自上次完全数据库备份之后对数据库的更改的数据库备份 。
②文件和文件组备份:当数据库大小和性能要求使完整数据库备份显得不切实际,则可以创建文件备份。 文件备份包含一个或多个文件(或文件组)中的所有数据 。
摘自 CSDN —— MySQL数据库开发的36条原则
避免使用NULL字段:
NULL字段弊端:很难进行查询优化;NULL列加索引,需要额外空间;含NULL复合索引无效
举例:
a
char(32) DEFAULT NULL 【不推荐】
b
int(10) NOT NULL 【不推荐】
c
int(10) NOT NULL DEFAULT 0 【推荐】
少用并拆分TEXT/BLOB:
TEXT类型处理性能远低于VARCHAR ,其强制生成硬盘临时表,浪费更多空间
如果业务需要必须用,建议拆分到单独的表
举例:CREATE TABLE t1 ( id INT NOT NULL AUTO_INCREMENT, data TEXT NOT NULL, PRIMARY KEY(id) ) ENGINE=InnoDB;
2.【答】以 MySQL 5.7 或更低版本为准的数据库中,如何 正确选择和使用合适的数据类 ()
A.更小通常更好
B.尽量用最简单的数据类型
C.尽量不使用 Null 作为字段值
D.字符串较长时优先用 Text 数据类型
2.【问】 在Access数据库中,对数据表进行删除的是()
A.总计查询
B.操作查询
C.选择查询
D.删除查询
摘自 牛客评论
操作查询包括生成表查询① 、删除查询 ②、更新查询 ③和追加查询④ 等4种。
【注】
①生成表查询:利用一个或多个表中的全部或部分数据创建新表
②删除查询:从一个或多个表中删除一组记录,将删除整个记录,而不是只是记录所选择的字段
③更新查询:对一个或多个表中的一组记录作全部更新
④追加查询:从一个表中将一组记录添加到一个或多个表的尾部。
2.【答】 在Access数据库中,对数据表进行删除的是 操作查询 。
1.【问】在Visual FoxPro 中,关系数据库管理系统所管理的关系是
A.一个DBF文件
B.若干个二维表
C.一个DBC 文件
D.若干个DBC 文件
摘自 牛客网评论
在关系模型的概念中, 一个关系就是一张二维表 ,每个关系有一个关系名。在Visual FoxPro中,一个关系存储为一个文件,文件名扩展名为.dbf,称为“表”。
1.【答】在Visual FoxPro 中,关系数据库管理系统所管理的关系是
A.一个DBF文件
B.若干个二维表
C.一个DBC 文件
D.若干个DBC 文件
红
橘
蓝