数据库学习笔记4(SQL中级)
数据库学习笔记4(SQL中级)
1.连接表达式(Join Expression)
1.连接条件
-
关键词on
-
on条件可以表示任何SQL谓词
-
from student join takes on student.ID=takes.ID
2.外连接
-
外连接通过在结果中创建包含空值元组的方式,保留了那些在连接中丢失的元组
-
有三种形式的外连接
1.左外连接(left outer join) 只保留出现在左外连接运算之前的关系中的元组
2.右外连接(right outer join) 只保留出现在右外连接运算之后的关系中的元组
3.全外连接(full outer join) 保留出现在两个关系中的元组
-
不保留未匹配元组的连接运算被称作内连接
-
当join子句中没有使用outer前缀,默认的连接类型是inner join
3.视图
-
SQL允许通过查询来定义虚关系,它在概念上包含查询的结果。虚关系并不预先计算并存储,而是在使用虚关系的时候才通过执行查询被计算出来
-
不是逻辑模型的一部分但作为虚关系对用户可见的关系称为视图
-
视图定义
-
creat view v as < query expression >
-
如果用于定义视图的实际关系改变,视图也跟着修改,这样的视图称为物化视图(materialized view)
-
视图的更新
-
视图的更新会修改原来的数据
-
一般来说,只有下面的条件都满足,视图才是可更新的
1.from子句中只有一个数据库关系
2.select子句只包含关系的属性名,不包含任何表达式,聚集或distinct声明
3.任何没有出现在select子句中的属性可以取空值,即这些属性上没有not null 约束,也不构成主码的一部分
4.查询中不含有group by 或 having 子句
4.事务(transaction)
-
事务必须满足4个条件
1.原子性
2.一致性
3.隔离性
4.持久性
-
Commit work提交当前事务,也就是将该事务所做的更新在数据库中持久保存。在事务被提交后,一个新的事务自动开始
-
Rollback work回滚当前事务,即撤销该事务中所有SQL语句对数据库的更新。这样,数据库就恢复到执行该事务第一条语句之前的状态
5.完整性约束
-
单个关系上的约束
1.not null
2.unique
3.check<>
-
check子句
check(P)子句指定一个谓词P,关系中的每个元组都必须满足谓词P
-
参照完整性(referential integrity)
当违反残照完整约束时,通常的处理是拒绝执行导致完整性破坏的操作,但在foreign key 子句中可以指明:如果被参照关系上的删除或更新动作违反了约束,系统可以采取一些步骤修改参照关系中的元组来恢复完整性约束,而不是拒绝这样的操作
这样的声明有:on delete cascade 和 on update cascade
6.SQL数据类型和模式
1.大对象类型
- SQL提供字符数据的大对象数据类型(clob)和二进制数据的大对象类型(blob)
2.用户定义的数据类型
- 可以用 creat type子句来定义新类型
- domain可以在基本类型上施加完整性约束
7.授权(Authorization)
-
我们可能会给一个用户在数据库的某些部分授予几种形式的权限,对数据的权限包括
-
- 读取数据(read/select)
- 插入数据(insert)
- 更新数据(update)
- 删除数据(delete)
-
SQL标准包括select,insert,update和delete权限和所有权限(all privileges)
-
SQL数据定义语言包括授予和收回权限的命令,grant语句用来授予权限
-
grant <权限列表> on <关系名或视图名> to <用户/角色列表>
-
grant select on dept to Amit
-
同样,我们可以使用revoke语句来收回权限
8.角色(role)
-
我们可以在数据库中建立一个角色集,可以给角色授予权限,就和给每个用户授权的方式完全一样
-
grant dean to Amit create role dean grant instructor to dean grant dean to Satoshi