数据库系统概念笔记CH4(下)

数据库系统概念笔记CH4(下)

第四章:中级SQL

4.4完整性约束

完整性约束保证授权用户对数据库所做的修改不会破坏数据的一致性。

单个关系上的约束:

  • not null

    --该声明表示该变量不能为空值
    name varchar(20) not null
    budget numeric(12,2) not null
    

    SQL禁止在关系模式的主码中出现空值

  • unique

    unique(A1,A2...,An)
    --说明上述属性构成了一个候选码
    --不能存在两个元组在上述属性上的取值都相同
    
  • check(<谓词>)

    create table section (
    course_id varchar (8),
    sec_id varchar (8),
    semester varchar (6),
    year numeric (4,0),
    building varchar (15),
    room_number varchar (7),
    time slot id varchar (4),
    primary key (course_id, sec_id, semester, year),
    check (semester in (’Fall’, ’Winter’, ’Spring’, ’Summer’)) 
        --限定季节只能是这四种中的一个
    );
    
    参照完整性

    用于保证一个关系中给定属性的取值也在另一个关系的特定属性集的取值中出现。

    外码约束:

    dept_name varchar(20) references department  --声明该属性为外码,受约束于department
    --通常参照完整性的存在,对一个属性的修改如果会影响参照完整性,则系统会拒绝
    
    --但是可以显式调整:
    --on delete cascade 或者  on update cascade
    --例如:
    dept_name varchar(20) references department 
    		on delete cascade
    		on update cascade,
    		
    --这样如果删除或更新会违反参照完整性,则会将该删除或更新应用于所有被参照
    
4.5 SQL的数据类型与模式

日期和时间类型

  • date:日历日期,包括年(4位),月,日

  • time:一天中的时间,包括时,分,秒。显式声明time§指明秒的小数后的位数

  • timestamp: date和time的组合

    和时间相关的几个函数:

  • cast e as t :将字符串e转换成类型t , t可以是date、time、timestamp的一种,当然字符需要符合规范。

  • extract (field from d),从date或者time中提出单独的域,域可以是year、month、day、hour、minute、second中的一种。

  • current_date返回当前日期,current_time返回当前时间,

  • 如果x和y都是时间类型,则 x - y 表示二者的时间间隔

默认值

SQL允许为属性制定默认值,操作如下:

create table student
(ID varchar (5),
name varchar (20) not null,
dept_name varchar (20),
tot_cred numeric (3,0) default 0,
primary key (ID));

在这里tot_cred的默认值为0,意思是如果创建时不为其赋值,则默认为0

大对象类型

  • blob:二进制数据的大d对象数据类型

  • clob : 字符数据类型的大对象数据类型

    book review clob(10KB)
    image blob(10MB)
    movie blob(2GB)
    

用户定义类型

--创建新的数据类型
create type Dollars as numeric (12,2) final;
--创建新的数据类型后便可以调用
create table department
(dept_name varchar (20),
building varchar (15),
budget Dollars);
--创建新的域
create domain person_name char(20) not null;

create domain degree_level varchar(10)
constraint degree_level_test
check (value in (’Bachelors’, ’Masters’, ’Doctorate’));
--域相较于属性,可以增加更多的约束条件,且不是强类型的,也就是如果数据类型相同则可以直接赋值

create table的扩展

--可以根据已有的表建立新表,属性相同
create table temp_instructor like instructor;

create table t1 as
(select *
from instructor
where dept name= ’Music’)
with data; 
4.6 授权

对数据的授权包括:

  • 读取数据 select
  • 插入新数据 insert
  • 更新数据 update
  • 删除数据 delete

权限的授予和收回:

grant语句用来授予权限:

grant <权限列表>    
on <关系名或视图名>
to <用户或者角色列表> 

授予权限的例子:

--授予选择权限
grant  select on department to Amis;
--授予更新权限
grant update(budget) on department to Amis;

revoke收回权限:

revoke <权限列表>    
on <关系名或视图名>
from <用户或者角色列表> 
--收回选择权限
revoke  select on department from Amis;
--授予更新权限
revoke update(budget) on department from Amis;

角色

可以建立角色集,给角色授予权限

--创建角色
creat role instructor;
--授予角色权限
grant select on takes
to instructor;
--角色可以授予给用户,也可以授予给其他角色
grant dean to Amit;
creat role dean;
grant instructor to dean;
grant dean to Satoshi;

视图的授权

create view geo_instructor as
(select *
from instructor
where dept_name = ’Geology’);
The creator of the view must have select authorization on the instructor relation..
grant select on geo_instructor to geo_staff

权限的转移:

grant select on department to Amit with grant option;
--则Amit拥有授予权限的功能

权限的收回:

revoke select on department from Amit, Satoshi restrict;
--表示级联收回权限

你可能感兴趣的:(数据库系统概念笔记CH4(下),数据库,数据库)