数据库基础知识(一)

目录

第一章 绪论

1.1 数据库基本概念

1.1.1 四个基本概念

1.1.2 数据管理技术的产生和发展

1.2 数据模型

1.2.1 数据模型分类

1.2.2 常见的数据模型

第二章 关系数据库

2.1 关系数据库基本概念

2.2 关系的完整性

2.3 关系操作

2.4 关系代数

2.4.1 关系运算符

第三章 关系数据库语言SQL

3.1 SQL概述

3.2 数据定义

3.3 数据查询

3.4 数据更新

3.5 空值的处理

3.6 视图

第四章 数据库的安全性

4.1 数据库安全性概述

4.2 数据库安全性控制

4.2.1 用户身份鉴别

4.2.2 多层存取控制

4.2.3 其他安全性控制

第五章 数据库的完整性

5.1 完整性约束

5.2 断言

5.3 触发器

下一篇


 




第一章 绪论

1.1 数据库基本概念

1.1.1 四个基本概念

a.数据:描述事物的符号记录

b.数据库:长期储存在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按一定的数据模型组织、描述和存储,   具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。

c.数据库管理系统(DBMS):数据库管理系统和操作系统一样是计算机的基础软件。它的主要功能包括:数据定义功能(DDL),数据操纵功能(DML),数据组织存储和管理、数据库的事务管理和运行管理、数据库建立和维护功能。

d.数据库系统:由数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。一般简称数据库。

1.1.2 数据管理技术的产生和发展

人工管理阶段->文件系统阶段->数据库系统阶段

1.2 数据模型

1.2.1 数据模型分类

概念模型:按用户观点来对数据和信息建模,用于数据库设计。如E-R图。

逻辑模型:按计算机观点对数据进行建模,用于数据库管理系统的实现。如层次模型、关系模型。

物理模型:描述数据在计算机上的存储方式和存取方法。

1.2.2 常见的数据模型

层次模型、网状模型、关系模型、半结构化数据模型、面向对象数据模型、对象关系数据模型。


第二章 关系数据库

2.1 关系数据库基本概念

a.必须掌握的概念:域、笛卡尔积、候选码、主码、主属性、非主(码)属性、外码、参照表、被参照表

b.空值:不知道或不存在的值

c.关于参照表和被参照表、外码的描述图:

2.2 关系的完整性

实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。

参照完整性:外码要么取空,要么取被参照表主码的某个值

用户定义的完整性:在某些场景下,用户自己定义的约束条件

2.3 关系操作

a.常用的关系操作:查询、插入、删除、修改。

b.查询操作的具体划分:选择、投影、连接、除、并、差、交、笛卡尔积。

c.笛卡尔积的图解

2.4 关系代数

2.4.1 关系运算符

a.传统的集合运算:并、差、交、笛卡尔积

b.专门的关系运算:选择、投影、连接、除运算。

c.除运算图解


第三章 关系数据库语言SQL

3.1 SQL概述

a.SQL集数据查询、数据操纵、数据定义、数据控制于一体、其主要特点包括以下几个部分:

1.综合统一    2.高度非过程化    3.面向集合的操作方式   4.以同一种语法结构提供多种使用方式   5.语言简洁,易学易用

b.SQL的动词

SQL功能动词
数据查询SELECT
数据定义CREATE, DROP, ALTER
数据操纵INSERT, UPDATE, DELETE
数据控制GRANT, REVOKE

3.2 数据定义

a.SQL的数据定义语句

操作对象创建删除修改
模式CREATE SCHEMADROP  SCHEMA 
CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW 
索引CREATE INDEXDROP INDEXALTER INDEX

具体示例参见 SQL教程

3.3 数据查询

a.查询通式

select [all/distinct]  目标列

from 表或视图

where 条件表达式

group by 列名 having 条件表达式

order by 列名 [asc/desc]

