一、SQL概述
1.简介
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。
2.特点
- 综合统一
- 高度非过程化
- 面向集合的操作方式
- 以同一种语法结构提供两种使用方法
- 语言简洁,易学易用
3.组成
- 一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。
- 一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项。
- 一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。
- 一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。
- 用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。
- SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。
4.SQL分类
- DDL:数据定义语言。包括CREATE / ALTER / DROP / RENAME / TRUNCATE
- DML:数据操作语言。包括INSERT / DELETE / UPDATE / SELECT
- DCL:数据控制语言。包括COMMIT / ROLLBACK / SAVEPOINT / GRANT / REVOKE
5.书写规范
- 数据库名、表名、表别名、字段名、字段别名等都小写
- SQL关键字、函数名、绑定变量等都大写
学习技巧:大处着眼,小处着手!
二、数据定义
功能包括模式定义、表定义、视图和索引的定义。
1.模式的定义与删除
①定义模式
模式定义语句:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句> | <视图定义子句> | <授权定义子句>]
注:
- 如果没有指定<模式名>,那么其隐含为<用户名>
- 要创建模式,调用该指令的用户必须拥有DBA权限
- 定义模式实际上定义了一个命名空间,在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等。
- 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句。
②删除模式
模式删除语句:
DROP SCHEMA <模式名> <CASCADE | RESTRICT>
注:
- CASCADE 和 RESTRICT两者必选其一
- 前者表示级联,表示在删除模式的同时把该模式中所有的数据库对象全部删除
- 后者表示限制,表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
2.基本表的定义、删除与修改
①定义基本表
定义格式:
CREATE TABLE <表名>(<列名> <数据类型> [列级完整性约束条件] [,<列名> <数据类型> [列级完整性约束条件]] … [,<表级完整性约束条件>]);
名词解释:
- <表名>:所要定义的基本表的名字
- <列名>:组成该表的各个属性(列)
- <列级完整性约束条件>:涉及相应属性列的完整性约束条件
- <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
②数据类型
③模式与表
每一个表都属于一个模式,一个模式包含多个基本表。
定义基本表所属的模式的方法:
- 在表名中明显的给出模式名
- 在创建模式语句中同时创建表
- 设置所属的模式,这样在创建表名时不必给出模式名
当用户创建基本表时,没有指定模式,系统根据搜索路径来确定该对象所属的模式。
搜索路径包含一组模式列表,RDBMS会使用模式列表中第一个存在的模式作为数据库对象的模式名。若搜索路径中的模式名都不存在,系统将给出错误。
显示当前的搜索路径:
SHOW search_path;
默认值:$user, PUBLIC
设置搜索路径(DBA用户):
SET search_path TO "S-T",PUBLIC;
定义基本表:
CREATE TABLE Student();
建立S-T.Student
基本表。因为RDBMS发现搜索路径中第一个模式名S-T存在,就把该模式作为基本表Student所属的模式
④修改基本表
语句格式:
ALTER TABLE <表名> [ADD <新列名> <数据类型> [完整性约束]] [DROP <完整性约束名>] [ALTER COLUMN <列名> <数据类型>];
- <表名>:要修改的基本表
- ADD子句:增加新列和新的完整性约束条件;
- DROP子句:删除指定的完整性约束条件;
- MODIFY子句:用于修改列名和数据类型;
⑤删除基本表
语句格式:
DROP TABLE <表名> [RESTRICT|CASCADE]
- RESTRICT:删除表是有限制的。要删除的表不能被其他表的约束所引用。若存在依赖该表的对象,则此表不能被删除。
- CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除。
3.索引的建立与删除
建立索引是加快查询速度的有效手段。建立索引由DBA或表的属主(即建立表的人)根据需要建立。
①建立索引
语句格式:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…);
名词解释:
- <表名>:要建索引的基本表的名字;
- 索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔;
- <次序>:指定索引值的排列次序,升序:ASC,降序:DESC,默认升序;
- UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
- CLUSTER表示要建立的索引是聚簇索引。指索引项的顺序与表中记录的物理顺序一致的索引组织
聚簇索引:
- 经常查询的列上建立聚簇索引可以提高查询效率。
- 最多只能建立一个聚簇索引
②删除索引
删除索引时,系统会从数据字典中删去有关该索引的描述。无需用户干预
DROP INDEX Stusname;