数据库的三级模式:
- 模式:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有的用户的公共数据视图。
- 外模式:也称子模式或用户模式,它是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
- 内模式:也称存储模式,一个数据库只有一个内模式。它是数据物理结构的存储方式的描述,是数据在数据库内部的组织方式。
传统的集合运算是二目运算,包括并、差、交、笛卡尔积4中运算
连接分为3种:内连接、自然连接、外连接
- 内连接和自然连接的区别:自然连接必须两个表进行比较的列必须同名相同属性,内连接则不需要列同名。
- 内连接和外连接的区别:两种连接取出两张表中匹配到的数据,内连接匹配不到的不保留;外连接匹配不到的也保留,其值设置为NULL。
- 外连接分为左外连接和右外连接:
- 左外连接:保存左边的悬浮元组
- 右外连接:保存右边的悬浮元组
SQL的数据定义
操作对象 创建 删除 修改 模式 CREATE SCHEMA DROP SCHEMA 表 CREATE TABLE DROP TABLE ALTER TABLE 视图 CREATE VIEW DROP VIEW 索引 CREATE INDEX DROP INDEX ALTER INDEX SQL的数据定义语句
SQL定义表的基本格式:
CREATE TABLE <表名> (<列名> <数据类型> [列级完整性约束条件] ,<列名> <数据类型> [列级完整性约束条件] ,<列名> <数据类型> [列级完整性约束条件] ,[表级完整性约束条件]);
SQL定义表示例:
CREATE TABLE SC (Cno CHAR(9) PRIMARY KEY, Cname CHAR(40) NOT NULL, Cpno CHAR(4), Ccredit INT, FOREIGN KEY (Cpno) REFERENCES Course(Cno) );
索引
当数据量比较大的时候,查询比较耗时。简历索引是加快查询速度的有效手段。(类似于图书后面的索引)
数据库索引类型:
- 顺序文件上的索引:是针对按指定属性值升序或降序存储的关系,在该属性上简历一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
- B+树索引:是将索引属性组织成B+树的形式,B+树的叶节点为属性值和相应的元组指针。B+树索引具有动态平衡的优点。
- 散列索引:是建立若干个桶,将索引按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针。散列索引具有查找速度快的优点。
- 位图索引:是用位向量记录索引属性中可能出现的值,每个位向量对应一个可能的值。
数据查询
SQL的SELECT语句基本格式:
FROM <表名或试图名> [,<表名或试图名>...] | (SELECT语句) AS <别名> [WHERE <条件表达式>] [GROUP BY <列名1> [HAVING <条件表达式>]] [GROUP BY <列名2> [ASC|DESC]];
左外连接SQL示例:
SELECT Student.Sno,Sname,Ssex,Sage,Cno FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno);
GROUP BY子句将查询结果按一列或多列的值分组,值相等的为一组。
WHERE和HAVING的区别:作用对象不同。
- WHERE子句作用于基本表或视图,从中选择满足条件的元组。
- HAVING短语作用于组,从中选择满足条件的组。
嵌套查询示例:
SELECT Sname FROM Student, SC, Course WHERE Student.Sno=SC.Sno=SC.Sno AND SC.Cno=Course.Cno
数据库谓词有:IN 、ANY、SOME、ALL、EXISTS
视图
视图是从一个或多个基本表导出的表。是一个虚表。
建立视图的一般格式:CREATE VIEW <视图名> [(<列名> [,<列名>] ...)] AS <子查询> [WITH CHECK OPTION];
SQL四种语言
- DDL(Data Definition Language)数据库定义语言
DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、>>安全控制等约束
DDL不需要commit.
CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME
- DML(Data Manipulation Language)数据操纵语言
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
DML分成交互型DML和嵌入型DML两类。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种。
DML需要commit.
SELECT、INSERT、UPDATE、DELETE、MERGE、CALL、EXPLAIN PLAN、LOCK TABLE
- DCL(Data Control Language)数据库控制语言。授权,角色控制等
GRANT 授权
REVOKE 取消授权
- TCL(Transaction Control Language)事务控制语言
SAVEPOINT 设置保存点
ROLLBACK 回滚
SET TRANSACTION
SQL主要分成四部分:
- 数据定义(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
- 数据操纵(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作
- 数据控制 包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
- 嵌入式SQL的使用规定 涉及到SQL语句嵌入在宿主语言程序中使用的规则。
参照完整性策略
- 拒绝(NO ACTION)执行
- 级联(CASCADE)操作
- 设置为空值
数据库存取方式
存取方式是快速存取数据库中数据的方式,常用的存取方法为索引方法和聚簇方法
B+树索引和hash索引是数据库中经典的存取方法,使用最普遍。
实现查询操作的算法示例
选择操作的实现:
- 简单地全表扫描算法
- 索引扫描算法
连接操作的实现:
- 嵌套循环算法
- 排序-合并算法
- 索引连接算法
- hash join算法
事务
事务概念:事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。
事务的ACID特性:
- 原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的操作要么都做要么都不做。
- 一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。例如某公司有A,B两个账户,A取出一万元存入B账户。那么可以定义为一个事务,该事务包括两个操作,这两个操作要么全做,要么全不做,否则就会破坏一致性。
- 隔离性(Isolation):一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
- 持续性(Durability):也叫永久性。指的是一个事务一旦提交,对数据库的数据的改变就是永久性的,接下来的其他操作或故障不应该对其执行结果有影响。
在不考虑事务的隔离性时,并发操作会带来的数据的不一致性:
- 脏读:脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。当一个事务正在多次修改某个数据,而在这个事务中这多次的修改都还未提交,这时一个并发的事务来访问该数据,就会造成两个事务得到的数据不一致。
- 不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
例如事务T1在读取某一数据,而事务T2立马修改了这个数据并且提交事务给数据库,事务T1再次读取该数据就得到了不同的结果,发送了不可重复读。
不可重复读和脏读的区别是,脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是读取了前一事务提交的数据。