又看花落时,主要是来回顾某项知识的基础的,温故而知新吧。

数据库基本概念

数据库系统的特点:
一:数据结构化(也是数据库系统也文件系统的本质区别)
二:数据的共享性高,冗余度低,易扩展
三:数据独立性高(包括物理独立性和逻辑独立性)
四:数据由DBMS统一管理和控制

信息世界中的基本概念
实体,属性,码,实体型,实体集,联系。
实体:客观存在并可相互区别的事物成为实体。
实体型:用实体名及其属性名集合来抽象同类实体,称为实体型。例如,学生(学号,姓名,性别)就是个实体型。
实体集:同一类型的实体的集合就称为实体集,例如,全体学生。
联系:一对一,一对多,多对多。

关系数据结构中的概念
域:是一组具有相同数据类型的值的集合。
笛卡尔积:
候选码:关系中某一属性组能唯一标识一个元组,而其子集不能,则称该属性组为候选码。
主码:从候选码中选定一个作为主码。
主属性:候选码的诸属性称为主属性。
非主属性:不包含在候选码中的属性称为非主属性。
全码:关系模式中所有属性都是这个这个关系模式的候选码

关系类型可以分为三种

基本关系(或者称为基本表)

查询表

视图表

基本表是实际存在的表,是实际存储数据的逻辑表示

查询表是查询结果对应的表

视图表是由基本表或者其他视图表导出的表是虚表,不对应实际存储的数据

关系模型中要求关系必须是规范化的,其中一天最基本的就是:关系的每个分量必须是不可分割的数据项。规范化的关系简称为范式Normal Form, NF

关系操作

选择,投影,并,差,笛卡尔积是五种基本操作。其他操作都可以由这五种基本操作定义或者导出。
SQL语言是Structured Query Language 结构化查询语言

关系模型中的完整性

实体的完整性

参照的完整性

户定义的完整性

A是基本关系R的主属性,则A不能为空。也就是“不知道”或者“不存在”或者“无意义”

若属性F是基本关系R的外码, 他与基本关系S的主码Ks相对应(基本关系R和S不一定是不同关系),则对于R中每个元组在F上的值必须取空或者等于S中某个元组的主码值

用户定义的完整性是指针对某一具体关系数据库的约束条件,它反映魔衣具体应用所涉及的数据必须满足的语义要求。例如:学生的成绩属性必须定义在0~100之间

任何关系型数据库都应该支持实体的完整性和参照的完整性。

关系运算有:交,并,差,笛卡尔积,选择,投影,连接,除运算等。

自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是同名的属性组,并在结果中把重复的属性列去掉。

自然连接 又有一些概念,例如悬浮元组,外连接。外连接中又有左外连接和右外连接。

除运算 定义:设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。

重点是除运算是同时从行和列的角度进行运算的。

实体数据模型 支持mysql 数据库实体型的概念_基本知识


要理解除运算也要理解象集的概念。

在关系R中属性A可以取四个值{a1,a2,a3,a4}其中

a1的象集为{(b1,c2),(b2,c3),(b2,c1)}

a2的象集为{(b3,c7),(b2,c3)}

a3的象集为{(b4,c6)}

a4的象集为{(b6,c6)}

S在(B,C)上的投影为{(b1,c2),(b2,c3),(b2,c1) }.

显然只有a1的象集包含了S在(B,C)上的投影所以

R÷S={a1}。

除运算举例:

查询至少选修1号课程和3号课程的学生的学号。

可以首先建立一个临时关系K:

con

1

3

然后将 SC÷K 投影出学生的学号即可。(SC是StudentCourse学生选课表)

SQL

一个关系数据库管理系统的实例中可以建立多个数据库—–》一个数据库中可以建立多个模式—–》一个模式下通常包括多个表,视图和索引等数据库对象。

SQL数据定义语句

定义模式实际上是定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,如:基本表,视图,索引等。

创建索引
CREATE UNIQUE INDEX SCno ON SC ( Sno ASC , Cno DESC );
在SC表上创建一个名为SCno的索引,按照Sno升序,Cno降序排列。

WHERE与条件查询语句参P92.

常用聚集函数
COUNT( ) ; SUM( ) ; AVG( ) ; MAX( ) ; MIN( ) ;

