数据库系统概念笔记——第四章:中级SQL

第四章:中级SQL

4.1 连接表达式

4.1.1 连接条件

可以使用 join…using 子句指定自然连接需要匹配的条件

on条件允许在参与有连接的关系的关系上设置通用谓词,该谓词的写法与where子句谓词类似

在on语句后写具体的条件

select * from student join takes on student.ID = takes.ID;
4.1.2 外连接

外连接运算与自然连接运算类似,只不过通过在结果中创建空值的方式,保留了在连接中丢失的元组

三种形式的外连接

  • 左外连接:left outer join,只保留左边这张表的元组
  • 右外连接:right outer join,只保留右边那张表的元组
  • 全外连接:full outer join,保留出现在关系中全部的元组
select * from student natural left outer join takes;

查询结果如下,右边表未匹配上的自动以空值呈现
在这里插入图片描述

4.1.3 连接类型和连接条件

SQL把常规连接叫内连接,使用inner join关键字
此外就是外连接,使用outer join关键字

连接类型和连接条件表
在这里插入图片描述
关于外连接的拓展

  • 可以在表名后加外连接操作符(*)或(+)指定非主体表
  • 非主体表有一个万能的“虚行”,改行全部由空值构成
  • 虚行可以与主表中所有不满足连接条件的元组进行连接

4.2 视图

4.2.1 视图定义
create view view_name[(列名,列名,...)] as (查询表达式)

使用create view可以创建视图,列名为可选项,用户可以指定也可以不指定

4.2.2 SQL查询中使用视图

删除视图

drop view view_name

视图中不会被分配空间,视图中也不会包含实际的数据,视图只保存视图的定义,视图中的数据是从基表中获取的。
视图的数据在视图被引用时动态生成

视图的查询与普通表的查询类似,这里不再赘述

4.2.3 物化视图

在特定的数据库中,允许存储视图关系。如果用于定义视图的基本表中的数据有变化,那么该视图也需要变化

保持物化视图一直处于最新状态的过程被称为视图维护

4.2.4 视图更新

视图更新可能存在问题,比如在插入数据时,如果视图的属性列少于基本表,那么可能会出现以下两种情况

  1. 拒绝插入
  2. 向基本表中插入元组,未赋值的属性值为NULL

因为存在种种问题,因此有的时候不支持对视图的更新,不同的数据库版本对视图更新的限制也不相同

4.3 事务

事务由查询语句(select)和更新语句(update)构成,当一条SQL语句被执行,就隐式地开启了一个事务

  • commit:提交当前事务,将事务所做的更新在数据库中长久保存
  • rollback:回滚当前事务,撤销该事务中所有SQL语句对数据库的更新

当事务执行遇到错误时,回滚是有效的,一旦事务执行了commit,就不能通过rollback撤销了

4.4 完整性约束

在第三章的笔记中已经有了,这里不再赘述

4.5 SQL的数据类型和模式

4.5.1 SQL中的日期和时间类型

在这里插入图片描述

4.5.2 默认值

可以为属性设置默认值

create table s
(
	sex char(1) default '1',
	sno char(5)
)
4.5.3 创建索引
create index studentID_index on studuent(ID);

在student表上的ID属性列创建了索引,名为studentID_index

4.5.4 大对象类型

在数据库中,使用Blob或Clob存放数据量较大的对象

CLOB:字符数据的大对象类型
BLOB:二进制数据的大对象数据类型

4.5.5 用户自定义类型

创建自定义类型的语法

create type 类型名 数据类型
create type person_name char(20)

用户自定义类型的使用

create table S
(
	a1 char(10),
	a2 person_name
);

SQL提供了drop type和alter type子句来删除或修改以前创建过的类型

4.6 授权

一般来说,数据库会给不同的用户设定不同的权限
比如授权某用户只能读取数据,只能插入数据,不能删除等等

4.6.1 权限的授予与收回

授权的语法格式

grant 表级权限 on 关系名或视图名 to 用户/角色列表

例:

grant select on student to admin,Mike,Jack
grant update(budget) on department to Mike

撤销,收回权限

使用revoke关键字收回权限

revoke select on student to admin,Mike,Jack
4.6.2 角色

角色:为了指明一类人应有的授权,提出了角色概念。

在数据库中建立角色集,并授予每个角色一定的权限,然后将角色分配给用户。

#创建角色并给角色相关的权限,最后将角色赋给对应的用户
create role teller;
grant select on account to teller;
grant insert,delete on customer to teller;
grant teller to Jack;
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值