第一章
概念
- 数据库定义
- 是一种依照特定数据模型组织、存储和管理数据的文件集合。
- 数据库和普通文件区别
- 支持不同应用对数据共享访问;
- 数据管理复杂;
- 可独立于应用;
- 管理由DBMS实现。
- 数据模型定义
- 描述事物对象的数据结构组成、数据语义联系、数据约束的抽象结构以及说明。
- 主要数据模型
- 关系数据模型优缺点
- 优点
- 结构简单、灵活;
- 支持关系与集合运算;
- 支持
SQL
;
- 应用广泛。
- 缺点
- 只支持结构化数据存储;
- 数据类型简单;
- 无法支持非结构化数据。
-
DBMS
基本功能
- 四个管理阶段
- 人工管理阶段
- 文件系统管理阶段
- 数据库系统管理阶段
- 数据库应用系统类型
- 系统生命周期
- 需求分析
- 系统分析
- 系统实现
- 系统测试
- 系统运行与维护
第二章
概念
- 实体定义
- 关系定义
- 键定义
- 复合键定义
- 候选键定义
- 主键定义
- 主键作用
- 唯一标识元组;
- 与关联表外键建立联系;
- 组织数据存储;
- 建立索引快速检索。
- 代理键定义
- 代理键作用
- 关系模型完整性
- 实体完整性规则
- 参照完整性
- 关系表之间需要遵守的数据约束,保证关系之间的数据一致性。
- 通过外键实现。
- 用户自定义完整性
第三章
概念
-
SQL
- 是一种对关系数据库进行访问的数据操作语言。
- 是解释执行的。
操作
数据类型
对象 |
类型 |
字符 |
CHAR、VARCHAR、TEXT |
整数 |
SMALLINT、INTEGER |
浮点数 |
NUMBER(n,d)、FLOAT(n,d) |
日期 |
DATE、DATETIME |
货币 |
MONEY |
操作库
CREATE DATABASE <数据库名>;
ALTER DATABASE <数据库名> <修改内容>;
DROP DATABASE <数据库名>;
操作表
CREATE TABLE <表名>
(
...
<属性名> <数据类型> [完整性约束],
...
CONSTRAINT <主键名> PRIMARY KEY(<属性名>),
CONSTRAINT <外键名> FOREIGN KEY(<属性名>)
REFERENCES <关联表名>(<属性名>)
);
ALTER TABLE <表名> <修改方式>;
DROP TABLE <表名>;
关键词 |
作用 |
PRIMARY KEY |
主键 |
NOT NULL |
非空值 |
NULL |
空值 |
UNIQUE |
值唯一 |
CHECK |
有效性检查 |
DEFAULT |
缺省值 |
操作索引
CREATE INDEX <索引名> ON <表名>(<属性名>);
ALTER INDEX <索引名> <修改项>;
DROP INDEX <索引名>;
插入操作
INSERT INTO <表名> VALUES (属性值);
更新操作
UPDATE <表名> SET <属性名>=<表达式>
WHERE <条件表达式>;
DELETE FROM <表名>
WHERE <条件表达式>;
查询语句
SELECT <属性名> INTO <新表名> FROM <表名>
WHERE <条件表达式>
BETWEEN <属性值> AND <属性值>
WHERE <条件表达式>
LIKE <属性值>
GROUP BY <属性名>
ORDER BY <属性名> [DESC|ASC]
聚合函数 |
功能 |
AVG() |
平均值 |
COUNT() |
行数 |
MIN() |
最小值 |
MAX() |
最大值 |
SUM() |
总和 |
SELECT Major AS 专业 COUNT StudentID AS 学生人数
FROM Student
WHERE StudentGender=‘男‘
GROUP BY Major
HAVING COUNT(*)> 2;
SELECT TeacherID,TeacherName,TeacherTitle
FROM Teacher
WHERE CollegeID IN
(
SELECT CollegeID
FROM College
WHERE CollegeName='计算机学院'
);
SELECT B.CollegeName AS 学院名称,A.TeacherID AS 编号,A.TeacherName AS 姓名,A.TeacherGender AS 性别,A.TeacherTitle AS 职称
FROM Teacher AS A,College AS B
WHERE A.CollegeID=B.CollegeID
ORDER BY B.CollegeName,A=TeacherID;
SELECT B.CollegeName AS 学院名称,A.TeacherID AS 编号,A.TeacherName AS 姓名,A.TeacherGender AS 性别,A.TeacherTitle AS 职称
FROM TEACHER AS A JOIN COLLEGE AS B
ON A.CollegeID=B.CollegeID
ORDER BY B.CollegeName,A.TeacherID;
SELECT C.CourseName AS 课程名称, T.TeacherName AS 教师,
COUNT(R.CoursePlanID) AS 选课人数
FROM COURSE AS C JOIN PLAN AS P ON C.CourseID=P.CourseID
JOIN TEACHER AS T ON P.TeacherID=T.TeacherID
JOIN REGISTER AS R ON P.CoursePlanID=R.CoursePlanID
GROUP BY C.CourseName, T.TeacherName;
数据控制
GRANT <权限列表> ON <数据库对象> TO <用户|角色>;
REVOKE <权限列表> ON <数据库对象> FROM <用户|角色>;
DENY <权限列表> ON <数据库对象> TO <用户|角色>;
视图
CREATE VIEW <视图名> AS
<SELECT查询>;
SELECT * FROM <视图名>;
DROP VIEW <视图名>;
CREATE VIEW BasicCourseView AS
SELECT CourseName,CourseCredit,CoursePeriod,TestMethod
FROM COURSE
WHERE CourseType='基础课';
SELECT *
FROM BasicCourseView
ORDER BY CourseName;
DROP VIEW BasicCourseView;
第四章
概念
- 开发过程
- 数据需求分析
- 数据库设计阶段
- 数据库实现阶段
- 数据库测试阶段
- 数据模型
- 概念数据模型
CDM
- 逻辑数据模型
LDM
- 物理数据模型
PDM
-
E-R
模型
-
实体-联系模型
- 描述现实世界概念数据模型、逻辑数据模型的有效方法。
- 规范化数据库设计的原因
- 减少数据冗余
- 数据完整性和一致性
- 系统对数据高效访问
- 函数依赖
- 完全函数依赖
- 表明函数依赖的决定因子中的最小属性集。
- 否则为部分函数依赖。
- 属性传递依赖
- 属性如果不是一一对应,可以根据属性之间的依赖关系,进行传递。
- 多值依赖
- 规范化范式
模式 |
程度 |
第一范式 |
属性不可细分 |
第二范式 |
消除部分函数依赖 |
第三范式 |
切断传递函数依赖 |
BCNF |
决定因子都是候选键 |
第四范式 |
消除多值依赖 |
第五章
概念
-
数据库管理原因
- 规模扩大,系统变复杂
- 多用户带来访问复杂性
- 安全和隐私非常重要
- 意外事件
-
数据库管理目标
- 保障系统正常运行
- 发挥系统软硬件处理能力
- 确保用户数据安全
- 管理用户权限
- 解决优化等问题
- 发挥作用
-
ACID
特性
-
事务不能实现
-
并发控制的原因
-
并发控制需解决的问题
-
可串行化调度
- 事务中数据操作顺序的结果和事务串行执行结果一样时,并发事务调度才能保证操作的正确性和一致性。
-
加锁访问
-
锁的相容性
|
排它锁 |
共享锁 |
无锁 |
排它锁 |
否 |
否 |
是 |
共享锁 |
否 |
是 |
是 |
无锁 |
是 |
是 |
是 |
锁协议 |
排它锁 |
共享锁 |
更新丢失 |
脏数据读 |
不可重复读 |
一级加锁协议 |
全程加 |
不加 |
√ |
× |
× |
二级加锁协议 |
全程加 |
读完释放 |
√ |
√ |
× |
三级加锁协议 |
全程加 |
全程加 |
√ |
√ |
√ |
二级和三级加锁协议都是在一级基础上的。
操作
事务
START TRANSACTION;
<SQL>;
...
COMMIT;
START TRANSACTION;
<SQL>;
...
ROLLBACK;
START TRANSACTION;
<SQL>;
...
SAVEPOINT <保存点名>;
...
ROLLBACK <保存点名>;
用户
CREATE USER "userA" WITH
LOGIN
NOSUPERUSER
NOCREATEDB
NOCREATEROLE
INHERIT
NOREPLICATION
CONNECTION LIMIT -1
RASSWORD '123456';
ALTER USER "userA"
CONNECTION LIMIT 10;
DROP USER userA;
GRANT SELECT ON COURSE TO userA;
角色
CREATE ROLE "Role_Manager" WITH
LOGIN
CONNECTION LIMIT -1;
GRANT SELECT ON COURSE TO "Role_Manager";
备份
BACKUP DATABASE CourseDB TO DISK="D:\CourseDB.bak";
RESTORE DATABASE CourseDB FROM DISK="D:\CourseDB.bak";
第六章
概念
-
JDBC
访问数据库步骤
- 应用程序开始
- 导入
java.sql
包
- 加载并注册驱动
- 创建
Connection
对象
- 创建
Statement
对象
- 执行
SQL
- 使用
ResultSet
对象返回结果
- 关闭
ResultSet
对象
- 关闭
Statement
对象
- 关闭
Connection
对象
- 结束
- 触发器
- 可实现复杂的数据完整性。
- 本身是一个特殊的事务单位。
- 由
INSERT
、UPDATE
、DELETE
触发而被动执行。
- 必须定义在表或视图上。
- 触发器的特殊变量
-
NEW
:值为改变之后的行。
-
OLD
:值为改变之前的行。
-
TG_OP
:值为引发触发器的操作。
操作
JDBC
Class.forName("org.postgresql.Driver");
String url = "jdbc:postgresql://localhost:5432/testdb";
String usrName = "admin";
String pasWord = "password";
connection conn = DriverManager.getConnection(url,usrName,pasWord);
Statement stat = conn.createStatement();
String sql = "INSERT INTO STUDENT"
+ " VALUES('201909','DD','男');";
stat.executeUpdate(sql);
String sql = "SELECT id,name,gender FROM company;"
ResultSet rs = stat.executeQuery(sql);
while(rs.next()){
System.out.println(rs.getString("id"));
}
rs.close();
stat.close();
conn.close();
存储过程
CREATE OR REPLACE FUNCTION countRecords()
RETURNS INTEGER
AS $COUNT$
DECLARE
count integer;
BEGIN
SELECT COUNT(*) INTO count FROM STUDENT;
RETURN count;
END;
$COUNT$ LANGUAGE plpgsql;
SELECT * FROM countRecords();
DROP FUNCTION IF EXISTS countRecords();
PL/SQL语法
IF count>0 THEN
count = count - 1;
ELSIF count<0 THEN
count = count + 1;
ELSE
EXIT;
END IF;
LOOP
count=count+1;
EXIT WHEN count>100;
END LOOP;
WHILE count>0 LOOP
count=count-1;
END LOOP;
FOR i IN 1...10 LOOP
RAISE NOTICE 'i=%',i;
END LOOP;
FOR rec IN SELECT id,name FROM STUDENT LOOP
RAISE NOTICE "ID:%,NAME:%",rec.id,rec.name;
END LOOP;
触发器
CREATE OR REPLACE FUNCTION score_audit()
RETURNS TRIGGER
AS $SCORE$
BEGIN
IF (TG_OP = "DELETE")THEN
INSERT INTO AUIT SELECT OLD.ID,OLD.SCORE;
RETURN OLD;
END IF;
RETURN NULL;
END;
$SCORE$ LANGUAGE plpgsql;
CREATE TRIGGER AUDIT_TRIGGER
AFTER DELETE OR INSERT
ON STUDENT
FOR EACH ROW EXECUTE PROCEDURE score_audit();
ALTER TRIGGER AUDIT_TRIGGER ON STUDENT RENAME TO AT;
DROP TRIGGER IF EXISTS AUDIT_TRIGGER ON STUDENT CASCADE;
游标
CURSOR_NAME REFCURSOR FOR SELECT * FROM STUDENT;
CURSOR_NAME REFCURSOR(KEY INTEGER) IS SELECT * FROM STUDENT WHERE SID=KEY;
OPEN CURSOR_NAME FOR QUERY;
OPEN CURSOR_NAME EXECUTE QUERY_STRING;
OPEN CURSOR_NAME;
前两个适用于未绑定的,后面那个适用于绑定过的。
FETCH CURSOR_NAME INTO ID,NAME;
IF FOUND THEN
...
END IF;
CLOSE CURSOR_NAME;
第七章
概念
- 分布式文件系统
- 分布式数据库=数据库+网络技术
-
5V
特征
- 超量
Volume
- 高速
Velocity
- 异构
Variety
- 真实
Veracity
- 价值
Value
-
NoSQL
性质
- 分布式数据库不一致原因
- 多个副本
- 单点网络故障
- 通信网络故障
- 分布式提交等
- 分布式环境要求
CAP
-
BASE
-
NoSQL
定义
- 一个非关系数据存储系统
- 不单指一个产品或技术,它代表一族产品,也是一个概念。
-
NoSQL
技术
-
NoSQL
特点
- 优点
- 高可扩展性
- 分布式计算
- 低成本
- 架构灵活
- 半结构化数据
- 关系简单
- 缺点
- 列存储数据库
- 键值对数据库
- 文档数据库
- 图形数据库