说明:1.执行顺序为: 在from表中寻找满足where子句的元组->select 目标列->按照group by的列名进行分组,且满足having   条件的才会输出->将最终结果按照order by的列名进行排序

2.distinct关键字用于过滤重复结果

3.asc为升序,desc为降序,默认升序

4.where子句不能用聚集函数作为条件表达式

b.常用的查询条件

查询条件谓词
比较>,>=,!=,<>,=,<
确定范围between and, not between amd
确定集合in ,not in
字符匹配like, not like
空值is null, is not null
多重条件and, or ,not

c.通配符

通配符含义用法
%包含零个或多个字符的任意串张%
_下划线匹配任意单个字符_th
[ ]匹配若干字符[abc] 、[a-f]
[^ ]不匹配若干字符[^abc]、[^0-8]

d.聚集函数

聚集函数含义
count(*)统计元组个数
count([distinct|all] 列名)统计一列中值的个数
sum([distinct|all] 列名)计算一列值的总和
avg([distinct|all] 列名)计算一列值的平均值
max([distinct|all] 列名)统计一列值的最大值
min([distinct|all] 列名)统计一列值的最小值

e.嵌套查询:在SQL语言中,一个SELECT-FROM-WHERE语句成为称为一个查询快。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。

例如:

//Student学生表,SC选课表
select Sname
from Student
Where Sno in
            (select Sno
              from SC
              where Cno='2')

f.带有any或all谓词的子查询

//查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄
select Sname,Sage
from Student
where Sage< ALL 
                (select Sage from Student where Sdept='CS')
 and Sdept<>'CS'

g.带有exists谓词的子查询: EXISTS代表存在量词∃。带有EXISTS谓词的子查询不返回任何数据,只产生逻辑上的真或假。

//查询所有选修了1号课程的学生姓名
select Sname
from Student S1
where exists
      (select *
       from SC
       where Sno=S1.Sno and Cno='1')

//查询选修了全部课程的学生姓名<=>不存在一门课程,课表上有但他没有选
select distinct Sname
from Student
where no exists
      (select * 
       from Course
       where no exists
             (select *
              from SC
              where SC.Sno=Student.Sno
                and SC.Cno=Course.Cno))

//查询至少选修了学生201620001选修的全部课程的学生学号<=>不存在一门课程,201620001选了但他没有选
select distinct Sno
from SC S1
where no exists
      (select *
       from SC S2
       where S2.Sno='201620001' 
             and no exists
                 (select *
                  from SC S3
                  where S3.Cno=S2.Cno
                    and S3.Sno=S1.Sno))

h.数据字典

数据字典是关系数据库管理系统内部的一组系统表。它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。关系数据库管理系统在执行SQL的数据定义语句时,实际上就是更新数据字典中的相应信息。在进行查询优化和查询处理时,数据字典中的信息是重要依据。

3.4 数据更新

a.数据插入

insert into Student(Sno,Sname,Ssex,Sdept,Sage)
        values('2020001','陈冬','男','计算机系',18)

b.数据修改

update Student
set Sage=22
where Sno='2020001'

c.数据删除

delete
from Student
where Sno='2020001'

3.5 空值的处理

a.空值:不知道、不存在或无意义的值

b.空值的处理

              空值的产生:插入数据时未指定的属性值

              空值的判断:is null / is not null

有关空值的约束条件:码属性不能为空;加了unique限制的列值不能为空

              空值的运算:算术运算(空)、比较运算(Unknown)、逻辑运算(false)、聚集函数(除count结果为0,其他为空)

3.6 视图

a.视图的意义:视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据。一旦基本表中的数据发生变化,从视图中查询的数据也会随之改变。

b.视图定义、更新、删除

//定义视图
create view IS_Student//属性列名要么全部省略,要么全部指定
as
select Sno,Sname,Sage
from Student
where Sdept='IS'
with check option //以后对该视图的更新也要满足where中的条件

//删除视图
drop view IS_Student

//更新视图
update IS_Student
set Sname='刘晨‘
where Sno='2020001'

