数据库学习

第一章 数据模型

一、数据模型

1,层次模型

有很多个(Parent-Child relationship) PCR关系组成的

2,网状模型(Network Data Mode)

3、关系模型(Relational Data Model)

关系 relation:一张表

元组 tuple:表中的一行

属性 attribute:表中的一列

码 key:

域:

分量:

主键(Primary key): 这组属性可以唯一决定其他属性的值

外键(foreign keys):用此属性引用其他表中的元组

二、关系代数

1、投影(projection):从表中选择出若干属性组成新的关系

2、选择(selection):从表中选择满足给定条件的元组

3、并(union):

4、交(intersection):

5、差(execpt):

6、笛卡尔乘积(cross-product):n列2条元组和m列3条元组笛卡尔积后为n+m列2*3条元组

连接(joins)操作:从两个关系的笛卡尔积中选择属性间满足一定条件的元组。

除(division)操作:


第二章 数据库语言

一、SQL查询语言

数据定义

1.1模式的定义与删除

一个关系型数据库管理系统中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式可以建立多个表、视图、索引等数据库对象

模式定义:(调用命令用户要有数据库管理员权限)

create schema "S-T" AUTHORIZATION ZHAO

删除模式:

drop schema ZHAO cascade -- cascade是级联删除(模式下的表视图都将删除) 
                         -- restrict 限制 模式下没有表才能执行

1.2基本表的定义、删除、修改

-- 建立学生student表
create table Student 
( Sno char(9) primary key, -- 列级完整性约束Sno是主码
 Sname char(20) unique,    -- Sname取唯一值
 Ssex char(2),
 Sage SMALLINT,
 Sdept char(20)
 );    
-- 建立一个课程Course表
    create table Course
    (
        Cno char(4) primary key,
        Cname char(40) not null,
        Cpno char(4),
        Ccredit smallint,
        foreign key (Cpno) references Course(Cno) -- Cpno是外码,被参照表是Course的Cno
    )
       

1.2.1修改基本表

alter table 表名

add column 新列名 数据类型 完整性约束

add 完整性约束

drop column 列名 restrict/cascade

drop constraint 完整性约束 restrict/cascade

alter column 列名 数据类型

-- student表增加入学时间
    ALTER TABLE student add s_entrance DATE
    
    -- 将student年龄由char改为int
    alter table student alter column Sage INT
    
    -- 增加CCourse名称必须是唯一值
    alter table course ADD UNIQUE(Cname)

1.2.2 删除基本表

drop table 表名 restrict/cascade(restrict在有限制的条件下无法删除,cascade是可以删除的)

1.3 索引的建立与删除

数据量比较大时,索引虽然能够加速数据库的查询,但也占用一定的存储空间。

建立索引 (unique唯一索引对应唯一数据记录)

create unique/cluster index 索引名

on 表名(列名 asc/desc,列名 ...)

-- 建立索引
  -- student按学号升序建立唯一索引
    create unique index Stusno on student(sno)
    -- course按课程号升序建立唯一索引
    create unique index Coucno on course(cno)
    -- sc表按学号升序课程号降序建立唯一索引
    create unique index SCno on sc(sno asc,cno desc)

修改索引 alter index 旧索引名 rename to 新索引名

删除索引 drop index 索引名

1.4数据字典

数据字典时关系数据库管理系统的一组系统表,它包括数据库中所有定义的信息。

数据查询

select all(默认为all)/distinct(去重)列名1,列名2....

from 表名/视图名

where 条件表达式

group by 列名1..having 条件表达式 (按列名1进行分组,相同的为一组,通常在每组中做聚集函数。若由having则只有满足条件的组才输出)

order by 列名1... asc(升)/desc(降)

1.2.1 单表查询

