使用视图
视图
- 视图是虚拟的表,是动态查询 的一种表现
- 重用SQL语句
- 简化复杂的SQL操作.在编写查询后,可以方便的重用它而不必知道其他查询细节
- 使用表的一部分而不是整个表
- 保护数据.可以授予用户访问表的特定部分的权限,而不是这个表的访问权限
- 更改数据格式和表示.视图可返回与表层表的表示和格式不同的数据
- 视图的名字和表的名字都是唯一的
- 可创建视图的数量没有限制
- 视图可以嵌套,可以利用其它视图数据中检索出来的数据来构建视图
- 在许多DBMS中不允许用ORDER BY 来构建视图
- 有些DBMS要求返回的所有列必须有列名,如果是计算列,则需要别名
- 视图不能索引,也不能有关联的触发器,和默认值
- 有些DBMS只有查询阅读,没有写
- 有些DBMS在显示的列中有数据被删除或更新就不在这个视图了.
创建视图
-
视图的创建用 CREATE VIEW语句来创建
- CREATE VIEW ProductCustomers AS SELECT cust_name, cust_contact, prod_id FROM Customers, Orders, OrderItems WHERE Customers.cust_id = Orders.cust_id AND OrderItems.order_num = Orders.order_num
-
创建视图可以一次运行SQL语句,创建动态的查询,简化SQL语句的查询
-
利用视图可以重新格式化检索出来的数据
存储过程
为什么?
- 为了核对数据保证满足一些条件
- 对一些数据做预操作
- 数据到了某个界限,触发一些操作
- 相当于封装了一组SQL语句,调用时完成某些功能到一个简易的单元中,可以简化复杂的操作
- 由于建立的代码是同一,所以调用这个操作的数据也是一样的,防止出错的可能,
- 对管理的简化,对变动的管理只需要对存储过程做出改变,其他人员可以不知道这个变化.保证了安全性
- 因为存储过程是编译过的存储结构,所以DBMS执行处理命令时会有更少的工作量,提高了性能
- 使用存储过程可以更灵活更强的功能的处理数据
- 简单,安全,性能高
缺点
- 可移植性不高,因为DBMS的有一些差异,可能会需要更改一些结构,字段等
- 因为编写存储过程的SQL语句很复杂,所以需要有专业的知识,需要提高性能需要更为丰富的经验
执行存储过程
-
EXECUTE 存储过程的名和需要传递的任何参数
- EXECUTE AddNewProduct( ‘JTS01’, ‘Stuffed Eiffel Tower’, 6.49, ‘Plush stuffed toy with the text La ➥Tour Eiffel in red white and blue’ );
- 验证传递的数据,保证参数的完整性
参数可选,如果不传可以设置默认值 - 如果不按次序,传递参数需要用’参数=值’的来传递参数
- 输出参数,允许存储过程在执行的时候,可以更新使用的参数
- 用SELECT语句检索数据
- 子主题允许存储过程返回一个值给执行的应用程序 6
创建存储过程
-
CREATE PROCEDURE 等关键字
- CREATE PROCEDURE MailingListCount ( ListCount OUT INTEGER )
IS v_rows INTEGER;
BEGIN SELECT COUNT(*) INTO v_rows FROM Customers WHERE NOT cust_email IS NULL; ListCount := v_rows; END; - ListCount 是该函数的参数
- OUT 是一种行为,表示是返回一个值
- IN 表示传入的值
- INOUT 表示既传递又传回
- 以上只有一部分支持,如果要编写存储过程还需要,去查看DBMS的文档
- CREATE PROCEDURE MailingListCount ( ListCount OUT INTEGER )
事务处理
使用事务为了保证SQL要么执行,要么不执行,保证数据库的完整性
数据库故障:超出磁盘空间,安全限定,表锁
术语
- 事务:表示执行一组SQL语句
- 退回:表示撤销指定SQL语句的过程
- 提交:是将为存储的SQL结果存入数据库中
- 保留点:指事务处理中设置的临时占位符,对它分布回退
- 事务处理用来管理INSERT,UPDATE和DELETE语句,不能回退SELECT,CREATE或DROP语句,
STR TRANSACTION
- 控制事务处理
COMMIT
- 一般DBMS都有隐式提交,就是提交会自动进行
- 但是开启事务后就不会隐式提交,需要在确认不会出错是提交
ROLLBACK
- DELETE FROM Orders; ROLLBACK;
- 利用SQL的ROLLBACK命令撤销SQL语句
SAVEPOINT 名字
-
创建占位符
-
表留点如果表退回某个状态,
- ROLLBACK TRANSACTION delete1;
- ROLLBACK TO delete1;
游标
SQL操作返回的一组称为结果集的行.简单的使用SELECT没办法得到特定的行
有的时候需要在检索的结果集中前进和后退一行或多行,这就是游标的用途
特性
- 可以设置游标为只读,就只能浏览,不能进行删除和更新
- 能够操控可执行的定向操作(向前,后,第一个,最后一个,绝对位置,相对位置
- 标记某些列可编辑和不可编辑的
- 规定范围,划定不同权限的可浏览的范围
使用
- 在使用游标之前一定要定义它,在个过程中没有检索数据,这是在定义要是用的SELECT语句,和游标的选项
- 一旦声明,就必须打开游标以供使用,调用前面定义的SELECT语句检索出来
- 对于有数据的游标,根据需要的行提取数据
- 在结束使用时,要关闭游标,如果可能的话,释放游标
- 使用OPEN CURSOR 游标名 CHAR(number)语句打开游标
- 关闭使用 CLOSE 游标名
- 子主题 7
创建游标
- DECLARE CustCursor CURSOR FOR SELECT * FROM Customers WHERE cust_email IS NULL
- 用 DECLARE 游标名 SELECT来创建游标
高级SQL特性
约束
-
管理如何插入或处理数据库数据的规则
-
大多是在创建表和修改表的时候就已经定好了
-
主键
-
主键是一种特殊的约束,要保证这一列(一组列)是唯一的,而且永远不变动额的.
-
任意两个主键是唯一的
-
每行都有一个自己的主键不能weiNULL
-
主键是不修改,不更新
-
主键是不能重复利用的,删除了其他主键也不能用
-
创建和修改时用PRIMARY KE 定某列就可以设置值为主键,前提要符合主键的条件
- ALTER TABLE Vendors ADD CONSTRAINT PRIMARY KEY (vend_id);
-
-
外键
- 外键的值要保证在另一个表的主键中
- 要保证引用的完整性
-
唯一约束
- 保证一列中的数据是唯一的
- 每个表可以有多个唯一约束,但是主键只有一个
- 唯一约束可有NULL值
- 可以修改或更新
- 可以重复利用
- 不能用来做外键
-
检查约束
- 保证一列的数据满足一定的条件
索引
- 用来排序数据,用来加速搜索和排序的速度
- 索引增加了检索的操作,却降低的插入,修改删除的性能,DMNS需要动态的更新索引
- 索引数据可能要占据大量的存储空间
- 并非所有的数据都适合建立索引,可能性多的数据建立索引好处更大
- 索引用于数据过滤和数据排序,如果经常用某种特定的顺序排序,这个数据更适合做索引
- 可以在索引中定义多个列
触发器
-
触发器是一种特殊的存储过程.它在特定的数据库活动发生是自动执行
-
对数据访问权限
- INSERT 的新数据
- UPDATE操作中的新老数据
- DELETE 操作中删除的数据
-
用途
- 保证数据的一致性
- 基于一个表的更改时,在另一个表中执行的活动
- 根据额外的验证回退数据
- 计算计算列的值或更新时间戳
- 约束比触发器更快,一般选择约束