视图 、存储过程、游标、事务

-- 视图是一种虚拟表,本质上是多个数据表查询结果的集合,本身不具体存在数据库中,是一个虚拟表
-- 视图的生成使用的是多表查询,每次使用视图时,必须执行定义视图时的所有查询,可能会性能降低
-- 主要优点:简化操作,建立前台后台的缓冲,合并分割数据,提高安全性
CREATE VIEW 工资(编号,姓名,收入)
as 
SELECT [ Salary ].[编号],姓名,收入 from employees,[ Salary ] where employees.[编号]=[ Salary ].[编号]

-- 删除视图只是删除视图的定义
Drop VIEW 工资

-- 查询视图
select * FROM 工资
-- 为视图添加数据,一个insert不能跨多表使用,要分别插入
INSERT into 工资(编号,姓名)
values (12,'程凉快')
INSERT into 工资(编号,收入)
values (12,1254)

-- 多表组成的视图不允许删除数据
-- 使用with check option 子语句创建视图后,通过视图的添加和修改必须满足创建时候的条件
-- 在as前面添加 with encryption 设置加密
-- 对视图的增删改,就是对源表的操作



-- 使用存储过程 sqlserver
-- 改变性能,提高执行效率
-- sqlserver
create PROCEDURE detfr as select * from Employees
exec detfr

-- 查看存储过程
exec sp_help detfr
exec sp_helptext detfr
exec sp_depends detfr

-- 修改存储过程
alter PROCEDURE detfr as select * from Employees where sex=1
-- 删除
drop PROCEDURE detfr


-- 使用游标 ,定位到结果集中的某一行
-- 声明
 DECLARE youbiao CURSOR for SELECT  * FROM Employees
-- 打开
OPEN youbiao
-- 读取
FETCH NEXT FROM youbiao
while @@fetch_status =0
BEGIN
    FETCH NEXT FROM youbiao
END
-- 关闭
CLOSE youbiao
-- 释放
DEALLOCATE youbiao

-- 事务是保证数据一致性的重要手段
-- 事务是一系列语句构成的逻辑工作单元
-- 必须拥有:
-- 原子性:对于一个工作单元,要么全部执行,要么全部取消,一条语句失败则全部回滚
-- 一致性:事务完成时,全部数据状态一致
-- 隔离性:事务所做的修改和其他事务隔离
-- 持久性:事务提交后,对数据库所做的修改会永久保存
-- 事务一旦出现问题,数据库就会返回事务开始前的状态

-- 显式事务:用户自定义或用户指定的事务
BEGIN TRANSACTION
……
COMMIT TRANSACTION

-- 隐式事务,执行下一条语句后自动启动一个新事务
-- 启动
SET CURRENT_TIMESTAMP ON
……
COMMIT TRANSACTION 
-- 提交,自动开启下一个事务
……
COMMIT TRANSACTION 
-- 关闭事务
SET CURRENT_TIMESTAMP OFF

-- 事务回滚点
-- 创建事务保存点
SAVE TRANSACTION  保存点名称
-- 回滚事务保存点,回滚时事务并不终止
ROLLBACK TRANSACTION 保存点名称
-- 在开始事务的语句末尾加 with mark ,否则回滚事务是会出现找不到该事务或保存点
-- 回滚整个事务,整个事务所有改变将无效
ROLLBACK TRAN 事务名

-- 编写有效事务
-- 不要在事务处理期间要求用户输入
-- 在浏览数据时尽量不要打开事务
-- 保持事务尽可能短
-- 灵活使用更低级的事务隔离级别
-- 在事务中尽量使访问数据量最小,减少事务间的争夺
-- 小心地使用隐式事务

猜你喜欢

转载自www.cnblogs.com/LBJN/p/12770310.html
今日推荐