查询时候

  • 确定范围:between 20 and 23 (在20和30之间也包括20 23),not between 20 and 23
  • 确定集合:in(‘’,‘’,‘’)
  • 字符匹配:列名 [not] like '%-...'      %代表任意长度字符串 -代表任意单个字符                             如果查询字符串带有%或-就escape 如:查询DB_d开头的 where 列名 like 'DB\-d%' escape'\'
  • 空值判断: 列名 is null 列名 is not null
  • order by子句:order by 列名 asc/desc 默认是升序                                                                                             order by 列名1,列名2 desc (按列名1升序排列,在同一列名1中的值按列名2降序排列)
  • 聚集函数:聚集函数只能用于select中或者group by 的having中

count(*)统计元组个数

count(distinct/all 列名)统计一列中值的个数 distinct是去掉重复的个数

sum(distinct/all 列名)统计一列值的总和(此列必须是数值型)

avg(distinct/all 列名)统计一列值的平均数(列必须是数值型)

max(distinct/all 列名)统计一列中的最大值

min(distinct/all 列名)统计一列中的最小值

  • group by子句:
 -- 求各个课程对应选课人数
 select cno,count(sno)
 from sc 
 group by cno 
 -- 查询选修三门及以上课程的学生学号
 select sno
 from sc 
 group by sno having count(*)>=3
-- 查询平均成绩大于等于80的学生学号和平均成绩
select sno,avg(Grade)
from sc 
group by sno having avg(grade)>=80

1.2.3连接查询

自身连接查询:

外连接查询:where 表1 left join 表2 on

1.2.4嵌套查询

嵌套的子查询内不能使用order by 子句,这个只能对最终查询结果排序

  • 带有any或all
-- 查询非计算机科学系中比计算机科学系   任意   一个学生年龄小的学生姓名和年龄
select sname,Sage from student where sdept<>'CS' and Sage < ANY(select Sage from student where sdept ='CS')
    -- 查询非计算机科学系中比计算机科学系  所有  学生年龄小的学生姓名和年龄
select sname,Sage from student where sdept<>'CS' and Sage < all(select Sage from student where sdept ='CS')
  • 带有exists子句查询

带有exists的子查询不返回任何数据,只产生逻辑真假

    -- 查询选修了全部课程的学生姓名(没有一门课是他不选修的)

select sname from student 
where not EXISTS
 (select * from course 
    where not EXISTS 
        (select * from sc 
        where sc.Sno = student.Sno and sc.Cno = course.Cno
        )
)

-- 查询至少选修了学生201215122选修的全部课程的学生号码(不存在这样的课程y,学生201215122选修了y而学生x没有选修)
    select  sno,sname from  student
    where not EXISTS 
    (select * from sc sc1
        where sno='201215122' and not EXISTS
        (select * from sc sc2 
            where student.Sno = sc2.sno and sc1.cno =sc2.cno
        )
    )

1.2.5 集合查询

  • 并操作:union 多个查询结果合并起来会自动去重,若要保留重复元组使用union all
  • 交操作:intersect
  • 差操作:except

1.3数据更新

  • 插入数据:insert into 表名(列名1,列名2)values(‘’,‘’,。。)
  • 修改数据:update 表名 set 列名=表达式 where 条件表达式

更新Salary表中sex字段,如果是f就改为m   如果m改为f

update Salary set sex = case when sex = 'f' then 'm' when sex = 'm' then 'f' else sex end

  • 删除数据:delete from 表名 where 条件()

二、视图

视图是一个或多个基本表导出的表,此表是一个虚表,数据库中只存放视图的定义,不存放视图对应的数据,

  • 建立视图:create view 视图名 (列名...)as 子查询
  • 删除视图:drop view 视图名 cascade
  • 查询视图

试述视图的优点?

答:

(1)视图能够简化用户的操作;

(2)视图使用户能以多种角度看待同一数据;

(3)视图对重构数据库提供了一定程度的逻辑独立性;

(4)视图能够对机密数据提供安全保护。

哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。

