数据库基础概念
关系模型部分
1.关系数据库由表(table)的集合组成。
2.关系(relation)用来指代表,元组(tuple)用来指代行,属性(attribute)用来指代列。
3.超码是一个或多个属性的结合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。如果集合K是超码,那么K的任意超集也是超码,也就是超码中可能夹杂“无用”的属性,因此通常更关心最小的超码,最小超码称为候选码。
4.我们用主码这个术语来代表被数据库设计者选中的用来在一个关系中区分不同元组的候选码。习惯上,一个关系的主码属性列在其他属性前面。
5.一个关系(如r1)可能在它的属性中包括另一个关系模式(如r2)的主码,则该属性在r1上称作参照r2的外码。关系r1也称为外码依赖的参照关系,r2叫做外码的被参照关系。
6.默认情况下,SQL中外码参照的是被参照关系中的主码属性,同时SQL也可以手动显示地指定被参照关系属性列表的references子句,但该属性列表必须是被参照关系的候选码。
初级SQL
1.定义关系时需要用的常见的完整性约束:
| SQL语句 | 功能 |
|---|---|
| primary key(属性1,属性2,…,属性n) | 声明关系的主码为(属性1,属性2,…,属性n) |
| foreign key(属性1,属性2,…,属性n) | 声明关系中所有元组在属性1,属性2,…,属性n上的取值必须对应于关系s中某元组在主码属性上的取值 |
| not null | 作用于属性,写在属性后方,表明该属性不允许空值 |
2.drop table r 删除关系r,delete from r 只删除r中所有元组。
3.多关系SQL查询通用形式:
|
|
4.自然连接运算作用于两个关系,并产生一个关系作为结果。不同于两个关系上的笛卡尔积,自然连接只考虑那些在两个关系模式中都出现的属性上取值相同的元组对。(例如r1(A,B),r2(B,C),自然连接后为:r(A,B,C))
5.as更名运算old-name as new-name
6.like操作符来实现模式匹配。百分号(%)代表任意字符串(可能为空),下划线(_)代表任意一个字符。
7.集合运算:并(union)、交(intersect)、差(except),例如对两个查询结果取并集:
|
|
注意要区别于逻辑运算:与(and)、或(or)、非(not)。
8.聚集函数:类似于avg()、max()、count()等,如果不希望聚类函数作用于单个元组集上,可以使用group by子句实现分组聚集。例如“找出每个系的平均工资”这个意图可以使用以下实现:
|
|
9.having子句:略。
10.with子句提供定义临时关系的方法,这个定义只对包含with子句的查询有效。使用方式:
|
|
使用 (select max(A) from r1) 得到临时关系r(A) ,并将r(A)用在后续的查询中。
10.隐式的连接相当于作笛卡尔积,例如select * from r1, r2; 。
11.一般在on子句中指定连接条件,在where子句中出现其余的条件。
12.外连接(outer join)可以保留值为空的元组。例如:一个学生没有选修任何课程,那么在student关系中的元组与takes关系中的元组配对是与该生有关的元组会不满足自然连接的条件,导致结果中不会出现该生的结果。如果希望结果中出现该生,则需要使用外连接。不保留未匹配元组的连接运算被称作内连接(inner join)。
13.外连接分为三种:
<1>左外连接(left outer join):只保留出现在左外链接运算左边的关系中的元组。1>
<2>右外连接(right outer join):只保留出现在右外链接运算右边的关系中的元组。2>
<3>全外连接(full outer join):保留出现在两个关系中的元组。3>
14.整个逻辑模型暴露给所有用户是不恰当的,处于安全考虑需要隐藏特点的数据。SQL允许通过查询定义“虚关系”,它在概念上包含查询的结果,虚关系并不预先计算并存储,而是使用时才通过执行查询被计算出来。此类不是逻辑模型一部分但作为虚关系对用户可见的关系称为视图。
视图的定义方式:create view view1 as select A, B from r1, r2; 。
15.事务 (transaction)由查询和(或)更新语句的序列组成。SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务。结束一个事务仅可能由于提交(Commit)当前事务或回滚(Rollback)当前事务。默认方式下,每个SQL语句自动成一个事务,一旦执行完就提交。如果一个事务要执行多条SQL语句,就必须关闭单独SQL语句的自动提交。
16.一致性约束:规定数据库中的数据必须符合某种一致性条件,保证用户对数据库所做的修改不会破坏数据的一致性。当需要增加一个已有关系的完整性约束时,首先要保证关系满足该约束,若不满足则拒绝执行上述命令。
17.单个关系上的约束有:属性名 类型名 not null、unique(属性1,属性2,…)、check(P)。
18.参照完整性:保证在一个关系中给定属性上的取值也在另一个关系的特定属性集的取值中出现,这种情况称为参照完整性。
19.索引是在关系模式上创建的一种数据结构,他允许数据库系统高效地找到关系中那些在索引属性上取给定的元组,而不用扫描关系中的所有元组。如果用户调教的SQL查询能从索引中获益,那么SQL会自动使用索引。
在关系r的A属性上创建索引的语法形式是:create index your_index_name on r(A);。
20.SQL标准包括select、insert、update、delete权限。一个创建了新关系的用户将自动被授予该关系上的所有权限。权限的授予(收回)语法形式为:
|
|
21.角色是一类用户,可以直接向角色授予(收回)权限来批量维护权限。角色可以授予给用户。
创建角色的语法:create role role1;
将角色授予给用户的语法:grant role1 to user1;
22.触发器是一条语句,当对数据库修改时,它自动被系统执行。触发器是一种非常有用的机制,用来满足特定条件时对用户发警报或自动开始执行某种任务。
常见面试题
1.数据库事务的四个特性(ACID)及含义:
原子性(Atomicity):整个事务中的所有操作,要么全部完成要么全部不完成,若发送错误则回滚,执行完成则提交。
一致性(Correspondence):事务前后完整性约束不被破坏。
隔离性(Isolation):状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
持久性(Durability):事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
2.视图可以更改吗?
视图主要用于简化检索,保护数据,并不用于更新,而且大部分视图都不可以更新。