【数据库系统概念】第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版——机械工业出版社
- 【数据库系统概念】第4章 中级SQL 知识总结
- 【数据库系统概念】第5章 高级SQL 知识总结
- 《数据库系统概念(第6版)》读书笔记——第5章:中级SQL
- 【数据库系统概念】第14章 事务 知识总结
- 【数据库系统概念】第1-3章 数据库基础知识入门 知识总结
- 【数据库系统概念】第7章 数据库设计和E-R模型 知识总结
- 【数据库系统概念】第6章 形式化关系查询语言 知识总结
- 【数据库系统概念】第11章 索引与散列 知识总结
- 《数据库系统概念(第六版)》读书笔记——第6章:高级SQL
- 数据库系统概念(第四章:SQL)
- [心得]数据库系统概念知识整理
- 【笔记】数据库--中级SQL
- SQL server数据库知识总结
- SQL 数据库知识学习总结
- 数据库以及SQL知识总结
- 大连理工大学软件学院数据库复习——SQL语句(《数据库系统概念第6版》)
- 数据库系统概念 sql 查询语句 读书笔记
- SQL Server数据库程序设计知识总结
- JavaScript资源大全
- UTF-8字符串在lua中的字长问题
- 消息列队
- mysql--数据操纵语言DML
- jQuery学习笔记
- 【数据库系统概念】第4章 中级SQL 知识总结
- 使用类的重载实现不同数据类型之间的运算
- 不使用第三个变量逆置字符串
- 你知道position吗?
- dsoframer-在线编辑office文档,一款开源的由微软提供
- HDU 1978 How many ways(记忆化搜索)
- 代码代码,你还记得我吗,我是强说着忧愁的孩子啊!
- 健康睡眠联想
- 强制Html5视频全量加载方法步骤详解