0%

数据库chp9-数据定义

DDL:data definition language,这个章节放在了在前面,但实际上先学的chp10,因此在chp10也草草介绍了一下create。好多概念啊,也不知道重不重要

Overview for SQL

  • DDL语句引导词:Create(建立), Alter (修改), Drop(撤消)
    • 模式的定义和删除,包括定义Database, Table, View, Index,完整性约束条件等,
      也包括定义对象(RowType⾏对象, Type列对象)
    • 创建和删除模式schema、域domain、表、视图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|False
  • char(LEN)定长
  • varchar(LEN)变长
  • int|integer
  • numeric(p, q)固定精度数字,小数点左边p位,右边p-q位
  • date2022-05-01
  • time00:00:00

约束

integrity enhancement feature -IEF

required data

必须有值:Not null

domain constraints

域约束(域是什么?合法值的集合。例如,员⼯性别的域是“男 女”),以下以性别为例(COLNAME=sex,取值范围为{男,女})

check
1
2
sex char not null  
check(sex in('M','F')

check子句只能引用已定义列

create domain
1
2
3
create domain DOMAINNAME as DATATYPE
[default OPTION]
[check(searchCondition)]

以性别列为例:

1
2
3
4
create domain SexType as char
check(value in('M', 'F'));
check(value in(select子查询));
sex SexType not null

更常用,可复用

撤销域约束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

例子

建表:

image-20220510152817557

修改表alter:image-20220510153219573

删除drop:

1
drop table TAB [restrict|cascade]

schema

1
2
create schema [NAME|authorization CREATOR]
drop schema NAME [restrict|cascade]

index

1
2
create [unique] index NAME on TAB(COL);
drop index NAME;

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
2
3
4
GRANT {PrivilegeList | ALL PRIVILEGES}
ON ObjectName
TO {AuthorizationIdList | PUBLIC}
[WITH GRANT OPTION]
  • 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
2
3
4
5
REVOKE [GRANT OPTION FOR] 
{PrivilegeList | ALL PRIVILEGES}
ON ObjectName
FROM {AuthorizationIdList | PUBLIC}
[RESTRICT | CASCADE]
  • ⼦句 GRANT OPTION FOR 允许通过 GRANT 语句中的 WITH GRANT OPTION 传递的那些权限被独立地撤销。
  • 用户从其他用户那里获得的权限,并不受这个 REVOKE 语句的影响。
    image-20220617142158864
    • A赋予B权限,连带传到C,D,A通过cascade撤回赋予B的权限则C,D权限也无。
    • 但由于E曾给C同样权限,因此C仍有权限。D是否有?