第六章 SQL标准 v1.0
第一部分 数据库语言与SQL概述
一、数据库语言概述
1.标准数据库语言
数据定义语言(DDL,Data Definition Language)
用于定义数据库模式,DDL包括数据库模式定义、数据库存储结构和存取方式定义,数据库模式的修改与删除功能。
数据操纵语句(DML,Data Manipulation Language)
用来表示用户对数据库的操作请求,一般能表示如下数据库操作:
- 查询数据库中的信息
- 向数据库插入新的信息
- 从数据库删除信息
- 修改数据库中的信息
DML分为过程性和非过程性两种,过程性语言要求用户既要说明数据库中的什么数据,也要说明如何搜索这些数据;非过程性语言只要求用户说明需要数据库中的什么数据,不需要说明怎样搜索这些数据。
2.数据库语言分类
自含式SQL
SQL可以作为独立语言用户在终端以交互的方式使用,对数据库进行操作
嵌入式SQL
SQL可以作为程序设计的子语言使用,即嵌入到高级语言中使用,这种方式下使用的SQL称为嵌入式SQL,嵌入SQL的高级语言称为宿主语言。
宿主型数据库语言SQL处理的两种方式
- 采用预编译
- 修改和扩充主语言,使之能处理SQL语句
二、SQL概述
1.SQL标准
主要标准:
- ANSI SQL(美国国家标准机构SQL)
- SQL-92(SQL2标准)
- SQL-99(SQL3标准)
最近的标准是SQL:2003
2.SQL三级结构模式
SQL支持关系型数据库的三级结构模式,视图对应外模式、基本表对应模式、存储文件对应内模式
3.SQL的基本组成
- 数据定义语言,SQL DDL提供定义、删除、修改关系模式和视图、表等命令
- 交互式数据库操纵语言,SQL DML提供查询、插入、删除和修改等命令
- 事务控制,提供定义事务开始与结束的命令
- 嵌入式SQL和动态SQL,用于嵌入到某种通用的高级语言混合编程
- 完整性,SQL DDL包含定义数据库中的数据必须满足完整性约束条件的命令
- 权限管理,SQL DDL中包括说明对关系和视图的访问权限
第二部分 SQL语言
SQL语言中多条件查询技巧
select * from <表名> where 1=1 [ and 条件 or 条件]
一、用户权限管理
1.授权(GRANT)
sql
GRANT <权限> ON <DATABASE.TABLE> TO <USER>|PUBLIC
[WITH GRANT OPTION];说明:
- WITH GRANT OPTION:表示该用户可以将得到的权限赋给其他用户
- 权限:

2.收回权限(REVOKE)
sql
REVOKE <权限> ON <DATABASE.TABLE> FROM <USER>|PUBLIC
[RESTRICT|CASCADE]; //前者只回收指定用户权限,后者还收回该用户赋予的其他用户权限二、触发器
1.创建触发器
sql
CREATE TRIGGER <触发器名> [BEFORE|AFTER] [DELETE|INSERT|UPDATE OF 列名]
ON <表名>
[REFERENCING <别名>]
[FOR EACH ROW|FOR EACH STATEMENT]
[WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作
BEGIN
<触发动作>
END说明:
- BEFORE|AFTER:指明是在执行触发语句之前激发触发器还是执行触发语句之后激发触发器。
- DELETE:当一个DELETE语句从表中删除行时激发触发器。
- INSERT:当一个INSERT语句向表中插入行时激发触发器。
- UPDATE|UPDATE OF(列名):当UPDATE修改表中的值时,激发触发器,也可加(OF 列名)指定是某一列的值被修改时激发触发器
- REFERENCING:触发器运行过程中,系统会生成两个临时视图,分别存放更新前和更新后的值,对于行级触发器,为OLD ROW和NEW ROW,对于语句级触发器,为OLD TABLE和NEW TABLE.
- 如:
REFERENCING new row AS nrow / REFERENCING old row AS orow - FOR EACH ROW:表示为行级触发器,对每个被影响的元组(即每行)执行次触发过程。
- FOR EACH STATEMENT:表示为语句级触发器,对整个事件只执行一次触发过程,为默认方式。
2.修改触发器
sql
ALTER TRIGGER <触发器名> [BEFORE|AFTER] [DELETE|INSERT|UPDATE OF列名]
ON <表名>
[REFERENCING <别名>]
[FOR EACH ROW|FOR EACH STATEMENT]
[WHEN <触发条件>] //WHEN后面跟触发条件,指明当什么条件满足时,执行下面的触发动作
BEGIN
<触发动作>
END3.删除触发器
sql
DROP TRIGGER <触发器名>;三、嵌入式SQL
1.使用嵌入式SQL
开头:EXEC SQL <SQL语句>
2.传递嵌入式SQL执行状态的方式
SQLCA(SQL通行区)
3.主变量
使用主变量(主语言提供的参数,也叫共享变量)时,为做区分前面加:,如::name
四、存储过程与函数
1.存储过程的定义
sql
CREATE PROCEDURE <存储过程名>(IN|OUT|IN OUT <参数1> <数据类型1>,...)
BEGIN
<SQL语句块>
END2.函数的定义
sql
CREATE function <函数名>(参数名 参数类型) RETURN 返回值数据类型
BEGIN
DECLARE <参数名> 参数类型
RETURN 表达式;
END3.游标
sql
#定义游标
EXEC SQL DECLARE 游标名称 CURSOR FOR
<SELECT语句>
#打开游标
EXEC SQL OPEN 游标名称
#推进游标
EXEC SQL FETCH 游标名称 INTO 变量表
#关闭游标
EXEC SQL CLOSE 游标名称