DATABASE SYSTEM CONCEPTS-Chapter4 Intermediate SQL
连接条件
on
在on语句后写具体的条件
1 | select * from student join takes on student.ID = takes.ID; |
外连接
外连接运算与自然连接运算类似,只不过通过在结果中创建空值的方式,保留了在连接中丢失的元组
- 左外连接:left outer join,只保留左边这张表的元组
- 右外连接:right outer join,只保留右边那张表的元组
- 全外连接:full outer join,保留出现在关系中全部的元组
- 内连接:inner join,不保留未匹配元组
1 | select * from student natural left outer join takes; |
左外连接和右外连接是对称的
视图
创建视图
1 | create view view_name as (查询表达式) |
例如,需要访问instructor关系中除salary之外的所有数据的职员
1 | create view faculty as |
一般不允许对视图关系进行修改
视图更新可能存在问题,比如在插入数据时,如果视图的属性列少于基本表,那么可能会出现以下两种情况
- 拒绝插入
- 向基本表中插入元组,未赋值的属性值为null
删除视图
1 | drop view view_name |
事务
事务(transaction)由查询语句(select)和更新语句(update)的序列组成
- commit work:提交当前事务,将事务所做的更新在数据库中长久保存
- rollback work:回滚当前事务,撤销该事务中所有SQL语句对数据库的更新
一旦事务执行了commit work,就不能通过rollback work撤销了
一个较好的选择是,允许多条SQL语句包含在关键字begin atomic……end
之间,这些SQL语句构成单一事务
完整性约束
- 主码约束
- not null
- unique
- check
- 参照完整性
默认值
default
1 | create table s |
create table 的拓展
创建与现有表的模式相同的表
例如,创建一个与instructor具有相同模式的新表temp_instructor
1 | create table temp_instructor like instructor; |
授权
SQL标准包括select
insert
update
delete
grant
语句用来授予权限
1 | grant 表级权限 on 关系名或视图名 to 用户/角色列表 |
例如,授予数据库用户Amit和Satoshi在department关系上的select权限,授予数据库用户Amit和Satoshi在department关系的budget属性上的update权限,
1 | grant select on department to Amit,Satoshi; |
revoke
语句用来收回权限
例如,收回授予数据库用户Amit和Satoshi在department关系上的select权限
1 | revoke select on student to Amit,Satoshi; |
角色
在数据库中建立角色集,并授予每个角色一定的权限,然后将角色分配给用户
1 | create role instructor; |
角色可以授予给用户,也可以授予给其他角色