GROUP BY
分组语句,将查询结果按照某一列或者几列的值分组,值相等的为一组。
分组的目的是为了细化聚集函数的作用对象,如果未分组,则聚集函数将作用于整个查询结果。如果分组之后,还要在分组的基础上按照一定的条件对这些组进行筛选,使得最终只输出满足指定条件的结果,则要使用HAVING短语指定进行筛选。
(此处要注意WHERE语句和HAVING语句的区别在于作用对象不同,WHERE作用于基本表或者视图,从中筛选出满足条件的元组。HAVING作用于(也就是在GROUP BY 语句基础上分出来的组),从中选择满足条件的元组。
以下举例帮助理解

例一:
查询选修了三门以上课程的学生学号
SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT( * )>3 ;
解析:HAVING 下的COUNT (*)是在GROUP BY分组的基础上进行的计数统计,而非作用于整个基本表。

例二
查询平均成绩大于等于90分的学生的学号和平均成绩
SELECT Sno , AVG (Grade)
FROM SC
GROUP BY Sno
HAVING AVG(Grade)>=90 ;

**连接查询**P102
自身连接,外连接(涉及到悬浮组),多表连接。
注:可以查看P100中关于连接查询时的算法是基本思想。
左外连接查询
SELECT Sname
FROM Student LEFT OUTER JOIN SC ON ( Student.Sno = SC.Sno )

嵌套查询
一个SELECT-FROM-WHRER语句称为一个查询块,将一个查询块的套在另外一个查询块的WHERE子句中或者HAVING短语的条件中的查询语句称为嵌套查询。 以层层嵌套的方式来构造程序正是SQL中“结构化”的含义所在。
注意嵌套查询中有相关子查询和不相关子查询,相关子查询都可以用多表查询来代替实现。注意理解不相关子查询的执行过程,以及相关子查询与不相关子查询之间的区别。P106

ANY(SOME),ALL,EXISTS(只返回false或true,不返回数据)
UNION:并操作 (会合并重复元组)
INTERSECT : 交集。
EXCEPT : 差集。

基于派生表的查询

注意的是:通过FROM子句生成派生,AS关键字可以省略,但是必须为关系指定一个别名。P114
示例:
SELECT Sname
FROM Student,(SELECT Sno FROM SC WHERE Cno = ’ 1 ‘)AS SC1
WHERE Student.Sno=SC1.Sno;

**数据更新**P116
插入基本有两种形式,一:直接插入数据。二:插入子查询的结果。
INSERT
INTO Student(Sno,Sage)
VALUES(‘6103113103’,18);

INSERT
INTO Dept_age(Sdept,Avg_age)
SELECT Sdept , AVG(age)
FROM Student
GROUP BY Sdept;

**更新数据**P118
除非是有WHERE语句指定更新哪个元组,否则更新整个表。
示例
UPDATE Student
SET Sage = 22
WHERE Sno = ‘6103113103’

UPDATE Student
SET Sage = Sage +1;

UPDATE SC
SET Grade = 0
WHERE Sno IN (
SELECT Sno
FROM Student
WHERE Sdept = ‘CS’);

删除
DELETE功能是从指定表中删除WHERE子句条件的所有元组。

删除某个元组
DELETE
FROM Student
WHERE Sno=’6103113103’;

删除多个元组值
DELETE
FROM SC;

带子查询的删除语句
DELETE
FROM SC
WHERE Sno IN(
SELECT Sno
FROM Student
WHERE Sdept=’CS’);

判断空值
判断空值应该用 IS NULL 或者 IS NOT NULL 来判断,而不要用 = NULL这样的来判断。

视图

定义:视图是从一个或者多个基本表上导出的表,是个虚表。数据库只存放视图的定义,不存放视图对应的数据。所以一旦基本表中的数据发生改变,从视图中查询的数据也就随之改变了。
视图一但被定义,就可以像基本表那样被查询,删除。但是对视图的更新(增,删,该)就会有一定的限制(可以理解,毕竟是个虚表)。

建立视图
建立在一个表上的视图
CREATE VIEW IS_Student
AS
SELECT *
FROM Student
WHERE Sdept=’IS’
WITH CHECK OPTION;
加上WITH CHECK OPTION 时在更新视图时,就会检查是否符合Sdept=’IS’的条件,否则不会检查。

建立在多个表上的视图
CREATE VIEW IS_Student(Sno,Sname,Grade)
AS
SELECT Student.Sno,Sname,Grade
FROM Student,SC
WHERE Student.Sno=SC.Sno AND Sdept=’IS’ AND Con=’1’;

删除视图
DROP VIEW IS_Student CASCADE;

查询视图
查询视图和查询基本表是一样的。
注:视图与派生表的区别==》视图一旦被定义,其定义就会被永远存储在数据字典中,之后的所有查询都可以使用该视图。而派生表只是在语句执行时临时定义,语句执行之后就会被删除。

更新视图 P126
视图的更新是指通过视图来 INSERT , DELETE , UPDATE 数据。
由于视图是不实际存储数据的虚表,因此对视图的更新最终要转换为对基本表的更新。并不是所有的视图都可以更新如果对应的基本表中没有对应属性的话。

权限

P142
授权
把查询Student表和修改学生学号的权限给用户U4(针对某一列的属性的授权时必须明确指出相应的属性列名)
GRANT UPDATE(Sno),SELECT
ON TABLE Student
TO U4;

WITH RRANT OPTION;表示可以授权给其他用户。

移除权限
REVOKE UPDATE(Sno)
ON TABLE Student
FROM U4 CASCADE;

CASCADE表示收回权限时,连带他所往外放出的权限全部收回。

更新中….