3.1 SQL概述
结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,功能包括:查询、数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
3.1.1 SQL的发展历程:
SQL是在1974年由Boyce和Chamberlin提出的,最初叫Sequel,并在IBM公司研制的关系数据库管理系统原型System R上实现。
3.1.2 SQL的特点:
SQL集数据查询、数据操纵、数据定义和数据控制功能于一体。
1.综合统一
(1)数据库系统的主要功能是通过数据库支持的数据语言来实现的。
(2)可以独立的完成数据库生命周期的全部活动:定义关系模式,插入数据,建立数据库;对数据库中的数据进行查询和更新;数据库重构和维护;数据库安全性、完整性控制等;嵌入式SQL和动态SQL定义。
(3)用户数据库投入运行后,可根据需要随时修改模式,不影响数据的运行,数据操作符统一。
2.高度非过程化
3.面向集合的操作方式
4.以同一种语法结构提供多种使用方式
5.语言简洁,易学易使用
完成核心功能只用了9个动词:
数据查询:SELECT
数据定义:CREATE、DROP(删除)、ALTER(修改)
数据操作:INSERT、UPDATE、DELETE
数据控制:GRANT(授权)、REVOKE(撤回)
3.1.3 SQL的基本概念
支持SQL的关系数据库管理系统同样支持关系数据库三级模式结构,,如图所示:
基本表:独立存在的一个表,SQL中一个关系对应一个基本表,一个表可以带若干个索引,基本表可对应存储文件。
视图:从一个或几个基本表导出的表,数据库中只存放视图的定义而不存放视图对应的数据,视图是一个虚表,用户可以在视图上在定义视图。
存储文件:存储文件的逻辑结构组成了关系数据库的内模式,物理结构是任意的,对用户透明。
3.1.4 SQL语言的分类
SQL是关系型数据库的基本操作语言,是数据管理系统与数据库进行交互的接口。不同的功能又分别对应着各自的SQL语言,具体如下:
1、数据查询语言(DQL)
用户检索数据库中的数据,主要是select语句,它在操作数据库的过程中使用最为频繁,也是最复杂最重要的语句。
2、数据操纵语言(DML)
用于改变数据库中的数据,主要包括insert、update和delete 3条语句。
insert语句用于将数据插入到数据库中,update语句用于更新数据库中已经存在的数据,delete语句用于删除数据库中已经存在的数据。
3、数据定义语言(DDL)
用于建立、修改和删除数据库对象。
例:create table语句可以创建表,alter table语句可以修改表结构,drop table语句可以删除表。
4、数据控制语言(DCL)
用于执行权限授予和权限收回操作,主要包括 grant 和 revoke 两条命令。
grant 命令用于给用户或角色授予权限,而 revoke 命令则用于收回用户或角色所具有的权限。
5、事务控制语言(TCL)
用于维护数据的一致性,包括 commit、rollback 和 savepoint 3条语句。
commit 语句用于提交对数据库的更改,rollback 语句用于取消对数据库的更改,而 savepoint 语句则用于设置保存点。
3.2 数据定义
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有模式、表、视图和索引等。
3.2.1 模式的定义与删除
- 定义模式 schema
CREATE SCHEMA <模式名>AUTHORIZATION <用户名>
例如:为学生XIAOHE定义一个学生-课程模式 S-T。
CREATE SCHEMA “S-T” AUTHORIZATION XIAOHE;
- 删除模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>
例子:DROP SCHEMA ZHANG CASCADE
若选择RESTRICT(限制),该表的删除是有限制条件的。该模式不能被其他模式的约束所引用(如CHECK,FOREIGN KEY等约束),不能有触发器,不能有视图,不能有函数和存储过程等。如果该模式存在这些依赖的对象,此模式不能删除。
若选择CASCADE (级联),该模式的删除没有限制条件。在删除基本模式的同时,相关的依赖对象将会被一起删除。
默认是RESTRICT。
3.2.2 基本表、删除与修改基本表
- 基本表的定义、删除与修改
定义表
CREATE TABLE <表名>(<列名><数据类型>[列级的完整性约束条件])
[,<列名><数据类型>[列级的完整性约束条件]]
[,<列名><数据类型>[列级的完整性约束条件]
[,[表级的完整性约束条件])
- 索引的建立、修改与删除
3.2.3 索引的建立、修改与删除
创建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON table_name (index_col_name,...)
在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。
增加索引
ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。
(1.)ALTER TABLE table_name ADD INDEX index_name (column_list)
(2.)ALTER TABLE table_name ADD UNIQUE (column_list)
(3.)ALTER TABLE table_name ADD PRIMARY KEY (column_list)
删除索引
可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。
(1)DROP INDEX index_name ON talbe_name
(2)ALTER TABLE table_name DROP INDEX index_name
(3)ALTER TABLE table_name DROP PRIMARY KEY