DDL:data definition language,这个章节放在了在前面,但实际上先学的chp10,因此在chp10也草草介绍了一下create。好多概念啊,也不知道重不重要
Overview for SQL
- DDL语句引导词:Create(建立), Alter (修改), Drop(撤消)
- 模式的定义和删除,包括定义Database, Table, View, Index,完整性约束条件等,
也包括定义对象(RowType⾏对象, Type列对象) - 创建和删除模式schema、域domain、表、视图view和索引index等数据库对象
- 模式的定义和删除,包括定义Database, Table, View, Index,完整性约束条件等,
- DML语句引导词:Insert , Delete, Update, Select
- 各种⽅式的更新与检索操作,如直接输⼊记录,从其他Table输⼊
- 各种复杂条件的检索,如连接查找,模糊查找,分组查找,嵌套查找等
- 各种聚集操作,求平均、求和、…等,分组聚集,分组过滤等
- DCL语句引导词:Grant, Revoke
- 安全性控制:授权和撤消授权
DDL
database
1 | create database DB |
table
1 | create table(COL1 数据类型 [Primary key|Unique][Not null], COL2...) |
- Primary key:主键
- Unique:候选键,唯一性
- Not null:非空约束
数据类型
boolean
:True|Falsechar(LEN)
定长varchar(LEN)
变长int|integer
numeric(p, q)
固定精度数字,小数点左边p位,右边p-q位date
2022-05-01time
00:00:00
约束
integrity enhancement feature -IEF
required data
必须有值:Not null
domain constraints
域约束(域是什么?合法值的集合。例如,员⼯性别的域是“男 女”),以下以性别为例(COLNAME=sex,取值范围为{男,女})
check
1 | sex char not null |
check子句只能引用已定义列
create domain
1 | create domain DOMAINNAME as DATATYPE |
以性别列为例:
1 | create domain SexType as char |
更常用,可复用
撤销域约束drop domain DOMAINNAME [restrict|cascade]
entity integrity
实体完整性
- primary key子句
- 组合关键字
primary key(COL1,COL2)
- 组合关键字
- unique保证列的唯一性
unique(COL)
referential integrity
引用完整性,外部关键字必领是⽗表中已存在的有效的元组。
1 | foreign key(COL) references 父表 |
在⼦表中若试图用INSERT 和 UPDATE 操作,创建与⽗表中候选关键字不匹配的外部关键字,SQL 则会拒绝该操作。
⽽在⽗表中,若试图用 UPDATE 和DELETE 操作,更新或删除与⼦表有匹配⾏的候选关键字,SQL 将根据 FOREIGN KEY ⼦句中的 ON UPDATE 或 ON DELETE ⼦句 来决定如何执⾏该操作。
1 | foreign key(COL) references TAB on update|delete cascade|set null|set default|no action |
- cascade:删除⽗表中的⾏并且自动删除⼦表中匹配的⾏
- set null:删除⽗表中的元组,且设置⼦表中的外部关键字为 NULL。只有当外部关键字列没有指定为 NOT NULL 时,这样做才是有效的。
- set default:删除⽗表中的元组,且设⼦表中的外部关键字为默认值。只有当外部关键字 列指定了 DEFAULT 值时,这样做才是有效的。
- no action:拒绝对⽗表进⾏删除操作。ON DELETE 规则的默认设置为NO ACTION。
general constraints
一般性约束
- unique
- check
- assertion
1 | create assertion NAME check(searchCondition) |
类似创建域domain
constraint子句
1 | constraint NAME |
例子
建表:
修改表alter:
删除drop:
1 | drop table TAB [restrict|cascade] |
schema
1 | create schema [NAME|authorization CREATOR] |
index
1 | create [unique] index NAME on TAB(COL); |
view
table是实表,view是虚表,根据特定用户的要求临时⽣成。DBMS 在数据库中只存储视图定义。
视图引用
- 视图分解resolution:查找视图定义,将对视图的查询转换为对基表的查询
- 视图物化materialization:把视图存 储在数据库的临时表中,并在基表变化时更新临时表以及时维护视图。物化的难点在于,基表更新的同时还要保证视图的实时性。
create view
1 | create view NAME [视图的列名表] as select子查询 [with [cascade|local] check option] |
- 如果给出列名表,那它必须与subselect ⼦句产⽣的列数目相同。
- 如果省略列名表,视图中列的名宇即采用subselect ⼦句中相应列的名宇。
- 视图类别:
- horizontal水平视图:限制行,where
- vertical垂直视图:限制列,只有指定列能被查看
- 分组视图:有group by
- 连接视图:有多表
视图更新
视图可更新的充要条件:?
with check option
视图更新后判断是否还满足条件
视图维护
maintenance,更新基表的同时引起物化视图更新的过程
优缺点
DCL
访问控制
access control
授权标识符Authorization identifier:是 SQL 用于辨别用户的⼀般标识符。可用授权标识符来确定用户可访问哪些数据库对象,以及对哪些对象能进⾏ 什么操作。
所有者ownership:SQL 中创建的每个对象都有⼀个所有者。所有者就是创建该对象所属的模式时AUTHORIZATION ⼦句定义的授权标识符。
权限privilege:是指允许用户对指定基表或视图进⾏的操作
grant
1 | GRANT {PrivilegeList | ALL PRIVILEGES} |
- PrivilegeList 用逗号分开的⼀个或多个权限组成,关键词
ALL PRIVILEGES
表示全部权限 - Objecevame 可以是基表、视图、域、序列或转变规则的名字
- AuthorizationIdList表示一个或多个用户名,关键词
PUBLIC
表示对所有用户 WITH GRANT OPTION
⼦句允许 AuthorizationtdList 中的用户将他们拥有的对指定对象的权限传递给其他用户。
1 | GRANT SELECT, UPDATE(col1,col2) ON tab/view TO user1, user2 WITH GRANT OPTION |
表示给user1,user2授予对某表或视图的查询 和修改col1,col2列的权利,并允许传递。
revoke
1 | REVOKE [GRANT OPTION FOR] |
- ⼦句 GRANT OPTION FOR 允许通过 GRANT 语句中的 WITH GRANT OPTION 传递的那些权限被独立地撤销。
- 用户从其他用户那里获得的权限,并不受这个 REVOKE 语句的影响。
- A赋予B权限,连带传到C,D,A通过cascade撤回赋予B的权限则C,D权限也无。
- 但由于E曾给C同样权限,因此C仍有权限。D是否有?