答:

   基本表的行列子集视图一般是可更新的。

   若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。

【扩展】所有的视图是否都可以更新?为什么?

答:

   不是。视图是不实际存储数据的虚表,因此对视图的更新,最终要转换为对基本表的更新。因为有些视图的更新不能惟一有意义地转换成对相应基本表的更新,所以,并不是所有的视图都是可更新的。

————————————————

版权声明:本文为CSDN博主「小琪爱学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:数据库系统概论第五版(王珊) 课后习题答案_数据库系统概论第五版课后答案_小琪爱学习的博客-CSDN博客


第三章 数据库的安全性

数据库安全性:保护数据库以防止不合法使用造成数据泄露、更改、破坏。

数据库不安全因素:

1.非授权用户对数据库 的恶意存取和破坏

2.数据库中重要和敏感的数据被泄露

3.安全环境的脆弱性

1、授权与收回

1.1 grant 授权

grant 权限,权限。。(全部权限 all privileges)

on 授权的类型table或。。 对象名表名

to 用户,。。(所有用户 public)

with grant option (并允许此权限授权给其他人)

1.2 revoke 收回

revoke 权限

on 对象类型 对象名

from 用户

2、数据库角色

数据库角色是角色权限的集合,是被命名的一组与数据库操作相关的权限。

2.1、角色的创建

create role 角色名 (刚建的角色是空的可以用grant为角色授权)

2.2、给角色授权

grant 权限,权限。。

on 授权的类型table或 对象名表名

to 角色

with grant option (并允许此权限授权给其他人)

2.3、将一个角色授权给其他角色或用户

grant 角色1,角色2...

on 角色/用户

with grant option

2.4、角色权限的收回

revoke 权限1,权限2

On 对象类型 对象名

from 角色


第四章 数据库完整性

数据库的完整性是指数据的正确性和相容性。

维护数据库完整性,数据库管理系统应该实现

1、提供定义完整性约束条件机制

2、提供完整性检查方法

3、进行违约处理

1、实体完整性

实体完整性在create table 中用primary key


create table student(
sno char(9)primary key, /*列级定义主码*/
sname char(9)
/*primary key(sno)  是表级定义主码*/
);

2、参照完整性

参照完整性在create table 中用foreign key(列名) references 参照表(参照列)

create table sc(

sno char(9),

cno char(9),

primary key(sno,cno),/*是表级定义主码*/

foreign key(sno) references studnet(sno), /*表级定义参照性完整性约束*/

foreign key(cno) references courset(sno)

);

当执行违反了参照完整性是会拒绝执行,就可以在定义时加以说明

create table sc(

sno char(9),

cno char(9),

primary key(sno,cno),/*是表级定义主码*/

foreign key(sno) references studnet(sno), /*表级定义参照性完整性约束*/

on delete cascade /*当删除student中的元组时级联删除sc中相应元组*/

foreign key(cno) references courset(sno)

on delete no action /*当删除course表元组造成与sc表不一致时拒绝删除*/

on update cascade /*当更新course中的cno时级联更新sc相应元组*/

);

3、用户定义的完整性

3.1属性上的约束条件

如:列值非空 not null 、列值唯一unique、检查列值是否满足check表达式

create table student(

sno char(9) not null,

sname char(9) unique not null,

sex char(2) check(sex in ('女','男')),

sage int

)

3.2元组上的约束条件

元组可以在不同属性之间取值相互约束

create table student(

sno char(9) not null,

sname char(9) unique not null,

sex char(2) check(sex in ('女','男')),

sage int,

primary key (sno),

check(sex='女' or not like 'Ms.%')

);/*性别为男,姓名不能以mr开头 当是女时表达式成立,当是男时进入or后面就确保不一mr开头*/

4、完整性约束命名子句

上面都是在create table中定义完整性约束的,也可以用constraint来定义约束,方便增加删除:

constraint 完整性约束条件名 完整性约束条件

