SQl 事物+视图+游标+索引+锁
一:事务:
是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务是恢复和并发控制的基本单位。
事务的四个特性:ACID
A:atomicity 原子性,事务里的所有操作都是一体的,要么一起完成,要么就都不执行,不可能出现执行一半的情况。
C:consistency 一致性,保证数据的一致
I:isolation 隔离性,事务的执行不被干扰,也就是说事务在执行的过程中不可以对其中的数据进行其它操作,等事务完成之后才可以操作。
D:durability 持久性,执行的时候会有记录,如果突然断电,重新通电时返回重新开始执行事务
begin transaction --开始事务
commit transaction --提交事务
rollback --回滚事务
@@error --错误提醒,程序无错的时候返回0,出错返回出错的值
一种事务的用法是用if语句判断@@error的值是否不等于0,来进行回滚操作:
if @@ERROR <>0 --判断是否出错
begin
rollback --出错回滚
end
else
begin
commit --没错提交
end
另一种用法是用try和catch,try是开始执行程序体,没问题的话commit提交,程序出错则直接被catch抓住,回滚。
begin try
--程序体
commit
end try
begin catch --抓错
rollback
end catch
二:索引,索引是为了提高查找的效率
建索引的步骤:
在表的设计界面,右键选择索引/键
在出来的界面上点添加,然后选出哪一列作为索引就建立起了一个索引
三:视图
视图是从一个或多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。
所以视图不是真实存在的基础表,而是一张虚表视图,所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。通过视图看到的数据只是存放在基本表中的数据。
视图的优点:
1.视点集中
视图集中即是使用户只关心它感兴趣的某些特定数据和他们所负责的特定任务
2.简化操作
若视图本身就是一个复杂查询的结果集,这样在每一次执行相同的查询时,不必重新写这些复杂的查询语句,只要一条简单的查询视图语句即可。
3.合并分割数据
表的设计时常将表进行水平分割或垂直分割,但表的结构的变化却对应用程序产生不良的影响。
4.安全性
通过视图用户只能查看和修改他们所能看到的数据,其它数据库或表既不可见也不可以访问。
--创建一个视图,在chinastates表中查询出省份是shandong的城市
create view shandong
as
select *from ChinaStates where parentareacode='37'
go
--显示视图
之后每次要查询shandong的城市时直接调用视图就可以,不用每次都写代码,比较简便。
select *from shandong
--删除视图
drop view
四:游标
关系数据库管理系统实质是面向集合的,在MS SQL SERVER 中并没有一种描述表中单一记录的表达形式。
游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制,用游标的时候一般是伴随着while来用的,游标用的比较少,因为会降低数据库的效率。
这里定义了一个游标,利用while和next来查询奥迪A4 07款 上一个和下一个
declare cur_car cursor scroll --定义游标,scroll是让游标可以来回滚动
for select name from car where name like '奥迪%'
open cur_car --开启游标
fetch first from cur_car --让游标回到第一个
while @@FETCH_STATUS =0 --@@fetch_status是全局变量返回上次执行FETCH 命令的状态,0 FETCH 命令被成功执行
-1 FETCH 命令失败或者行数据超 过游标数据结果集的范围
-2 所读取的数据已经不存在
begin
declare @name varchar(20)
fetch next from cur_car into @name
if LEFT(@name,LEN('奥迪A4 07款'))='奥迪A4 07款'
begin
fetch prior from cur_car into @name
print @name
fetch relative 2 from cur_car into @name
print @name
end
end
close cur_car
五:锁
锁分为悲观锁和乐观锁
悲观锁:它指的是对数据被外界(包括本系统当前的其他事务,以及来自 外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态,事务就是悲观锁,在事务执行的时候,数据不可查不可更改。
乐观锁:相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制,在更改数据的时候可以进行查询操作,在更改完成的瞬间往数据库里放的时候才进行加锁,锁的时间较短,这种机制的锁谨慎使用。
SQl 事物+视图+游标+索引+锁的更多相关文章
- (4.22)sql server视图/索引视图概念
(4.22)sql server视图 关键词:sql server视图.索引视图 SQL Server视图是由SQL语句组成的逻辑数据库对象.它也可以称为由SQL语句组成的虚拟表,该SQL语句可能包含 ...
- SQL知识整理二:锁、游标、索引
锁 锁的模式 锁模式 描述 共享(S) 用于不更改或不更新数据(只读操作),如SELECT语句 更新(U) 用于可更新的资源中.防止当多个会话在读取.锁定以及随后可能进行的资源更新时发生常见形式的死锁 ...
- PL/SQL 编程(三 )程序包和包体,触发器,视图,索引
一.程序包和包体 程序包(package):存储在数据库中的一组子程序.变量定义.在包中的子程序可以被其它程序包或子程序调用.但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序. ...
- SQL Server 优化---为什么索引视图(物化视图)需要with(noexpand)强制查询提示
本文出处:http://www.cnblogs.com/wy123/p/6694933.html 第一次通过索引视图优化SQL语句,以及遇到的一些问题,记录一下. 语句分析 最近开发递交过来一个查询统 ...
- 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO
刷新SQL Server所有视图.函数.存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...
- SQL数据库—<5>视图、索引…简单学习
视图 掌握:1.视图是个什么东西?2.会建视图,会查视图3.知道视图的主要功能是查询,不是增删除改. 视图的定义: 视图可以认为是从一个数据表或者多个数据表中导出的表,视图本身没有任何数据,它是用来存 ...
- sql 事物 锁 快照(转发的,写的非常好)
隔离级别定义事务处理数据读取操作的隔离程度,在SQL Server中,隔离级别只会影响读操作申请的共享锁(Shared Lock),而不会影响写操作申请的互斥锁(Exclusive Lock),隔离级 ...
- SQL Server基础之索引
索引用于快速找出在某个列中有某一特定值的行,不使用索引,数据库必须从第一条记录开始读完整个表,直到找出相关的行.表越大,查询数据所花费的时间越多,如果表中查询的列有一个索引,数据库能快速到达一个位置 ...
- SQL Server 深入解析索引存储(下)
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引体系结构/非聚集索引 概述 非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点: 基础表的数据行不按非 ...
随机推荐
- 零基础入门学习Python(6)--Python之常用操作符
前言 Python当中常用操作符,有分为以下几类.幂运算(**),正负号(+,-),算术操作符(+,-,*,/,//,%),比较操作符(<,<=,>,>=,==,!=),逻辑运 ...
- Python之禅 吾心笃定
自从3月19日到现在已经学习python 19天了,博客园也注册8天了.之所以一直没有急着分享学习中的知识是因为我觉得学习一道应该从心开始,所以第一篇随笔不应该说python的知识,而应该说学习心态和 ...
- 等待某(N)个线程执行完再执行某个线程的几种方法(Thread.join(),CountDownLatch,CyclicBarrier,Semaphore)
1.main线程中先调用threadA.join() ,再调用threadB.join()实现A->B->main线程的执行顺序 调用threadA.join()时,main线程会挂起,等 ...
- Laravel数据库测试的另一种方案-SQLite
Laravel数据库测试 在测试方面,Laravel内置使用PHPUnit提供了非常方便的解决方案.而对于数据库增删改查的测试,要解决的一个很重要的问题就是如何在测试完成之后,恢复数据库的原貌,例如要 ...
- ubuntu 安装 navicat
下载navicat解压到opt目录 创建桌面快捷方式sudo vim /usr/share/applications/navicat.desktop [Desktop Entry] Encoding= ...
- Mac使用Aria2下载百度网盘,突破下载限速的方法教程
百度网盘目前可以说是在国内网盘环境中一枝独秀,日常使用触及在所难免,尤其是对于喜欢下载资源的朋友来说,但是一些限制让它的使用越来越难,尤其是下载速度,普通用户的下载往往远低于自己的预期,特别是对于 M ...
- Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
异常详情 2017-07-16 10:55:26,218 ERROR [500.jsp] - java.io.IOException: 你的主机中的软件中止了一个已建立的连接. org.apache. ...
- Uva 839天平(二叉树dfs, 递归建树)
题意: 给定一个天平长度 输入格式为 wl dl wr dr 分别代表天平左边长度,左边重量, 右边长度, 右边重量. 如果重量为0, 说明下面还有一个天平, 递归给出. 样例输入:10 2 0 40 ...
- 3W法则-学习Docker
一.前言 5W1H法则是在一次面试中学习到的,后来在工作也开始使用这种东西,虽然最后没去那家公司,但是也是学习到了,关注开这些东西以后,也发现了一些简化版的3W法则,最近公司也要搞Doce ...
- IDEA-基本设置
目录: 1.设置内存 2.设置编码格式 3.设置换行符 4.设置新建Class文档说明 5.添加自定义注释 6.设置自己的maven 工欲善其事,必先利其器,设置好基础的设置才能事半功倍!少踩坑!以下 ...