数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

2018-02-19 18:03:54

一、数据操纵语言(Data Manipulation Language)

数据操纵语言是指插入,删除和更新语言。

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

二、视图(View)

数据库三级模式,两级映射中,使用视图可以实现外模式,可以实现数据的逻辑独立性。

视图可以分为两种:

1、普通视图(General view):使用CREATE VIEW 生成的视图,是通过基表进行运算得到的,也被称为虚表,其定义是永久保存的,其内容是临时计算的。

视图在一定程度上可以保证数据的安全性,因为可以选择呈现给用户的数据。另外,在早期,视图中的数据是不允许修改的,因为视图是一张虚表,是实际不存在的表。但是如果说能保证数据和基表的唯一对应,则可以进行修改。

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

2、临时视图(Temporary view and recursive query):使用WITH子句定义的临时表称为临时视图,注意其定义也是不进行保存的,可以实现递归查询。

三、嵌入式SQL

如何在程序设计语言中使用SQL呢?

主要要解决如下几个问题:

  1. 如何让程序设计语言接受SQL语句;
  2. 如何让程序和数据库如何交换消息和数据;
  3. 查询结果是一个集合,如何将其传递给程序设计语言中的变量;
  4. 数据类型的匹配问题

主要解决方法:

  1. 嵌入式SQL;
  2. 编程API(ODBC,JDBC等);
  3. 封装类库;

以C语言中的嵌入式SQL为例,其中有一些基本概念:

  1. 以 EXEC SQL 开头,分号结尾;
  2. 通过宿主变量(host variables)进行数据的交互;
  3. 在SQL中使用宿主变量需要加上:,以示区分;
  4. 有一个特殊的宿主变量SQLCA (SQL Communication Area),使用 EXEC SQL INCLUDE SQLCA 来定义;
  5. SQLCA.SQLCODE 来判别语句执行状态;
  6. indicator (short int) 来表征NULL;

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

首先可以定义一些宿主变量,之后通过这些宿主变量进行交互。但是,这里有一个问题就是如何对返回结果为集合的SQL语言进行数据的交互。解决方案就是很常用的cursor,游标机制。通过游标机制,可以将返回的集合看成文件进行读取。

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

四、动态SQL

程序运行前程序执行的SQL语句是没法确定的,所以需要使用动态SQL。先前的游标中的SELECT语句是写死的,但是实际应用中是不能这样的,经常需要运行时确定。

主要有三类动态SQL:

  1. Dynamic SQL executed directly:主要指非查询的插删改语句;
  2. Dynamic SQL with dynamic parameters:带有动态参数;
  3. Dynamic SQL for query:带有查询语句;

1)Dynamic SQL executed directly

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

2)Dynamic SQL with dynamic parameters

使用占位符进行带动态参数的动态SQL。

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

3)Dynamic SQL for query

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

五、存储过程

将经常使用的一组SQL语句可以存储成一个存储过程,系统可以将其进行优化存储,下次使用的时候用户就可以很方便的进行调用,不用重复编写。本质就是一种SQL语句的封装。

数据库原理及应用-SQL数据操纵语言(Data Manipulation Language)和嵌入式SQL&存储过程

上一篇:在Linux Mint上安装node.js和npm


下一篇:微信浏览器是移动端的IE6?微信升级内核后Html5和CSS3兼容性总结