create table student(

sno char(9),

constraint c1 not null,

sname char(9) unique not null,

sex char() ,

constraint c2 check(sex in ('女','男')),

sage int,

primary key (sno),

check(sex='女' or not like 'Ms.%')

);

alter table 语句修改完整性限制

去掉性别限制:alter table student drop contraint c2;

修改性别只能为女限制: 先删除原来的约束,再新增新的约束

alter table student drop contraint c2;

alter table student add contraint c2 check (sex ='女');

5、断言

create assertion 断言名 check 子句

任何断言不为真值,操作都会被拒绝,即check子句不为真就拒绝操作

删除断言 drop assertion 断言名

6、触发器

触发器是用户定义在关系表上的一类由事件驱动的特殊过程,又叫 事件-条件-事件 规则。

6.1定义触发器

create trigger 触发器名 (同一模式下触发器名必唯一并要与表在同一模式)

before/after 触发事件 on 表名 (触发器只能定义在表上 不能是视图上)

referencing new/old row as 变量 (referencing指出引用变量)

for each row/statement (row是行级触发器 statement是语句级触发器)

where 触发条件 触发动作体 (仅当触发条件为真时执行触发动作体)


第五章 关系数据理论

函数依赖(FD):一个关系内部一个或一组属性的值可以决定另外一个属性的值。

部分函数依赖:如果X能确定Y,其中X的子集也能确定。

完全函数依赖:如果X能确定Y,其中X的任何子集都不能确定。例如:(学号,课程号)->成绩 但是其中一个不能确定

传递函数依赖:X决定Y,且Y不是X的子集,Y确定Z,Z不是Y的子集,则X确定Z

候选码:关系R ,如果K是此关系的一组属性,且U完全依赖于K,则K是R的候选码

超码:关系R ,如果K是此关系的一组属性,且U部分依赖于K,则K是R的超码,候选码是最小的超码

主码:候选码中选一个为主码

外码:关系模式R中的X并非是码,但在另一个关系模式中是码,则称X为外码

范式

关系数据库中的关系是要满足一定要求的,满足不同程度要求为不同的范式

1、1NF

关系模型里面的关系必须至少满足1范式的要求,关系里面的每一个属性必须是原子的不能再分了(不能表中套表)

2、2NF

数据库设计时,如果一个关系的每一个属性都满意1范式的要求,并且不存在对主键的部分函数依赖,

3、3NF

如果一个关系模式满足2范式的要求,并且在这基础上不存在属性对主键的传递函数依赖

4、BCNF范式

在3NF的基础上,要求决定子必须是码(主键)

5、4NF

在3NF的基础上消除可能存在的属性之间的多值依赖(一个属性的值可以决定一组属性值)就是4范式


第六章 数据库设计

数据库设计的基本步骤:

1、需求分析:准确了解与分析用户需求(包括数据与处理)。

2、概念结构设计:通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型。(E-R图描述概念模型)

3、逻辑结构设计:将概念结构转换为某个 DBMS 所支持的数据模型,并对其进行优化

4、物理结构设计:为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。

5、数据库实施阶段:设计人员运用 DBMS 提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。

6、数据库运行和维护:在数据库系统运行过程中对其进行评价、调整与修改。

2 .试述数据库设计过程中形成的数据库模式。

答:

   数据库结构设计的不同阶段形成数据库的各级模式,即:

( l )在概念设计阶段形成独立于机器特点,独立于各个 DBMS 产品的概念模式,在本篇中就是 E-R 图;

( 2 )在逻辑设计阶段将 E 一 R 图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后在基本表的基础上再建立必要的视图 (view),形成数据的外模式;

( 3 )在物理设计阶段,根据 DBMS 特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。

第七章 数据库恢复技术

一、事务

事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

1、事务的特性:

  • 原子性:
  • 一致性:
  • 隔离性:
  • 持续性:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值