目录
1.SQL概述
(1)SQL概述
SQL(Structured Query Language):
• 结构化查询语言,是关系数据库的标准语言
(2)SQL历史
• 1970年Codd提出关系模型之后,由于关系代数或者关系都太数学了,难以被普通用户接 受,于是1973年IBM开展了System R的研制工作
• System R 关系模型为基础,但是摒弃了数学语言,以自然语言为方向,结果诞生了结构 化英语查询语言(Structured Query Language,SEQUEL),负责人为Don Chamberlin博士
• 后拉更名为SQL,发音不变
• System R获得1988年度ACM“软件系统奖”
(3)SQL标志的进展过程
目前,没有一个数据库系统能够支持SQL标志的所有概念和特性
(4)SQL的特点
SQL示例:
① 综合统一
■ 集数据定义语言(DDL),数据操作语言(DML),数据控制语言(DCL)功能与一体
■ 可以独立完成数据库生命周期中的全部活动:
• 定义和修改、删除关系模型,定义和删除视图,插入数据,建立数据库
• 对数据库中的数据进行查询和更新
• 数据库重构和维护
• 数据库安全性、完整性控制,以及事物控制
• 嵌入式SQL和动态SQL定义
② 高度非过程化
■ 非关系数据模型的数据操纵语言 “面向过程” ,必须指定存储路径
■ SQL只要提出 “做什么” ,无须了解存储路径
■ 存取路径的选择以及SQL的操作过程由系统自动完成
③ 面向集合的操作方法
■ 非关系数据模型采用面向记录的操作方法,操作对象是一条记录
■ SQL采用集合操作方法
■ 操作对象、查找结果可以是元组的结合
■ 一次插入、删除、更新操作的对象可以是元组的结合
④ 以同一种语法结构提供多种使用方式
■ SQL是独立的语言
• 能够独立地用于联机交互的使用法式
■ SQL又是嵌入式语言
• SQL能够嵌入到高级语言(C++,Java等)程序中,供程序员设计程序使用
⑤ 语言简洁,易学易用
■ SQL功能极强,完成核心功能只用了 9 个动词
(5)SQL的基本概念
① 基本表
■ 本身独立存在的表
■ SQL中一个关系就对应一个基本表
■ 一个(或多个)基本表对应一个存储文件
■ 一个表可以带若干个索引
② 存储文件
■ 逻辑结构 组成了关系数据库的内模式
■ 物理结构对用户是隐蔽的
③ 视图
■ 从一个或几个基本表导出的表
■ 数据库中只放视图的定义而不存放视图对应的数据
■ 视图是一个虚表
■ 用户可以在视图上在定义视图
学生 - 课程 数据库
【示例】学生 - 课程模式 S-T:
2. 数据字典
■ 数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息
• 关系模型、表、视图、索引的定义
• 完整性约束的定义
• 各类用户对数据库的操作权限
• 统计信息等
■ 关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息
3. 数据定义
(1)数据定义
■ SQL的数据定义功能:定义各种数据库的 “对象”
• 模式定义
• 表定义
• 视图定义
• 索引定义
■ 各种数据库 “对象”
● 现代关系数据库管理系统提供了一个层次化的数据库对象命名机制
• 一个数据库中可以建立多个模式
• 一个模式下通常包括多个表、视图和索引等数据库对象
(2)模式的定义与删除
① 定义模式
■ 定义模式实际上定义了一个命名空间(或者说目录)
■ 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等
■ 在 CREATE SCHEMA 中可以接受 CREATE TABLE,CREATE VIEW 和 GRANT子句
CREATE SCHEAMA <模式名> AUTHORIZATION <用户名>【<表定义子句> | <视图定义子句> | <授权定义子句>】
② 删除模式
■ DROP SCHEMA <模式名> <CASCADE | RESTRICT>
● CASCADE(级联)
• 删除模式的同时把该模式中所有的数据库对象全部删除
● RESTRICT(限制)
• 如果该模式中定义了下属的数据库对象(表、视图等),则拒绝该删除语句的执行
• 仅当前模式中没有任何下属的对象时才能执行
(3)基本表的定义、删除与修改
① 定义基本表的标准格式
■ <列级完整性约束条件>:涉及相应属性列的完整性约束条件
■ <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
■ 如果完整性约束条件涉及到表的多个属性列,则必须定义在表级上
【例3.5】建立 “学生” 表 Student。学号是主码,姓名取值唯一
【例3.6】建立一个 “课程” 表Course
【例3.7】建立一个学生选课表 SC
② 数据类型
■ 关系模型中 “域” 的概念用数据类型来实现
■ 定义表的属性时需要指明其数据类型及长度
■ 选用那种数据类型
• 取值范围
• 要做那些运算
③ 模式与表
■ 每一个基本表需属于某个模式
■ 定义基本表所属模式的方式
● 方式一:在表名明显地给出模式名
• Create table "S - T" . Student (.......) ; /*模式名为 S - T*/
• Create table "S - T" . Cource (......)
• Create table "S - T" . SC (......)
● 方法二:在创建模式的同时创建表
● 方法三:设置所属的模式
■ 创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该 对象所属的模式
■ 关系数据库管理系统会以 “搜索路径” 指向的模式作为数据库对象的模式名
■ 设置搜索路径的方式:SET search_path TO "S - T" , PUBLIC
④ 修改基本表
■ <表名> 是要修改的基本表
■ ADD子句用于增加新列、新的列级完整性约束条件和新的表完整性约束条件
■ DROP COLUMN子句用于删除表中的列
• 如果指定了CASCADE短语,则自动删除引用该列的其他对象
• 如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删 除该列
■ DROP CONSTRAINT
■ ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
【例3.8】向Student表增加 “入学时间”列,其数据类型为日期型
不管基本表中原来是否已有数据,新增加的列一律为空值
【例3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整型
【例3.10】增加课程名称必须取唯一值的约束条件
⑤ 删除基本表
■ RESTRICT:删除表示有限制的
• 欲删除的基本表不能被其他表的约束索引
• 如果存在依赖表的对象,则此表不能被删除
■ CASCADE:删除表没有限制
• 在删除基本表的同时,相关的依赖对象一起删除
(4)索引的建立与删除
① 索引的定义
■ 建立索引的目的:加快查询速度
■ 关系数据库管理系统中常见索引
• 顺序文件上的索引
• B+树索引
• 散列(hash)索引
• 位图索引
■ 特点:
• B+索引具有动态平衡的优点
• HASH索引具有查找速度快的特点
■ 谁可以建立索引
• 数据库管理员 或 表的属主(即建立表的人)
■ 谁维护索引
• 关系数据库管理系统自动完成
■ 使用索引
• 关系数据库管理系统自动选择合适的索引作为存取路径,用户不必不能显式地选择索引
② 建立索引的标准格式
■ <表名>:要建立索引的基本表的名字
■ 索引:可以建立在该表的一列或多列上,各列之间用逗号分隔
■ <次序>:指定索引值的排序次序,升序:ASC,降序:DESC。缺省值:ASC
■ UNIQUE:此索引的每一个索引值只对应唯一的数据记录
■ CLUSTER:表示要建立的索引是聚簇索引
③ 修改索引
■ ALTER INDEX <旧索引名> RENAME TO <新索引名>
【例3.14】将SC表的SCno索引名改为SCSno
■ DROP INDEX <索引名>
删除索引时,系统会从数据字典中删去有关该索引的描述
【例3.15】删除Student 表的Stusname索引