目录
第一章 绪论
集合与势
数据库系统(DBS)
第二章 实体建模
数据模型
概念模型
E-R模型
数值型
运算符和常用函数
比较和逻辑运算
空值和空值逻辑:不是所有信息都能被明确表示,未知或不适用,用NULL表示
表格与简单约束
范式:一定的约束条件
主键
数据库设计
SQL概述
基本语法
简单约束
SQL应用
语法
WHERE:通过逻辑表达式筛选
聚集函数与分组统计
分组
第三章 实体与关系
实体间的关系
概念
外键:描述表之间关系的桥梁和纽带。用来保证参照完整性
从关系到表
在关系上的查询
多表连接
子查询
数据操纵
插入INSERT
删除DELETE 用来删除表中一行或多行记录。
修改UPDATE 用来更新表中一行或多行记录。
第四章 物理数据模型
表与约束
创建
修改
删除
清空表
约束的创建与维护
唯一性编号
索引的创建与维护
索引的使用
视图的创建与维护
第五章 面向过程的SQL扩展
服务器端程序
存储过程与SQL程序的区别
PL/SQL
块结构
内嵌SQL
控制流
过程与函数
创建过程
创建函数
游标
游标的创建
游标的应用实例
触发器
触发器的基本概念
触发器的创建与维护
触发器的应用实例
第六章 事务处理与并发控制
事务处理
事务的基本特性
事务处理语句
并发控制
并发异常
数据库实现机制
并发控制级别设置
第七章、第八章、第九章
数据库应用编程
数据库应用系统体系结构(C/S、B/S)
企业应用系统的多层架构
数据库安全
对象权限管理
数据库管理
DBA的职责
集合的势:集合的大小,或者说元素的数量。
可数集合:与自然数集合等势的集合是可数集合。
不可数集合:不是可数集合的无限集合是不可数集合。计算机能够存储和表示的是可数集合,等价于自然数集合。
数据库系统通常是指带有数据库的计算机应用系统,包括数据库、相应的硬件、软件和各类人员。
硬数据(Hard Data):一、程序与数据不分离;二、数据、数据的访问和存储方式不能共享。
数据:存储在某种媒体上可以加以鉴别的符号资料。
数据库:长期存储在计算机内的有组织的、可共享的相关数据的集合。
数据库管理系统:是一套软件产品,可以把一系列相关数据保存在计算机中,并提供对这些数据进行检索、修改和维护等操作的工具和编程接口。
数据库应用系统:分为事务处理系统(Transaction Processing System)和决策支持系统(Decision Support System)。构成上来说,由硬件(服务站、工作站和网络)、软件(DBMS、OS、应用系统)、数据库构成。
数据库应用系统的用户:最终用户-程序员-数据库管理员(DBA)
数据库设计过程:需求分析——概念数据库设计——逻辑数据库设计——物理数据库设计
是现实世界数据特征的抽象。数据模型是从一般抽象的层面上模拟和描述了数据库系统的静态特征、动态行为和约束条件。
三要素:数据结构、数据操作和数据的约束条件
信息世界中的基本概念
实体:客观存在并且可以相互区别的“事物”称为实体。如一位同学、一次比赛等。实体具有一组属性。
实例:实例是实体中具有相同结构的可区分的对象。
计算机世界中的基本概念
字段(Field):对应于属性的数据成为字段,也称为数据项。
记录:对应于每个实体的数据成为记录
文件:对应于实体集的数据称为文件。
数据库相关的基本概念
实体型(Entity Type):用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
实体集(Entity Set):同型实体的集合称为实体集。
码或键:能唯一标识一个实体的属性或属性集称为实体的键。
超键:能唯一标识实体的属性或属性组。
候选键:其任意真子集都不能成为超键的最小超键。
主键:从所有候选键中选定一个用来区别同一实体集中的不同实体,称作主键。
联系:实体之间的相互关联。联系也可以有属性。
实体型内部的联系:组成实体的各属性之间的联系。
实体之间的联系:不同实体集之间的联系。
实体型之间的联系有以下三种类型:一:1:1 如班级与班长 二: 1:n 如班级与学生 三: m:n 如教师与学生
元或度:参与联系的实体集的个数称为联系的元。
表示方式:矩形框表示实体型,椭圆形表示属性,菱形表示联系。对构成码的属性,在属性名下面画一横线表示。
设计过程:1. 确定所有实体集合
2. 选择实体集应包括的属性
3. 确定实体集之间的联系
4. 确定实体集的关键字
5. 确定联系的类型
定点数与浮点数:
NUMBER(p,s),p为Precision(1<=p<=38),意为数值的(十进制)最大位数;
s为 Scale(-84<=s<=127),意为小数点后的最多位数。s为负数时,四舍五入到小数点前-s+1位。
NUMBER(p)相当于NUMBER(p,0)整数。而NUMBER表示精度p为38的浮点数,s不是0。
字符型:
CHAR(n)定长类型,2000,填充空格
日期型:
DATE:精度为秒、TIMESTAMP(n)、INTERVAL
大数据类型暂时不作整理。
ROWID:数据对象编号是每个数据段的唯一编号,不能直接访问,可在数据字典视图或通过DBMS_ROWID包访问。
数值型(+-*/);字符型(||)可以连接两个字符串;
日期型:两个DATE类型可以作减法,一个时间也可以加/减一个浮点数。
常用数值函数:CEIL(X)向下取整,FLOOR(X)向上取整,ROUND(X)四舍五入,TRUNC(X)返回截取后的值。
常用字符函数:长度、大小写转换,首字母大写、子串运算。
类型转换(略)
除了大于小于这类的基本比较运算符。
BETWEEN AND、IN、LIKE也相当于比较运算符。
LIKE:如果对字符串进行通配查找时,需要使用LIKE运算符。%可以匹配0个或任意多个字符。_通配一个字符。如果这俩做为通常的含义出现,需要加\
比较运算符得到的结构是一个逻辑值,即True、False、Unknown
逻辑运算符:AND OR NOT
空值具有以下特点:
1. 与0或空格不同
2. 在字符串中,等价于空字符串''
3. 运算方法不同
4. 单独排序
5. 不参与统计
6. 不能被索引
空值的使用情景:
1. 该值未知或者不存在
2. 对于特定的实体不适用
3. 在某些情况下,表示默认值
4. 在特定情况下,表示一种否定的含义
空值与逻辑运算:NULL参与比较运算,结果为Unknown。不能直接和空值进行比较,需要使用IS NULL和IS NOT NULL。
整个逻辑运算的最终结果为Unknown时,作为False对待。
表格:一个表格是实体模型的物理表示。表格之间,通过外键连接成一个完整的关系网络。
完整性约束:实体完整性与参照完整性(实体之间的相互关系)
1NF:关系的所有属性都是不可再分的数据项
2NF:不存在非关键字段对任一候选关键字段的部份依赖。如(学号,课程名称)(姓名,年龄,成绩,学分)
3NF:不存在非关键字段对任一候选关键字段的传递函数依赖。如(学号)(姓名,年龄,所在学院,学院地点,学院电话)
表的主键是能够唯一标识表中一行数据的最西端或者最小字段的组合。主键不能为空。
业务主键:业务中有唯一属性的字段挑出来做主键
逻辑主键:无实在意义的唯一性编号
ER图——实体或变量定义(字段名、数据类型、约束、描述)
分类:查询DQL(SELECT) 操作DML(INSERT DELETE UPDATE)定义DDL(CREATE DROP ALTER)
控制DCL(GRANT REVOKE COMMIT ROLLBACK)
不区分大小写,字符串用单引号
关键字大写,其他标识符小写,字段名大写
创建:
修改:
重命名:
删除:
清空:
非空 NOT NULL 字段级 (含NULL)只能写在行级
唯一 UNIQUE 可为空,一般不用于表间关系。可以是多个字段的联合
主键 PRIMARY KEY 唯一,不可为空,用于表联接。可以是多个字段的联合
检查 CHECK 只能针对单行记录。
外键 FOREIGN KEY
上述约束,均可写在CREATE TABLE,ALTER TABLE 中,也可以直接作为CONSTRAINTS 对象创建
除NOT NULL 外,其他四种约束,即可写在对应的行上,也可以写在语句的最后
如涉及到多个字段的联合,只能写在最后
查询项:字段|表达式 [[AS] 别名 ],用逗号分隔
无条件*:查询出表的所有记录。次序不确定、不稳定,依赖于数据库的实现。
*:按特定顺序列举所有字段。
表达式与别名之间的AS是一个冗余的关键字,可以省略,直接以空白符分隔。
DISTINCT | ALL:在整个查询内容前加上DISTINCT,返回结果中不重复的内容。不重复针对所有要查询的表达式集合而言。ALL是缺省值,列出包括重复的所有记录。
基本比较运算符:=、>、<、>=、<=、<>
其他相当于比较运算符的结构:BETWEEN .. AND..、(一般要求区间前面的值小于后面的值,否则将查不出结果。)
IN(把那几个用括号括起来)、LIKE(转义、%:匹配0个或任意多个字符,_:匹配一个字符)、 IS NULL(IS NOT NULL)的运算
逻辑运算符:NOT、AND、OR NOT>AND>OR
NVL函数:WHERE nvl(salary, 2000) > 1000; 查询薪水大于1000,如果薪水为空,按照2000
COUNT(*):计数符合条件的所有记录,不考虑是否为空。
COUNT(字段):此字段为空的行不计数在内。
MAX、MIN:NULL不参与比较。
AVG、SUM:NULL不参与运算。
聚集函数里面可以使用DISTINCT,只对不重复的字段进行统计。缺省为ALL
SELECT count(DISTINCT字段)----不重复字段数
没有GROUP BY子句,带聚集函数的查询一定只返回一行数据,但是可能是空值。如果表中无数据,或者无满足条件数据,或者所有符合条件数据都是空,COUNT返回0,其他函数则返回空值。
SUM、AVG 只用于数值型。
MAX、MIN可用于数值、字符和日期型。
分组子句 GROUP BY 每一个分组得出一个结果。
分组筛选子句HAVING
对分组后的每个组按照条件进行筛选;
只能在GROUP BY后面出现。
一般使用聚集函数对分组后数据的统计值进行筛选
直接使用分组字段通常无意义,其他字段非法
使用聚集函数或GROUP BY子句时,对SELECT子句中的查询字段有更多的限制。
1. 在SELECT 子句中直接出现的字段(包括非聚集函数内的)必须是在GROUP BY中列出的字段,否则,必须放在聚集函数之内。
2. 如使用了聚集函数,未使用GROUP BY 子句,则所有字段均不能直接出现在SELECT 子句中。
定义:业务中相关的两个或多个实体之间的关联。
度:关系中相关联的实体的数量。
当被其他数据引用的数据删除(或修改)时,那些引用的数据如何处理?
1. 不允许删除(Restrict)
2. 置为空或缺省值
3. 级联删除(Cascade),可能会导致雪崩。
用法:FOREIGN KEY(LID) REFERENCES LOCATIONS(LID),
1:1 关系,不增加新的表,增加外键
1:N 关系,不增加新的表,增加外键
M:N 关系,使用表表示关系
多元关系,使用(多个)表表示关系
使用表表示多值属性
笛卡尔积:等值连接,不等值连接,自连接,外连接
对于同一个表的两种不同角色的使用
并不真正复制数据,必须使用表的别名。
一般来说,N个表连接需要N-1个连接条件。
出现在另外一个SQL语句中的查询。
一般出现在where子句中,也可以出现在select、having和from子句中
结合WHERE使用方法:
1. 字段表达式 比较运算符 (subquery)
2. 字段表达式 IN (subquery)
3. 字段表达式 比较运算符 量词 (subquery)
4. [NOT ] EXISTS (subquery)
直接使用子查询
如果子查询返回一个数据,则可以作为直接数参与普通比较运算。
直接使用子查询的要求
要求子查询必须返回一行(或零行)数据
1. 如果子查询不返回数据,作为NULL值处理
2. 如果返回多行数据,产生运行时错误(非语法错误)
保证上述要求的方法
1. 主键(或唯一键)参与的查询
2. 使用无GROUP BY的聚组函数
3. 其他逻辑保证
量词
如果子查询返回多行结果,需要使用量词和关系运算符。
表达式 比较运算符 量词 (子查询)
量词包括ALL,SOME(ANY)
1. ALL意味着子查询所返回的所有记录的值均满足条件;
2. 而SOME表示存在一些记录的值满足条件;
3. ANY的意义与SOME相同。
IN
除了使用量词外,也可以使用IN进行比较。IN等价于 = SOME, NOT IN 等价于 <> ALL。
EXISTS
使用EXISTS和NOT EXISTS判断子查询是否返回行(不考虑具体数据)。通常将外部的数据引入到子查询内部作为条件。
INSERT INTO 表名 (字段列表)
VALUES (值列表);
这种形式的INSERT语句一次只能插入一行。值列表要和字段列表对应,数量和类型。
当值列表与表定义顺序一致时,可以不给字段列表。
INSERT INTO 表名 (字段列表) 子查询;
可以利用子查询一次插入多行,子查询的结果列表要和字段列表对应。
对于不在字段列表中的字段,按以下步骤决定其值:
1. 表格定义时字段指定缺省值,置为缺省值。
2. 字段可以为空,置为NULL值。
3. 否则会出错。
4. 另外,可以在值列表中使用DEFAULT和NULL关键字。
DELETE [FROM] 表名
[WHERE 条件];
将表中符合条件的记录删除,如果不写WHERE条件,将删除所有记录。
在条件中可以使用子查询。
UPDATE 表名
SET 字段=表达式 {, 字段=表达式}
[WHERE 条件];
将表中符合条件的记录的相应字段按照表达式重新赋值。表达式中可以使用原值。
在条件和修改表达式中可以使用子查询。
CREATE TABLE 表名
(字段定义,
行级约束);
字段定义:=字段名 数据类型〔DEFAULT值〕 〔字段约束〕
ALTER TABLE 表名 ADD 字段定义
DROP COLUMN字段
MODIFY 字段定义
MODIFY:变长,不影响数据值,定义;变短,检查数据。
ADD:字段默认值为NULL,可联合MODIFY使用。
DROP TABLE 表名
[ CASCADE CONSTRAINTS ]
TRUNCATE TABLE 表名;
相当于DELETE FROM 表名,区别:
1. DDL无需COMMIT,DML 需COMMIT。
2. DML需要ROLLBACK空间
约束的语法
五种约束,均可写在CREATE TABLE,ALTER TABLE 中,也可以直接作为CONSTRAINTS 对象创建
作为表维护语言的一部分
1. NOT NULL(含NULL)只能写在行级
2. 其他四种约束,即可写在对应的行上,也可以写在语句的最后
3. 如涉及到多个字段的联合,只能写在最后
一般在创建表时,直接设置非外键的所有约束
外键约束在相关表建立之后额外创建
约束的创建
约束的维护
好处:自动产生唯一编号,可看作编号发生器。用作主键 避免并发冲突 减少应用程序代码 提高性能
序列
序列是一个独立的编号发生器
在一个事务中,通过访问序列的NEXTVAL和CURRVAL可以获得序列的下一个值和当前值
索引是这样一种数据库对象,它占据一定的存储空间,能够在查询时被自动使用,从而提高查询性能。
基于一个表中某个字段或字段的联合
1. 不影响语句的正确性和结果
2. 避免全表扫描
3. 由查询优化器自动使用,并非所有查询都能获益
4. 通过某些额外选项可以提示查询优化器利用索引
5. 可能会加快DQL速度,但对DML速度的影响是双重的
它是一个逻辑结构,不占据存储空间。不存储数据,在使用时对原有数据的重新组织。
存储过程:用户创建,用SQL和其他语言(如PL/SQL)编写的过程或函数,存储在数据库内部,用来完成一个特定的任务。
PL/SQL:ORACLE对SQL进行扩展的过程式语言,具有通用程序设计语言的绝大部分特性,能够完成较为复杂和完整的功能可以用来编写存储过程。
每条语句可以写在多行
每条语句都以;结尾。
语句保留字和变量不区分大小写
一个块的语法地位等价于一条语句
[<
[DECLARE
声明部分]
BEGIN
执行部分
[EXCEPTION
错误处理部分]
END;
ACID
一个基本的DBMS至少要保证脏写不能出现