数据库系统概念第4章 中级SQL
join...using
子句,是一种自然连接的形式,只需要在指定属性(两个关系中具有相同名称的属性)上的取值相等。on
条件允许在参与连接(内连接、左连接、右连接、全连接)的关系上设置通用的谓词,写法与where
子句谓词类似。对应的,SQL中把常规连接称作内连接(inner join
),inner
关键字可选,当join子句没有使用outer
前辍,默认的连接类型就是inner join
。
连接类型 |
---|
inner join |
left outer join |
right outer join |
full outer join |
连接条件 |
---|
natural |
on <谓词> |
using(col1, col2,...,coln) |
create view v as <query expression>
create view faculty as
select ID, name, dept_name
from instructor;
特定数据库系统允许存储视图关系,视图的结果会存放在数据库中。但是它们保证:如果用于定义视图的实际关系改变,视图也跟着修改。
这样的视图被称为物化视图(materialized view)。
事务(transaction)由查询和(或)更新语句的序列组成。
Commit work
:提交当前事务,将该事务所做的更新在数据库中持久保存。事务被提交后,一个新的事务自动开始。Rollback work
:回滚当前事务,即撤销该事务中所有的SQL语句对数据库的更新。
关键词work在两条语句中都是可选的。create table
命令上可以包括完整性约束语句。包括:
在一个关系给定属性集上的取值也在另一关系特定属性集的取值中出现,称为参照完整性(referential integrity)。
更一般地,令关系r1和r2的属性集分别为R1和R2,主码分别为K1和K2。如果要求对r2中任意元组t2,均存在r1中元组t1,
使得t1.K1 = t2.a,我们称R2的子集a为参照关系r1中K1的外码(foreign key)。
这种要求称为参照完整性约束(referential integrity constraint)或子集依赖(subset dependency)。
foreign key (dept_name) references department
级联删除,级联更新
create table course(
...
foreign key (dept_name) references department
on delete cascade
on update cascade,
...);
一个断言(assertion)就是一个谓词,它表达了我们希望数据库总能满足的一个条件。域约束和参照完整性约束是断言的特殊形式。
SQL中的断言为如下形式:
create assertion <assertion-name> check <predicate>;
在关系的属性上所创建的索引(index)是一种数据结构,它允许数据库系统高效的找到关系中,
那些在索引属性上取给定值的那些元组,而不用扫描关系中的所有元组。
创建索引的语法形式:
create index student_index on student(ID);
数据库中为解决命名空间问题,提供了三层关系命名机制:最顶层由目录(catalog)构成,每个目录都可以包含模式(schema)。(一些数据库实现用术语"数据库"代替术语"目录")
为了唯一标识一个关系,它包含三部分:
catalog_name.schema_name.table_name
创建和删除模式
create schema
drop schema
对数据的授权包括:
每种类型的授权都称为一个权限(previlege)。
SQL标准包括select、insert、update和delete权限。
grant
语句用来授予权限。
grant <权限列表>
on <关系名或视图名>
to <用户/角色列表>;
grant select on department to User1, User2;
grant update (budget) on department to User1, User2;
revoke
语句用来收回权限。
revoke <权限列表>
on <关系名或视图名>
from <用户/角色列表>;
revoke select on department from User1, User2;
revoke update (budget) on department from User1, User2;
可以为某一类用户设定一个角色,然后给角色授予权限,这类用户就会拥有相同的权限。
create role instructor;
grant select on dependent to instructor;
角色可以授予给用户,也可以授予给其他角色
create role dean;
grant instructor to dean;
grant dean to User1;