【数据库系统概念】第4章 中级SQL 知识总结

来源:互联网 发布:bi开发工程师转行java 编辑:程序博客网 时间:2024/05/29 19:20

《数据库系统概念》第4章知识点总结

中级SQL

以下是几个后面会用到的表



连接条件

on:作用与where类似,但也有不同

on条件:是在生成临时表时用的条件,不管on条件是否为真,都会返回表中记录

where条件:是在生成临时表之后,再对临时表进行过滤的条件,条件不为真的都过滤掉。

 

外连接

左外连接:以左表为基准,只保留出现在左外连接运算之前的关系中的元组

右外连接:以右表为基准,只保留出现在右外连接运算之后的关系中的元组

全外连接:保留出现在两个关系中的元组

这个知识点我还不是很懂,等日后学了再单独发一篇博出来

 

视图

为什么要有视图:出于安全考虑,我们不能让用户看到整个逻辑模型,可能需要向用户隐藏特定的数据,所以我们会希望创建一个比逻辑模型更符合特定用户直觉的个人化的关系集合。

 

视图的定义

用create view 命令定义视图

 

 

在SQL查询中使用视图

已存在视图physics_fall_2009

 

 

物化视图

如果用于定义视图的实际关系改变,视图也跟着修改。这样的视图称为物化视图

 

视图更新

包括更新、插入、删除

当我们给一个视图插入一个新的元组时,由于视图隐藏了一些属性,所以该插入语句中会缺少一些属性,对于这种情况,存在两种合理的解决方法来处理插入:

(1)拒绝插入,并向用户返回一个错误信息

(2)继续插入元组,用null补全缺少的属性

不同的数据库在这个问题上指定了不同的发那个发,请参考数据库系统手册以获得详细信息

一般来说,满足以下所有条件的视图被称为是可更新的:

(1)from子句中只有一个数据库关系

(2)select子句中只包含关系的属性名,不包含任何表达式、聚集或distinct声明

(3)任何没有出现在select子句中的属性可以取控制;即没有not null约束也不是主码

(4)查询中不含有group by或having子句

 

事务

由查询和(或)更新语句的序列组成。当一条SQL语句被执行,就隐式地开始了一个事务

 

结束事务的两个SQL语句

Commit work:提交当前事务,也就是将该事务所做的更新在数据库中持久保存。在事务被提交后,一个新的事务自动开始。

Rollback work:回滚当前事务,即撤销该事务中所有SQL语句对数据库的更新。这样,数据库就恢复到执行该事务第一条语句之前的状态。


完整性约束

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。

 

单个关系上的约束

not null:禁止空值

Unique(A1,A2,...,Am):属性A1,A2,...,Am形成了一个候选码;即在关系中没有两个元组能在所列出的属性上取值相同。

check(<谓词>):用check子句来保证属性值满足指定的条件。

 

参照完整性

references子句:显示指定被参照关系的属性列表

foreign key(dept_name) referencesdepartment

这个外码声明表示,在每个课程元组中指定的系名必须在department关系中存在。

 

断言

一个断言就是一个谓词,它表达了我们希望数据库总能满足的一个条件。


SQL的数据类型与模式

 

SQL中的日期和时间类型

data:日历日期,包括年(四位)、月和日

time:一天中的时间,包括小时、分和秒。可以用变量time(p)来表示秒的小数点后的位数

timestamp:date和time的组合。可以用变量timestamp(p)来表示秒的小数点后的数字位数(默认为6)

 

cast e as t:将字符串e转换成类型t(data、time、timestamp),e的格式必须正确

extract ( field from d ):从data或time值d中提取出单独的域field(year、month、day、hour、minute、second)

current_data:返回当前日期

current_time:返回当前时间(带有时区)

localtime:返回当前的本地时间(不带时区)

时间戳(日期加上时间)由current_timestamp(带有时区)以及localtimestamp(本地日期和时间,不带时区)返回

 

默认值

用default定义

 


创建索引

create index studentID_index onstudent(ID);

上述语句在student关系的属性ID上创建了一个名为studentID_index的索引

在后面几章中我们会详细学习索引是如何实现的

 

大对象类型

clob:字符数据的大对象数据类型

blob:二进制数据的大对象数据类型

 


用户定义的类型

SQL支持两种形式的用户定义数据类型:独特类型和结构化数据类型。我们将在这里介绍独特类型

create type子句:定义新类型,不可声明约束

 

create domain子句:定义一个域,可以声明约束

 

drop type和alter type子句:用来删除或修改以前创建过的类型

 

create table的扩展

create table like可以用来创建与现有的某个表的模式相同的表

 


模式、目录与环境

不知如何总结,日后完善

 

授权

授权包括:授权读取数据、授权插入新数据、授权更新数据、授权删除数据

grant语句用于授予权限     revoke语句用于收回权限



角色

在数据库中建立一个角色集,可以给角色授予权限,就和给每个用户授权的方式完全一样。每个数据库用户被授予一组他有权扮演的角色

创建一个角色:create role instructor

 

视图的授权

 

 

模式的授权

只有模式的拥有者才能够执行对模式的任何修改

references表示该权限

 

 

权限的转移

默认方式下,被授予权限的用户/角色无权把得到的权限再授予给另外的用户/角色。如果我们在授权时允许接受者把得到的权限再传递给其他用户,我们可以在相应的grant命令后面附加with grant option子句。

 

一个对象(关系/视图/角色)的创建者拥有该对象上的所有权限,包括给其他用户授权的权限

 

权限的收回

防止级联收回

 

级联收回:将restrict改为cascade(一般为默认的,所以也可以省去)


 注:图片均来自《数据库系统概念》第6版——机械工业出版社


阅读全文
0 0
原创粉丝点击