注意:Ctrl+F 输入关键字
这是大三上学期复习数据库时自己整理的,有些地方可能有误,大家可以参考参考,欢迎讨论哦~
本书的笔记总结自《数据库系统概论》(第5版),王珊、萨师煊编著。
另外,这是我的另一套MySQL笔记:有道云笔记
目录
数据:描述事物的符号记录。 数据库:长期存储在计算机内的、有组织的、可共享的大量数据集合。 数据库管理系统:是位于用户与操作系统之间的具有数据定义、数据操纵、数据库的运行管理、数据库的建立和维护功能的一层数据管理软件。 数据库系统:在计算机系统中引入数据库后的系统,一般由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员和用户构成。
DDL、DML(操纵)、DCL
1. 数据结构化
2. 数据共享性高、冗余度低且易扩充
3. 数据独立性高
物理独立性:应用程序与数据库中数据的物理存储是相互独立的 逻辑独立性:应用程序与数据库的逻辑结构是相互独立的,数据的逻辑结构改变时用户程序可以不变
4. 数据由DBMS统一管理和控制
1. 概念模型(信息模型) 按用户的观点对数据和信息建模,用于DB设计 2. 逻辑和物理模型 逻辑模型用于DBMS的实现 物理模型是对底层的抽象
1. 实体
2. 属性
3. 联系
4. 码(唯一标识实体的属性集)
5. 实体型 比如学生
6. 实体集 比如全体学生
ER图:概念模型的表示方法
1. 数据结构(静态特性)
2. 数据操作(动态特性)
3. 数据的完整性约束条件
1. 关系模型的数据结构
关系的每一个分量必须是一个不可分的数据项,即不允许表里有表
2. 数据操纵和完整性约束
3. 优缺点
模式是DB中全体数据的逻辑结构和特征的描述,它仅仅涉及型的描述,不涉及具体的值(实例),模式是相对稳定的,而实例是相对变动的,模式反映的是数据的结构和联系,实例反映的是DB某一时刻的状态
1. 外模式(external schema,用户模式):用户能看到、使用的局部数据的逻辑结构和特征的描述,是DB用户的数据视图,是与某一应用有关的数据的逻辑表示。外模式是模式的子集,根据用户的不同而不同,一个DB可以有多个外模式。外模式是保障DB安全的有利措施,每个用户只能访问对应外模式中的数据,其余不可见。
2. 模式(逻辑模式):DB中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图;是DB模式结构的中间层,不涉及物理存储,与应用程序也无关。一个DB只有一个模式。
3. 内模式(internal schema,存储模式):一个DB只有一个内模式,是物理结构
注:
一个关系型DBMS的实例(instance)中可建立多个数据库,一个DB中可建立多个模式(包括不同级的模式),一个模式下通常包括多个table、视图、索引等数据库对象。 DBMS提供模式DDL来定义模式,外模式DDL来定义外模式
为了实现三种模式的联系和转换,DBMS提供了两层映像,正因如此,保证了DBS中的数据有较高的独立性
1. 外模式/模式映像
对于每一个外模式,DBS都有一个外模式/模式映像,它定义了该外模式和模式之间的对应关系,这些映像通常包含在各自外模式的描述中。当模式改变时,由数据库管理员对映像做相应改变,可使外模式保持不变,而应用程序是根据外模式编写的,所以也不用改,从而保证了数据和程序的逻辑独立性。
2. 模式/内模式映像
DB中只有一个模式和一个内模式,所以模式/内模式映像是唯一的。定义了数据全局逻辑结构二号存储结构之间的对应关系。当存储结构改变时,由数据库管理员对映像做相应改变,可使模式保持不变,从而应用程序不用改,从而保证了数据和程序的物理独立性。
注:
设计DB模式结构时应首先确定数据库的全局逻辑结构,即模式(P30) 设计外模式时应充分考虑应用的扩充性(P30)
1. 域 一组具有相同数据类型的值的集合; 一个域允许的不同取值的个数成为基数
2. 笛卡儿积 每个域的基数相乘=行数
3. 关系
基本关系具有6条性质:
增删改查
查又分为:
基本操作是:选择、投影、并、差、笛卡儿积
主码不能为空,若主码有多个,则都不能空
外码
参照关系
被参照关系
参照和被参照关系可以是同一个
外码不一定要与相应的主码同名
1. 并
2. 差
3. 交
4. 笛卡儿积(用R X S表示)
1. 选择 针对行
2. 投影 针对列,也可能取消某些行,避免重复
3. 连接
等值连接:从广义笛卡儿积中选取A、B属性值相等的元组(注意相等的不能合并) 自然连接:特殊的等值连接,将相等的合并了(它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉) 非等值连接:从广义笛卡儿积中选择符合条件的 在连接中被舍弃的元组为悬浮元组 若不舍弃,则为外连接 不舍弃左边关系中的,就叫左外连接
外模式:包括若干视图和部分基本表,基本表是本身独立存在的表,一个关系就对应一个基本表,一个或多个基本表对应一个存储文件;视图是从一个或多个基本表导出的表,本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放其数据,数据仍存在基本表中,因此视图是虚表,视图上可以再定义视图。 模式:包括若干基本表 内模式:包含若干存储文件,存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构对用户是隐蔽的
首先进入mysql文件夹下的bin目录,然后输入MySQL -u+用户名 -p
然后输入密码,AC
musk spacex
jack 密码忘了
Yang 。。。
create user 用户名 identified by '密码';
授予权限:
grant insert,update,delete on student_course to musk;
撤回权限:
revoke all on student from musk;//mysql只能一次撤一个对象1. 定义基本表
create table 表名(sno char(4) primary, sname char(6) unique, foreign key(Cno) references Course(Cno));
跟在列名后面的是列级完整性约束
单独定义的是表级
create table SC(primary key(Sno, Cno), Cno char(4), Sno char(3), grade smallint);
如果完整性约束条件涉及多个属性列,则必须定义在表级,如上所示2. 数据类型
3. 模式与表
4. 修改基本表*************************************
1. 删除列
alter table 表名 drop column 属性名 cascade/restrict //column是列的意思
注:后面的条件可不写,默认restrict;
restrict是指删除是有条件的,所删除的属性不能被其他表的约束所引用,不能有视图、触发器、存储过程或函数;
cascade是指删除没有条件,删除的同时,所有相关的对象都将删除
2. 增加列
alter table 表名 add column 属性名 数据类型;
如:alter table student add column Sname char(6);//mqsql里column可不写
修改列的数据类型//主码好像改不了,外码似乎也是
alter table 表名 change 原列名 现列名 数据类型;
3. 删除主键约束
alter table student drop primary key;
4. 增加主键约束
alter table student add primary key(sno);//注意:mysql一张表里只能有一个主键
5. 设置唯一性约束
alter table student add unique(sname);//注意:主键本身就是唯一的
6.设置外键约束(注意外键一定要是所参考的表(student)的主键,不然报错)
alter table student_course add foreign key(sno) references student(sno);
7. 元组上的约束条件 P164
a. 检查约束check //mysql不支持检查约束,但写上不会报错
alter table student_course add constraint check(score >= 0 and score <= 100);
8. 设置默认约束
alter table 表名 change 原列名 现列名 数据类型 default 默认值;
如:alter table student change entime entime date default '2002-09-01';
9. 删除表
drop table stu cascade/restrict;数据查询是数据库的核心操作
1. 选择表中的若干列
1. 查询指定列
select 属性列,属性列,··· from 表名;//各列的顺序可以和原表不一样
2. 查询所有列
select * from 表名;
3. 查询经过计算的值
select Sname,2014-Sage from 表名;
属性列还可以是算术表达式、字符串常量、函数等。
如:select sname,'year of birth',2014-sage,LOWER(sdept) from student;//小写字母表示系名
还可以通过指定别名来改变查询结果的列标题,例如有些含有算术表达式、函数、常量的列名就可指定别名
如:select sname NAME,'yaer of birth' BIRTH,2014-sage BIRTHDAY from student;2. 选择表中的若干元组(行)
1. 消除取值重复的行(两个不相同的元组投影到指定列后,可能会变成相同的行)
使用distinct消除:
select distinct sno from sc;
2. 查询满足条件的元组
a. 比较大小
b. 确定范围
c. 确定集合
d. 字符匹配
select * from student where Sno like '12313';//like等价于=
//如果like后面的匹配串中不含通配符(%和_),则可用=取代like,用!=或<>取代not like
select * from student where Sname like '刘%';//有通配符必须用like
//通配符%代表任意长度(包括0)的字符串,_表示任意单个字符
select * from student where Sname like '欧阳_';
select * from student where Sname like '_阳%';//第二个字为阳的
select * from student where Sname not like '杨%';
//如果要查询的字符串本身有通配符,要用escape转义符
select Cno,Credit from Course where Cname like 'DB\_Design' escape'\';
//escape\表示\为换码字符,这样跟在\后面的字符不再具有通配符的含义
e. 涉及空值的查询
f. 多重条件查询3. order by 子句(排序用)
select Sno,Grade from SC where Cno = '3' order by Grade desc;
desc: 降序
asc: 升序4. 聚集函数
当聚集函数遇到空值时,除count(*),都跳过空值 where 子句中不能用聚集函数
5. group by子句(分组用)
将查询结果按某一列或多列的值分组,值相等的一组
1.求各个课程号及相应的选课人数
select Cno,count(Sno)
from sc
group by Cno;
如果分组后还要筛选,用having语句
select Cno,count(Sno)
from sc
group by Cno
having count(*) > 3;where语句和having语句的区别: where语句不能用聚集函数,作用于基本表或视图;having短语作用于组,也就是group
1. 等值与非等值连接查询
select stu.sno, sname
from stu,sc
where stu.sno = sc.sno and sc.cno'2';
//sno在两个表都有,所以要加前缀2. 自身连接
查询每一门课的间接先修课(先修课的先修课)3. 外连接
左外连接
select student.sno, sname, ssex, sage, sdept, cno, grade
from student LEFT OUTER JOIN SC ON (student.sno = sc.sno);4. 多表连接
查询每个学生的学号、姓名、选修的课程名、成绩
select student.sno, Sname, Cname, Grade
from student, sc, course
where student.sno = sc.sno AND sc.cno = course.cno;子查询的select语句不能用order by子句,order by只能对最终查询结果排序
1. 带有IN谓词的子查询
查询和刘成在同一个系学习的学生
SELECT sname,sno,sdept FROM student WHERE sdept IN (select sdept from student where sname = '刘成');
在此例中,IN可以用=替换子查询的条件不依赖与父查询,称不相关子查询(相关子查询(相关嵌套查询)反之)
2. 带有比较运算符的子查询
找出每个学生超过他自己选秀课程平均成绩的课程号
SELECT Sno,Cno
FROM SC x
WHERE Grade >= (SELECT AVG(Grade)
FROM
WHERE y.Sno = x.Sno);3.带有any(some)或all谓词的子查询
4. 带有exists谓词的子查询
1. 插入元组
insert into 表名(属性列,···,···) values(对应的值,···,···);
注意:1. 没有出现的属性列,将自动取空值;但说明了not null 的属性列不能取空值,否则出错
2. 如果没有指明任何属性列, 则新插入的必须在每个属性列上都有值(如果为null要显式给出),且顺序要和表的属性列顺序一样
3.值如果为字符串常数,要用单引号括起来,数字不用
4. 可以把属性列显式的置为NULL
例:insert into student(Sno,Sname,Ssex) values('29193','李明','男');
一次同时插入多条数据:
insert into 表名(属性列,···,···) values(对应的值,···,···),
(对应的值2,···,···),
(对应的值3,···,···),
···
;2. 插入子查询结果
子查询既可以嵌套在select语句中,也可以用在insert语句中用以生成要插入的数据
insert into dept_age(sdept, avg_age) select sdept, avg(sage) from stu group by sdept;1. 修改某一个元组的值
update 表名 set 属性名 = '' where 属性名 = '';
如:update student set Sage = 16 where Sno = '201215121';2. 修改多个元组的值
update 表名 set Sage = Sage + 1;3. 带子查询的修改语句
update SC set Grade = 0 where Sno in (select Sno from stu where Sdept 'CS');1. 删除一个元组
delete from 表名 where 属性名 = '';2. 删除多个元组
delete from 表名;//删除所有,该表成为空表3. 带子查询的删除语句
delete from SC where Sno in (select Sno from stu where Sdept = 'CS');1. 建立视图
with check option 表示对视图操作时要满足视图定义中的条件(比如下例中的sdept=’IS‘) 组成视图的列名要么全部省略,要么全部指定 以下三种情况必须全部指定:
create view IS_student(sno,sname,sage)
as
select sno,sname,sage
from student
where sdept = 'IS';若一个视图是从单个基本表导出,且只去掉了某些行列,但保留了主码,称这类视图为行列子集视图 带虚拟列(派生属性,在基本表中不存在)的视图称为带表达式的视图 带有聚集函数和group by 子句的查询来定义的视图称为分组视图
2. 删除视图
drop view IS_stu cascade;cascade表示把由该视图导出的所有视图都删除 当基本表删除后,视图的定义还在,必须用删除视图语句显式删除
视图消解:把视图的查询转换为对基本表的查询
用户权限由 数据库对象和操作类型 组成
1. grant
一些权限: 基本表和视图:select, insert, update, delete references, all privileges
grant select on table student to u1 with grant option;
grant all privileges on table student,course to u2,u3;
grant select on table stu to public;
grant update(Sno),select on table stu to u4;2. revoke
revoke update(Sno) on table stu from u4;
revoke select on table sc from public;
revoke insert on table sc from u5 cascade;1. 属性上约束条件的定义
包括: 1. not null 2. unique 3. check
在创建表时可用check短语定义
create table 表名(
sno char(4) primary,
sname char(6) unique,
sex char(2),
foreign key(Cno) references Course(Cno),
check(sex = '女' OR Sname not like'Ms.%')
);
男性名字不能以Ms.开头需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行和维护
查询优化的优点不仅在于用户不必考虑如何最好的表达查询以获得较高的效率,而且在于系统能比用户程序的“优化”做的更好,这是因为: 1.
风格恢复
事务:是用户定义的数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位
在sql中,定义事务的语句有三条:
ACID特性可能遭到破坏的因素: 1. 多个事务并行运行,不同事务的操作交叉执行; 2. 事务在运行过程中被强行停止。
非预期的,不能有由应用程序处理
发生后需要 事务撤销
断电、死机
系统重启后,不仅要撤销所有未完成的事务,还要重做所有已提交的事务
硬故障 磁盘损坏、磁头碰撞、瞬间强磁场干扰
总结,各类故障对DB的影响有两种: 1. 数据库本身被破坏 2. 没破坏,但数据不对了 恢复的原理:冗余
用来记录事务对数据库的更新操作的文件 日志文件的作用:P299 1.
两种:
1. 以记录为单位的
需要记录:
1. 各个事务的开始 2. ················结束 3. ················所有更新操作 一个事务就是一个日志记录 每个日志记录包括: 1.
2. 以数据块为单位的
什么是数据库的再组织和重构造?为什么要进行数据库的再组织和重构造? [参考答案 ] 答:数据库的再组织是指:按原设计要求重新安排存储位置、回收垃圾、减少指针链等, 以提高系统性能。 数据库的重构造则是指部分修改数据库的模式和内模式, 即修改原设计的逻辑和物理结构。数据库的再组织是不修改数 据库的模式和内模式的。 进行数据库的再组织和重构造的原因: 数据库运行一段时间后,由于记录不断 增、删、改,会使数据库的物理存储情况变坏,降低了数 据 的 存 取 效 率 ,数 据库 性能 下 降 , 这 时 DBA 就 要 对 数 据库 进行 重组织。 DBMS一般都提供用于数据重组织的实用程序。数据库应用环境常常发生变化,如增加新的应用或新的实体, 取消了某些应用, 有的实体与实体间的联系也发生了变化等, 使原有的数据库设计不能满足新的需求,需要调整数据库的模式和内模式。这就要进行数据库重构造
什么是检查点记录? 答:检查点记录是一类新的日志记录。它的内容包括:(1)建立检查点时刻所有正在执行的事务清单;(2)这些事务的最近一个日志记录的地址。
关系系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束条件时,一般是如何分别进行处理的? 答: 对于违反实体完整性和用户定义的完整性的操作一般都采用拒绝执行的方式进行处理。而对于违反参照完整性的操作,并不都是简单地拒绝执行,有时要根据应用语义执行一些附加的操作,以保证数据库的正确性。
什么是数据库的审计功能,为什么要提供审计功能? 答:审计功能是指 DBMS 的审计模块在用户对数据库执行操作的同时把所有操作自动记录到系统的审计日志中。因为任何系统的安全保护措施都不是完美无缺的,蓄意盗窃破坏数据的人总可能存在。利用数据库的审计功能, DBA 可以根据审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。
哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。 答:基本表的行列子集视图一般是可更新的。若视图的属性来自集合函数、表达式,则该视图肯定是不可以更新的。
什么是基本表?什么是视图?两者的区别和联系是什么? 答:基本表是本身独立存在的表, 在 sQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。 视图在概念上与基本表等同, 用户可以如同基本表那样使用视图,可以在视图上再定义视图
假设有下面两个关系模式:
职工(职工号,姓名,年龄,职务,工资,部门号) ,其中职工号为主码;
部门(部门号,名称,经理名,电话) ,其中部门号为主码。
用 sQL 语言定义这两个关系模式,要求在模式中完成以下完整性约束条件的定义:
定义每个模式的主码;
定义参照完整性; 定义职工年龄不得超过 60岁。 答 CREATE TABLE DEPT (Deptno NUMBER(2) PRIMARY KEY, Deptname VARCHAR(10), Manager VARCHAR(10), PhoneNumber Char(12) );
CREATE TABLE EMP (Empno NUMBER(4) PRIMARY KEY, Ename VARCHAR(10), Age NUMBER(2), CHECK ( Aage<=60), Job VARCHAR(9), Sal FLOAT(6), Deptno NUMBER(2), FOREIGN KEY(Deptno) REFERENCES DEPT(Deptno));
什么是数据库中的自主存取控制方法和强制存取控制方法? 答: 自主存取控制方法:定义各个用户对不同数据对象的存取权限。当用户对数据库访问时首先检查用户的存取权限。防止不合法用户对数据库的存取。 强制存取控制方法:每一个数据对象被(强制地)标以一定的密级,每一个用户也被(强制地)授予某一个级别的许可证。系统规定只有具有某一许可证级别的用户才能存取某一个密级的数据对象。
试述实现数据库安全性控制的常用方法和技术。 答:实现数据库安全性控制的常用方法和技术有: ( l )用户标识和鉴别:该方法由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供系统的使用权。 ( 2 )存取控制:通过用户权限定义和合法权检查确保只有合法权限的用户访问数据库,所有未被授权的人员无法存取数据。例如 CZ 级中的自主存取控制 ( DAC ) , Bl 级中的强制存取控制( MAC )。 ( 3 )视图机制:为不同的用户定义视图,通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。 ( 4 )审计:建立审计日志,把用户对数据库的所有操作自动记录下来放入审计日志中, DBA 可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人、时间和内容等。 ( 5 )数据加密:对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/203733.html原文链接:https://javaforall.cn