c.视图查询

       关系数据库管理系统执行对视图的查询时,首先进行有效性检查,检查查询中涉及的表、视图是否存在。如果存在,则从数据字典中取出视图的定义,把定义的子查询和用户的查询结合起来,转化为等价的对基本表的查询。

d.视图的作用

        简化用户操作;从多种角度看待数据;对机密数据提供安全保护。


第四章 数据库的安全性

4.1 数据库安全性概述

a.数据库的安全性是指保护数据库以防止不合法使用造成的数据泄露

b.数据库不安全因素:非授权用户恶意存取和破坏;敏感数据泄漏;安全环境的脆弱性

c.安全标准简介:A1,B3,B2,B1,C2,C1,D(最低)

4.2 数据库安全性控制

4.2.1 用户身份鉴别

静态口令鉴别、动态口令鉴别、生物特征鉴别、智能卡鉴别

4.2.2 多层存取控制

a.自主存取控制(DAC):用户对不同数据库对象有不同的存取权限,不同的用户对同一对象也有不同的权限,而且用户还可以把拥有的存取权限转授给其他用户,比较灵活。

a.1 授权与收回

//授权,授权有insert,select,update,delete,all privileges
grant insert
on table SC
to User1
with grant option //获得某种权限的用户还可以把这种权限再授予其他用户

//收回授权
revoke insert
on table SC
from User5 cascade //cascade表示不仅收回User5的权限,而且收回User5分发下去的授权,否则拒绝执行

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

//角色的创建
create role R1

//给角色授权
grant select,update,insert
on table Student
to R1

//将一个角色授权给其他角色或用户
grant R1
to 王平,张明

//角色权限的收回
revoke select
on table Student
from R1

b.强制存取控制(MAC):每一个数据库对象被标以一定的密级,每个用户被授予某个级别的许可证。对于任意一个对象,只有具有合法许可证的用户才可以存取。相对严格。

4.2.3 其他安全性控制

试图机制、审计、数据加密、推理控制和隐蔽信道

第五章 数据库的完整性

5.1 完整性约束

a.数据库的完整性是指数据的正确性和相容性。数据的正确性是指数据是符合现实语义、反映当前实际状况的;数据的相容性是指数据库同一对象在不同关系表中的数据是符合联系的。

b.三大完整性约束定义

见 2.2 部分

c.用户定义的完整性约束

//列值非空(not null)
//列值唯一(unique)
//检查列值是否满足一个条件表达式(Check短语)

create table Student
       ( Sno char(9) primary key,
         Sname char(8) not null,
         Ssex char(2) check(Ssex in ('男','女'))

d.完整性约束命名子句

Sno numeric(6) constraint C1 check (Sno between 9000 and 9999)
Sname char(20) constraint C2 not null

drop constraint C1

5.2 断言

a.断言的定义:用于定义涉及多个表或聚集操作的比较复杂的完整性约束。

b.断言示例:

//限制数据库课程最多60名学生选修
create assertion ass_1
        check( 60 >=(select count(*)
                      from Course,SC
                      where SC.Cno=Course.Cno and Course.Cname='数据库'
          )
                      

5.3 触发器

a.触发器的定义:触发器是用户定义在关系表上的一类由事件驱动的特殊过程。一旦定义,触发器将被保存在数据库服务器中。任何用户对表的增删改操作均由服务器自动激活相应的触发器,在关系数据库管理系统核心层进行集中的完整性控制。触发器·类似于约束,但是比约束更加灵活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力。

b.触发器的示例:

触发事件:修改或增添教师工资和职称
结果事件:在插入新的教师元组或教师的职称晋升为教授时,若工资低于10000元,则将其自动转化为10000元
create trigger update_S1
       before insert or update (sal,pos)
       for each row
       when (:new.pos='教授')
       begin  if :new.sal<10000
              then :new.sal=10000
              end if
       end

下一篇

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值