【数据库概论】第三章 SQL简述、数据定义和索引
3.1 SQL概述
3.1.1 产生与发展
最早在IBM的关系数据库管理系统原型SystemR上实现,后来美国国家标准局(ANSI)批准SQL作为关系数据库语言的美国标准,同年公布了SQL标准文本。近些年来SQL标准的内容越来越丰富和复杂。目前没有任何一个数据库系统能够支持SQL标准的所有概念和特性,同时不少软件厂商对SQL基本命令集合进行了不同程度的修改和扩充,又可以支持标准外的一些功能特性。
3.1.2 SQL的特点
SQL的主要特点包括以下几部分:
1.综合统一
数据库系统的主要功能是通过数据库支持的数据语言来实现的。
非关系模型的数据语言一般分为:
- 模式数据定义语言(模式DDL)
- 外模式数据定义语言(外模式DDL)
- 数据存储有关的描述语言(DSDL)
- 数据操纵语言(DML)
曾经的用户数据库投入运行后,如果需要修改模式,必须停止现有数据库的运行,修改模式并且编译后再重装数据库,十分麻烦。而SQL可以独立完成数据库生命周期中的全部活动。因此用户在数据库系统投入使用后还可以根据需要随时的逐步的修改模式,并不影响数据库运行,从而使得系统具有良好的可扩展性。
2.高度非过程化
非关系数据库模型的数据操纵语言是面向过程的语言。而使用SQL的时候,只需要提出“做什么”而无需知名怎么做,因此无需了解存取路径。这个工作由系统自动完成。
3.面向集合的操作方式
SQL采用几何操作方式,对于CRUD的操作以及操作对象、查找结果等操作都可以对元组集合进行操作。
4.以统一语法结构提供多种使用方式
SQL既是独立的语言,也是嵌入式语言。SQL可以嵌入到高级语言的程序中,而且无论是独立使用还是嵌入使用,其语法结构是基本一致的吗,因此统一了在不同语境下的语法使用。
3.1.3 SQL的基本概念
用户可以使用SQL对基本表和视图进行基本操作,他们都是关系集合。
基本表是本身独立存在的表,在关系数据库管理系统中一个关系对应一个基本表。一个或者多个基本表对应一个存储文件,一个表可以带若干索引,索引也可以存放在存储文件中。视图是一个或者几个基本表导出的表,他不独立存储在数据库中,也就是视图是一个虚表,其中的信息是一个或者几个基本表的映射,通常用于供人查看。存储文件是数据的物理形式,存储文件的逻辑结构组成了关系数据库的内模式,其物理结构对最终用户是隐蔽的。
3.2 数据库实例
围绕如下数据库定义:
3.3 数据定义
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有模式、表、视图和索引等。
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下包含多个表、视图和索引等数据库对象。下文中的语句<>括号中的为输入内容,[]括号内的是可选内容
3.3.1 模式的定义和删除
模式定义语句如下:
CREATE SCHEMA <SCHEMA NAME> AUTHORIZATION <USER NAME> [<TABLE DEFINE>|<VIEW DEFINE>]
创建模式需要拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA权限。在创建模式的时候也可以执行创建基本表、视图等语句。定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,比如基本表、视图、索引等。从语句可以看出,定义模式的同时需要将该模式的管理权限授权给某用户。
删除模式语句如下:
DROP SCHEMA <SCHEMA NAME\88888>
<CASCADE|RESTRICT>
其中CASCADE和RESTRICT两者必选其一,CASCADE(级联)表示删除该模式的同时将模式中所有数据库对象都删除,RESTRICT(限制)指的是如果模式中定义了下属的数据库对象,则拒绝执行删除语句,除非该模式没有下属的对象。
3.3.1 模式的定义和删除
模式定义语句如下:
CREATE SCHEMA <SCHEMA NAME> AUTHORIZATION <USER NAME> [<TABLE DEFINE>|<VIEW DEFINE>]
创建模式需要拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA权限。在创建模式的时候也可以执行创建基本表、视图等语句。定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,比如基本表、视图、索引等。从语句可以看出,定义模式的同时需要将该模式的管理权限授权给某用户。
删除模式语句如下:
DROP SCHEMA <SCHEMA NAME\88888>
<CASCADE|RESTRICT>
其中CASCADE和RESTRICT两者必选其一,CASCADE(级联)表示删除该模式的同时将模式中所有数据库对象都删除,RESTRICT(限制)指的是如果模式中定义了下属的数据库对象,则拒绝执行删除语句,除非该模式没有下属的对象。
3.3.2 基本表的定义、删除和修改
1. 常见数据类型
2.定义基本表
定义基本表的格式如下:
CREATE TABLE <TABLE NAME> (
<列名><数据类型>[列完整性约束条件],
[<列名><数据类型>[列完整性约束条件],…]
[表完整性约束条件]
)
其中主要的列完整性约束条件有:
- PRIMARY KEY 主键
- FOREIGN KEY (外码名) REFERENCES 被参照表(被参照列) 外键
- NOT NULL 非空
- UNIQUE 唯一值
3.修改基本表
ALTER TABLE <TABLE NAME>
[ADD [COLUME] <新列名><数据类型>[完整性约束]] -- 新增表项
[ADD <表级完整性约束>] -- 增加表约束
[DROP [COLUME] <列名> [CASCADE|RESTRICT]] -- 删除表项
[DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]] -- 删除表约束
[ALTER COLUME <列名><数据类型>] -- 修改列数据类型
其中ADD用于新增内容,DROP用于删除内容。DROP COLUMN用于删除列,如果指定了CASCADE则会在删除列之前先删除引用该列的其他对象,比如视图;如果指定了RESTRICT,则如果对象被引用,则RDBMS会拒绝删除该列。DROP CONSTRAINT 用于删除指定的完整性约束条件。ALTER COLUMN子句用于修改原有列的定义。
4.删除基本表
DROP TABLE <表名> [RESTRICT|CASCADE]
如果是RESTRICT,则删除是有约束条件的,基本表不能被其他表的约束所引用(比如外键),不能有视图,也不能有触发器,不能有存储过程或者函数。如果有则删除失败。如果选择CASCADE,则该表删除没有限制条件,删除基本表的同时相关的依赖一并删除。
5.模式和表
一个模式包含了多个基本表,每一个基本表都属于一个模式,当定义一个基本表的时候有三种方法定义它所属的模式:
方法一:在表名中明显给出模式名
CREATE TABLE “S-T”.Student(…) -- Student的模式是S-T
方法二:在创建模式语句中同时创建表
方法三,设置所属模式,在创建表时不需要给出模式名
使用语句
SHOW search_path
可以显示当前的搜索路径
6.索引的建立和删除
当表的数据量比较大的时候,查询操作会比较耗时,因此建立索引可以加快查询速度。数据库索引类似于图书的目录,能够快速定位到需要查询的内容。数据库索引会有多种类型,包括顺序文件上的索引、B+树索引、散列索引等等。索引虽然会加速查询速度,但是需要占用一定内存空间,当基本表更新的时候,索引也要做出变更,因此需要一些维护开销。一般来说,建立和删除索引由索数据库管理员或者表的属主(owner)负责完成。关系数据库管理系统在执行查询时会自动选择合适的索引,用户不能显式选择索引。索引是关系数据库内部实现技术,属于内模式范畴。
常见索引形式
- 顺序文件索引是针对按照指定属性值升序或者降序的存储关系。
- B+树索引是将索引属性组织成B+树的形式,B+树的叶节点为属性值和相应的元组指针。B+树具有动态平衡的优点
- 散列索引是建立若干个同,将索引属性按照其散列函数映射到相应的桶中
- 位图索引是用位向量记录索引属性中可能出现的值,每一个位向量对应一个可能值。
建立索引
在SQL语句中,建立索引语句如下:
CREATE [UNIQUE] [CLUSTER] INDEX 索引名
ON <表名>(<列名>[<次序>] [, <列名>[<次序>]])
表名是基本表名字,
索引可与建立在该表的一列或者多列上,各列之间用逗号分隔,次序字段可选ASC(升序)和DESC(降序)
UNIQUE指该索引每一个索引值对应唯一的数据记录;CLUSTER指建立聚簇索引,聚簇索引会在后面介绍到
修改和删除
ALTER INDEX <旧索引名> RENAME TO <新索引名>
DROP INDEX <索引名>