【转】视图、索引、存储过程 、触发器、游标及事务
原文地址:http://www.cnblogs.com/dong897812629/archive/2013/03/27/2981142.html
视图
1.视图不占物理存储空间,它只是一种逻辑对象。可将其看成一个"虚表"
视图是一个由select 语句指定,用以检索数据库表中某些行或列数据的语句存储定义
注:创建视图语句中,不能包括order by、compute或者compute by 子句,也不能出现into关键字
2.创建水平视图
视图的常见用法是限制用户只能够存取表中的某些数据行,用这种方法产生的视图称为水平视图,即表中行的子集
create view student_view1
as
select * from student
where (class_id='0903')
3.创建投影视图
如果限制用户只能存取表中的部分列的数据,那么,使用这种方法创建的视图就称为投影视图,即表中列的子集
create view student_view2
as
select student_id as '学号' ,student_name as '姓名',sex as '性别'
from student
where sex=1
with check option /*强制视图上执行的所有修改语句必须符合由select 语句设置的准则*/
4.创建联合视图
用户可以生成从多个表中提取数据的联合视图,把查询结果表示为一个单独的"可见表"
索引
5.索引是数据库的对象之一,索引是为了加速对表中数据行的检索而创建的一种分散的一种存储结构。
索引是针对一个表而建立的,它是由数据页面以外的索引页面组成的
6.索引的分类
聚簇索引
数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录
create unique clustered index book_id_index--惟一性聚簇索引
on book(book_id asc)
with
fillfactor=50 /*填充因子50%*/
非聚簇索引
create nonclustered index student_course_index
on student_course(student_id asc,course_id asc)
with
fillfactor=50
存储过程
存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL代码集。它与特定的数据库相关联,存储在SQL Server 服务器上
存储过程的好处:
(1)重复使用。存储过程可以重复使用,从而减少数据库开发人员的工作量
(2)提高性能。存储过程在创建的时候就进行了编译,将来使用的时候就不用再编译。一般的SQL语句使用一次就编译一次,所以使用存储过程提高了效率
(3)减少网络流量。存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此减低了网络传输的运输量
(4)安全性。参数化的存储过程可以防止SQL注入攻击,而且可以将Grant、Deny、以及Revoke权限应用于存储过程
定义一个存储过程:
create proc spAddStudents
@name nvarchar(50)=null
as
begin transaction --事务
insert into [StudentInfo].[dbo].[Students]
(Name)
values
(@name)
if @@ERROR<>0
begin
rollback tran
return
end
commit transaction--提交事务
创建一个实现加法计算并将运算结果作为输出参数的存储过程
create proc spAdd
@value1 int,
@value2 int,
@result int output
as
select @result=@value1+@value2
go
执行spAdd存储过程
declare @value1 int
declare @value2 int
declare @result int
set @value1=1
set @value2=1
exec spAdd @value1,@value2,@result output
print convert(char(5),@value1) +'+'+convert(char(5),@value2) +'='+ convert(char(5),@result)
触发器
触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行update、insert或delete语句时自动触发执行,以防止对数据进行不正确、未授权或不一致的参数
/*创建update触发器*/
create trigger [dbo].[TaocanType_update] on [dbo].[Table_TaocanType]
for update
as
update [dbo].[Table_ChoseTaocanType] set Taocan=inserted.Taocan
from [dbo].[Table_ChoseTaocanType] ,inserted where [dbo].[Table_ChoseTaocanType].TaocanId=inserted.TaocanId
触发器能够维持两个表间的参照完整性,就像外键一样。外键执行这个任务的效率更高,因为它们在数据改变之前被测试,而不像触发器在数据改变后才触发
游标
游标是一种处理数据的方法,为了查看或者处理结果集中的数据,游标提供了在结果集中向前或者向后浏览数据的能力
(1)创建游标
(2)打开游标
(3)读取数据
(4)数据操作
(5)关闭和释放游标
declare @taocan nvarchar(50),@youhui nvarchar(50)
declare taocan_cursor scroll cursor --声明游标
for
select Taocan,youhui from [189Shop].[dbo].[Table_TaocanType]
for read only
open taocan_cursor ---打开游标
fetch from taocan_cursor into @taocan,@youhui --从游标中提取行
while @@FETCH_STATUS=0--表示成功完成FETCH 语句
begin
print '套餐:'+@taocan+',优惠:'+@youhui
fetch from taocan_cursor into @taocan,@youhui
end
close taocan_cursor --关闭游标
deallocate taocan_cursor --释放游标
事务
所谓事务,是指一个操作序列,这些操作序列要么都被执行,要么都不被执行,它是一个不可分割的工作单元
相关文章
- MySql Blob图片类型存储Bug解决:索引超出了数组界限错误
- Oracle常用存储过程写法
- EasyDarwin开源流媒体服务器进行RTSP转发过程中将sdp由文件存储改成内存索引
- Atitit table的类型 表类型目录1. 元数据表 日志表 12. 按照文件结构分为堆组织表(HOT)和索引组织表(IOT) 13. 内存表和文件存储表q 24. 全局表 2
- Atitit index threod type 索引原理与类型 种类 目录 1.1. 每个文档在经过底层的存储引擎持久化后1 2. MongoDB索引类型2 2.1. 包括单字段索引、复合索引
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- Atitit.h5 web webview性能提升解决方案-----fileStrore缓存离线存储+http方案
- Database之SQL:RDBMS关系型数据库的简介、SQL语言的简介(原理/各大方言对比)、基础(SQL执行顺序/五大类函数/索引/视图/事务/安全/存储过程/游标/优化)之详细攻略
- 【ClickHouse 极简教程-图文详解原理系列】ClickHouse 主键索引的存储结构与查询性能优化...
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- 字段、约束和索引在存储过程中的判断
- 存储过程与事务应用两三事
- y16.第一章 Ceph企业级存储实战进阶 -- ceph crush进阶(十六)
- 数组指针存储在堆栈的形式
- wukong引擎源码分析之索引——part 2 持久化 直接set(key,docID数组)在kv存储里
- wukong引擎源码分析之索引——part 1 倒排列表本质是有序数组存储
- 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些。那分布式计算呢?ES做
- mongodb底层存储和索引原理——本质是文档数据库,无表设计,同时wiredTiger存储引擎支持文档级别的锁,MMAPv1引擎基于mmap,二级索引(二级是文档的存储位置信息『文件id + 文件内offset 』)
- Druid.io索引过程分析——时间窗,列存储,LSM树,充分利用内存,concise压缩
- 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引
- MySQL基础篇 | 存储引擎、事务、索引、视图、DBA命令、数据库设计三范式
- 用户画像标签数据存储之Hive存储
- Logstash数据处理服务将采集的不同日志数据存储到不同的ES索引库(四)
- filebeat收集多个域名网站日志并存储到不同的es索引库(五)