数据库——SQL

关系数据库的标准语言:结构化查询语言 SQL

基本概念

数据库——SQL_第1张图片

外模式包括若干视图和部分基本表

模式包括若干基本表

内模式包括若干存储文件

基本表:是本身独立存在的表,在关系数据库管理系统中,一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引存放在存储文件中

存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构对最终用户隐藏

视图:是从一个或几个基本表导出的表,本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据,数据仍然存放在导出视图的基本表中,视图是虚表

查询表:是一个临时表,只要关闭查询,查询表即刻消失

数据定义

数据库——SQL_第2张图片

SQL 标准不提供修改模式定义和修改视图定义的操作

SQL 标准不提供索引相关的语句,但为了提高查询效率,商用关系数据库通常提供了索引机制和相关语句

模式

定义模式

create schema <模式名> authorization <用户名>

如果没有指定<模式名>,那么<模式名>隐含为<用户名>

实质:定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象

子句:

  create schema 接受的子句:create tablecreate viewgrant,即可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权

create schema <模式名> authorization <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]

删除模式

drop schema <模式名>

cascade:级联,表示删除模式的同时把该模式中所有的数据库对象全部删除

restrict:限制,如果该模式中定义了下属的数据库对象,则拒绝该删除语句的执行,只有该模式中没有任何下属的对象时才能执行 drop schema 语句

默认 restrict

基本表

定义基本表

创建了一个模式就建立了一个数据库的命名空间,一个框架。在这个空间中首先要定义的是该模式包含的数据库基本表

create table <表名> (<列名><数据类型>[列级完整性约束条件]

[,<列名><数据类型>[列级完整性约束条件]]

...

[,<表级完整性约束条件>]);

完整性约束条件:

       建表的同时通常可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中的数据时由关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则在即可以定义在表级上又可以定义在列级上

主码:primary key,主码包含多个属性,必须作为表级完整性约束条件进行定义,

primary key(属性1,属性2,...)

取唯一值:unique

非空:not null

外码:作为表级完整性约束条件出现foreign key(参照关系中的属性) references 被参照关系(属性)

列级约束可以转换为表级约束,表级约束不一定可转换为列级约束

数据类型

SQL 标准支持的数据类型:

数据类型

含义

char(n),character(n)

长度为 n 的定长字符串

varchar(n),charactervarying

最大长度为 n 的变长字符串

clob

字符串大对象

blob

二进制大对象

int,integer

长整数(4字节)

smallint

短整数(2字节)

bigint

大整数(8字节)

numeric(p,d)

定点数,由 p 位数字(不包括符号、小数点)组成,小数点后面有 d 位数字

decimal(p,d),dec(p,d)

同上

real

取决于机器精度的单精度浮点数

double precision

取决于机器精度的双精度浮点数

float(n)

可选精度的浮点数,精度至少为 n 位数字

boolean

逻辑布尔量

date

日期,包含年、月、日,格式为 YYYY-MM-DD

time

时间,包含一日的时、分、秒,格式为 HH:MM:SS

timestamp

时间戳类型

interval

时间间隔类型

SQL Server 常见数据类型:

数据库——SQL_第3张图片

数据库——SQL_第4张图片

数据库——SQL_第5张图片

数据库——SQL_第6张图片

数据库——SQL_第7张图片

数据库——SQL_第8张图片

数据库——SQL_第9张图片

模式与表:

每一个基本表都属于某一个模式,一个模式包含多个基本表

定义基本表时定义其模式的三种方法:

方法一:在表名中显示地给出模式名

create table "模式名".表名(...)

方法二:在创建模式语句中同时创建表

create schema <模式名> authorization <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]

方法三:设置所属的模式,在创建表时表名中不必给出模式名

当用户创建基本表时若没有指定模式,系统根据搜索路径确定该对象所属的模式

搜索路径包含一组模式列表,关系数据库管理系统会使用模式列表中第一个存在的模式作为数据库对象的模式名。若搜索路径中的模式名都不存在,系统将会给出错误。

显示当前的搜索路径:

show search_path;

修改基本表

alter table <表名>
[add [column] <新列名> <数据类型> [完整性约束]]//增加新列,column 可省略
[add <列级完整性约束>]//增加列级完整性约束条件
[add <表级完整性约束>]//增加表级完整性约束条件
[drop [column] <列名> [cascade|restrict]]//删除列,指定cascade自动删除引用该列的其他对象;指定restrict若该列被其他对象引用则拒绝删除该列
[drop constraint <完整性约束名> [restrict|cascade]]//删除指定的完整性约束条件,此处,需要给完整性约束条件取名字
[alter column <列名> <数据类型>]//修改列的数据类型

修改列名,一般方法,增加新的列,删除原来一列,一般禁止修改

不论基本表中原来是否已有数据,新增加的列一律为空值,若设定新的列为非空,则无法将新的列添加入表中

add子句:增加新列、新的列级完整性约束条件、新的表级完整性约束条件

drop column子句:删除表中的列,指定cascade自动删除引用该列的其他对象;指定restrict若该列被其他对象引用则拒绝删除该列

drop constraint子句:删除指定的完整性约束条件,需给完整性约束条件取名

alter column子句:修改原有的列定义,包括修改列名、数据类型

删除基本表

drop table <表名> [restrict|cascade]

restrict:有限制条件,欲删除的基本表不能被其他表的约束所引用,不能有视图,不能有触发器,不能有存储过程或函数……如果存在依赖该表的对象,则此表不能被删除

cascade:没有限制条件,在删除此表的时候,相关的依赖对象,一同被删除

默认 restrict

基本表定义一旦被删除,不仅表中的数据和此表的定义被删除,而且此表上建立的索引、触发器等对象一般也都将被删除。有的关系数据库管理系统还会同时删除此表上建立的视图。若欲删除的基本表被其他表所引用,则这些表也可能被删除。

索引

建立索引是加快查询速度的有效手段,但需要占用一定的存储空间,当基本表更新时,索引要进行相应的维护,会增加数据库的负担

常见的索引:顺序文件上的索引、B+树索引、散列索引、位图索引……

顺序文件上的索引:按指定属性值升序或降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成

B+树索引:将索引属性组织成B+树形式,B+树的叶结点为属性值和相应的元组指针,具有动态平衡优点

散列索引:建立若干个桶,将索引属性按照其散列函数值映射到相应桶中,桶中存放索引属性值和相应的元组指针,具有查找速度快的特点

位图索引:用位向量记录索引属性中可能出现的值,每个位向量对应一个可能值

索引属于内模式的范畴

建立与删除索引由数据库管理员或表的属主,即建立表的人,负责完成

关系数据库管理系统在执行查询时会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引

建立索引

create [unique] [cluster] index <索引名> on <表名> (<列名>[<次序>] [,<列名> [<次序>]]...);

<表名>:要建索引地基本表的名字,索引可以建立在该表的一列或多列上,每个<列名>后面可以用<次序>指定索引值的排列次序,可选 asc(升序)或 desc(降序),默认为 asc

unique:表明此索引的每一个索引值只对应唯一的数据记录

cluster:表明要就建立的索引是聚簇索引

修改索引

修改索引名:alter index <旧索引名> rename to <新索引名>

删除

drop index <索引名>

删除索引时,系统会同时从数据字典中删去有关该索引的描述

数据查询

数据查询是数据库的核心操作

select [all|distinct] <目标列表达式> [,<目标列表达式>]...  //all全部;distinct删去重复的
from <表名或视图名> [,<表明或视图名>...]|(