您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 威尼斯官方网站架构锁和大体量更新锁

威尼斯官方网站架构锁和大体量更新锁

发布时间:2019-08-05 22:52编辑:威尼斯官方网站登录浏览(195)

    1.锁

    当多个用户同一时候对同三个数量举办改造时会发生并发难题,使用职业就足以缓慢解决这一个难题。可是为了防备其余用户修改另三个还没成功的事务中的数据,就需求在业务中用到锁。
    SQL Server 二〇〇九提供了三种锁情势:排他锁,分享锁,更新锁,意向锁,键范围锁,架构锁和大容积更新锁。
    查询sys.dm_tran_locks视图能够火速精晓SQL Server 贰零零玖内的加锁景况。

    SELECT * FROM sys.dm_tran_locks;
    

    注:关于锁的知识书中没细讲,将要后来的博客中补充。

    2.游标

    游标是周围于C语言指针同样的结构,是一种多少访问机制,允许用户访谈单独的数据行。游标首要由游标结果集和游标地方组成。游标结果集是概念游标的SELECT语句重临行的聚焦,游标地方是指向这么些结果集中某一行的指针。
    示例1:用游标检索出student表中每行记录
    Student表记录如图所示
    威尼斯官方网站 1
    施行下列语句

    USE test
    DECLARE stu_cursor CURSOR FOR
    SELECT * FROM student--声明student表的游标stu
    OPEN stu_cursor--打开游标
    FETCH NEXT FROM stu_cursor--移动该记录指针
    WHILE @@FETCH_STATUS=0--@@FETCH_STATUS用于保存FETCH操作的结束信息,=0表示有记录检索成功
    BEGIN
    FETCH NEXT FROM stu_cursor--游标指针移动到下一条记录
    END
    CLOSE stu_cursor--关闭游标
    DEALLOCATE stu_cursor--释放游标资源
    

    结果如图所示
    威尼斯官方网站 2

    2.1.游标定义的参数LOCAL和GLOBAL

    游标定义参数LOCAL表示该游标只好功用于此次批管理或函数或存储进程。游标定义参数GLOBAL表示该游标可以功效于大局。
    实行下列语句

    DECLARE stu_cursor CURSOR LOCAL
    FOR SELECT * FROM student
    GO
    OPEN stu_cursor
    GO
    

    实践结果如下
    威尼斯官方网站 3
    语句中,注明了贰个student表的游标stu_cursor,在开发游标时提示游标不设有。因为该游标参数是LOCAL,只可以效能于当下批管理语句中,而展开游标语句和注脚语句不在叁个批管理中。要是去掉第2个GO,使五个语句在同贰个批管理中,就会从心所欲实施不会报错。
    实行下列语句

    DECLARE stu_cursor1 CURSOR GLOBAL
    FOR SELECT * FROM student
    GO
    OPEN stu_cursor1
    GO
    

    推行结果:命令已成功完结
    和LOCAL参数比较,GOLBAL参数设置游标功效于大局,由此OPEN和DECLARE语句不在同叁个批管理中照旧可以成功实践。

    2.2.游标分为游标变量和游标类型

    如下列语句

    --语句1
    DECLARE stu_cursor CURSOR
    FOR SELECT * FROM student--声明student表的游标名称为stu_cursor并赋值
    GO
    
    --语句2
    DECLARE @stu_cursor CURSOR--声明游标类型的变量@stu_cursor
    SET @stu_cursor=CURSOR FOR--给该变量赋值
    SELECT * FROM student
    

    在语句1中央直属机关接表明了三个游标并赋值,而语句第22中学宣示了游标类型的变量@stu_cursor,然后给该变量赋值。那五头是例外的。

    2.3.游标参数FO奥迪Q5WAEvoqueD_ONLY和SCROLL

    FORWARD_ONLY参数设置游标只好从结果集的上马向甘休方向读取,使用FETCH语句时不得不用NEXT,而SCROLL参数设置游标能够从结果集的跋扈方向,猖獗地点移动。如下列语句

    --语句1,默认FORWARD_ONLY
    DECLARE stu_cursor CURSOR LOCAL
    FOR SELECT * FROM student
    OPEN stu_cursor
    FETCH NEXT FROM stu_cursor
    GO
    --语句2,FORWARD_ONLY参数,FETCH时只能从开始往结束方向
    DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
    FOR SELECT * FROM student
    OPEN stu_cursor 
    FETCH NEXT FROM stu_cursor
    GO
    --语句3,SCROLL参数,FETCH时可以从任意位置往任意方向
    DECLARE stu_cursor CURSOR SCROLL LOCAL
    FOR SELECT * FROM student
    OPEN stu_cursor
    FETCH LAST FROM stu_cursor
    GO
    

    2.4.游标的简短利用

    示例2:将student表中stu_enter_score大于600分的上学的儿童都减去100分
    Student表中的数据如图所示
    威尼斯官方网站 4
    执行下列语句

    --游标的简单应用
    DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
    FOR SELECT stu_no,stu_enter_score FROM student
    OPEN stu_cursor
    DECLARE @score INT
    DECLARE @stu_no VARCHAR(8)
    FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
    WHILE @@FETCH_STATUS=0 
    BEGIN
    IF @score>=600
    BEGIN
    UPDATE student
    SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
    END
    FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
    END
    CLOSE stu_cursor
    DEALLOCATE stu_cursor
    GO
    

    结果如图所示
    威尼斯官方网站 5

    3.囤积进程

    储存进度是一组用于完结一定作用的语句集,经过编写翻译后存款和储蓄在数据库中。在SQL Server 2010中,不仅可以够用T-SQL编写存款和储蓄进度,也得以用CLOdyssey编写存款和储蓄进度。

    3.1.用户定义的积存进度

    该种存款和储蓄进度是指封装了可选代替码的模块恐怕经过,有2种等级次序:T-SQL存储进度和CL途达存款和储蓄进度。
    T-SQL存款和储蓄进程是指保存的T-SQL语句集合
    CLSportage存款和储蓄进度是指对Microsoft .NET Framework公共语言运维时(CLQX56)方法的援引

    3.2.恢宏存款和储蓄进度

    扩张存款和储蓄进度是指能够动态加载和平运动转的DLL,允许利用编制程序语言(如C语言)成立和睦的表面例程。扩展存款和储蓄进程从来在SQL Server 二〇一〇的实例的地址空间中运作,能够选用SQL Server扩张存款和储蓄进程API完成编制程序。

    3.3.系列存款和储蓄进度

    系统存储进度是指积累在源数据库中,以sp起初的存放进度,出现在种种系统定义数据库和用户定义数据库的sys架构中。

    3.3.1.创制存款和储蓄进度法规

    在布置和创设存款和储蓄进程时,应该满意一定的封锁和法规。

    • CREATE PROCEDURE定义本人能够满含人身自由数量和档案的次序的SQL语句,但下表中的语句除却。不能够在积累进程的别的岗位选取这么些讲话。
    • 能够引用在联合存款和储蓄进程中开创的靶子,只要援引时已开立了该指标
    • 能够在累积进程内援用不经常表
    • 一经在蕴藏进程中成立了地方有的时候表,该不常表仅为该存款和储蓄进度而存在,退出该存款和储蓄过程后,该一时表会消失
    • 假使实践的囤积进度调用了另二个囤积进程,被调用的仓库储存进度能够访谈第八个存款和储蓄过程的兼具目的,蕴含一时表
    • 如若施行对长距离SQL Server 2010实例进行改造的长距离存款和储蓄进程,那么些改换将不能被回滚。远程存款和储蓄进程不加入事务管理
    • 存款和储蓄进度中的参数的最大数量为2100
    • 仓库储存进度中的局地变量的最大数据仅受可用内部存款和储蓄器的范围
    • 依附可用内部存款和储蓄器的两样,存款和储蓄进程最大可达128MB
    语句 语句 语句
    CREATE AGGREGATE CREATE RULE CREATE DEFAULT
    CREATE SCHEMA CREATE(ALTER) FUNCTION CREATE(ALTER) TRIGGER
    CREATE(ALTER) PROCEDURE CREATE(ALTER) VIEW SET PARSEONLY
    SET SHOWPLAN_ALL SET SHOWPLAN_TEXT SET SHOWPLAN_XML
    USE database_name

    3.3.2.限量存款和储蓄进度内的称谓

    在蕴藏进度内,纵然用于语句的靶子未有限制框架结构,则架构将默许为该存款和储蓄进程的架构。假使创立该存款和储蓄进程的用户没有范围INSERT,SELECT,UPDATE或DELETE语句中引用的表名或试图名,则默许情状下通过该存款和储蓄进程实行的访问将遭到该进度成立者权限的限量。如若有其余用户要采纳存款和储蓄进程,则装有用于数据定义语言(DDL)的说话(如CREATE,ALTE奥迪Q3,EXECUTE,DROP,DBCC或动态SQL语句)的靶子名应当用该对象架构的称号来界定。

    3.3.3.加密存款和储蓄进程的概念

    万一要创建存款和储蓄进程并确定保证其余用户十分小概查看该存款和储蓄进度的定义,则能够利用WITH ENC奇骏YPTION,那样,进程定义将以不足读的样式储存。

    3.3.4.SET语句选项

    当创立也许更换T-SQL存款和储蓄进程后,数据库引擎将保存SET QUOTED_IDENTIFIER和SET ANSI_NULLS的装置,奉行存款和储蓄进度时将采取这几个原来设置而忽视任何客户端会话的ET QUOTED_IDENTIFIER和SET ANSI_NULLS设置。其他SET选项在开立或更改存储进程后不保留。

    3.4.行使存款和储蓄进度

    3.4.1.开立存款和储蓄进度

    示例3:将示例2用存款和储蓄进程达成
    Student表的数码如图所示
    威尼斯官方网站 6
    推行下列语句

    CREATE PROCEDURE alter_data
    @a int--参数
    AS
    BEGIN
    DECLARE stu_cursor CURSOR FORWARD_ONLY LOCAL
    FOR SELECT stu_no,stu_enter_score FROM student
    OPEN stu_cursor
    DECLARE @score INT
    DECLARE @stu_no VARCHAR(8)
    FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
    WHILE @@FETCH_STATUS=0 
    BEGIN
    IF @score>=@a
    BEGIN
    UPDATE student
    SET stu_enter_score=@score-100 WHERE stu_no=@stu_no 
    END
    FETCH NEXT FROM stu_cursor INTO @stu_no,@score--把游标值赋值给变量@score
    END
    CLOSE stu_cursor
    DEALLOCATE stu_cursor
    END
    GO
    EXEC dbo.alter_data '600'
    

    结果如图所示
    威尼斯官方网站 7

    3.4.2.查看存款和储蓄进程

    可以经过应用系统存款和储蓄进度照旧目录视图查看存款和储蓄过程的定义

    3.4.2.1.图形化分界面

    如下图
    威尼斯官方网站 8

    3.4.2.2.连串存款和储蓄进度sp_helptext查看存储进程定义

    施行下列语句

    EXEC sp_helptext 'alter_data'
    

    结果如图所示
    威尼斯官方网站 9

    3.4.2.3.系统存储进程sp_depends查看存款和储蓄进程有关音信

    实践下列语句

    EXEC sp_depends 'alter_data'
    

    结果如图所示
    威尼斯官方网站 10

    3.4.2.4.目录视图查看存款和储蓄进度

    施行下列语句

    SELECT * FROM sys.procedures
    

    结果如图所示
    威尼斯官方网站 11

    3.4.3.修改存款和储蓄进度

    ALTER PROCEDURE语句修改存储进程,只需将下面示例中的CREATE修改成ALTEPAJERO运维就行了。

    3.4.4.刨除存款和储蓄进度

    实践下列语句删除存款和储蓄进度

    DROP PROCEDURE alter_data
    

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:威尼斯官方网站架构锁和大体量更新锁

    关键词:

上一篇:【威尼斯官方网站】hashbytes函数功能为

下一篇:没有了