仓酷云

标题: MSSQL网站制作之SQL 数据库中的事件 [打印本页]

作者: 精灵巫婆    时间: 2015-1-16 22:19
标题: MSSQL网站制作之SQL 数据库中的事件
虽然可以将一个droptable语句转换成先delete再删表,性能却会降低很多。这里我们用上面说道的另外一种可用数据:“操作前数据备份”。11.4.1事件的由来利用DELETE命令或UPDATE命令对数据库举行更新时一次只能操纵一个表,这会带来数据库的数据纷歧致的成绩。比方:企业作废了后勤部,必要将‘后勤部’从department表中删除,要修正department表,而employee表中的部门编号与后勤部绝对应的员工也应删除。因而,两个表都必要修,改这类修正只能经由过程两条DELETE语句举行。假定后勤部编号为‘1012’
<P>第一条DELETE语句修正department表
deletefromdepartment
wheredept_id=’1012’
第二条DELETE语句修正employee表
deletefromemployee
wheredept_id=’1012’

在实行第一条DELETE语句后,数据库中的数据已处于纷歧致的形态,由于此时已没有‘后勤部’了,但employee表中仍旧保留着属于后勤部的员工纪录。只要实行了第二条DELETE语句后数据才从头处于分歧形态。可是,假如实行完第一条语句后,盘算机俄然呈现妨碍,没法再持续实行第二条DELETE语句,则数据库中的数据将处于永久纷歧致的形态。因而,必需包管这两条DELETE语句同时实行。为办理相似的成绩,数据库体系一般都引进了事件(Transaction)的观点。

11.4.2事件的观点
事件是一种机制,是一个操纵序列,它包括了一组数据库操纵命令,一切的命令作为一个全体一同向体系提交或取消操纵哀求,即要末都实行,要末都不实行。因而,事件是一个不成支解的事情逻辑单位,相似于操纵体系中的原语。在数据库体系上实行并发操纵时,事件是作为最小的把持单位来利用的。

一般在程序顶用BEGINTRANSACTION命令来标识一个事件的入手下手,用COMMITTRANSACTION命令标识事件停止。这两个命令之间的一切语句被视为一体,只要实行到COMMITTRANSACTION命令时,事件中对数据库的更新操纵才算确认。和BEGIN…END命令相似,这两个命令也能够举行嵌套,即事件能够嵌套实行。这两个命令的语法以下:

BEGINTRAN[SACTION][transaction_name|@tran_name_variable]
COMMIT[TRAN[SACTION][transaction_name|@tran_name_variable]]
个中BEGINTRANSACTION能够缩写为BEGINTRAN、COMMITTRANSACTION能够缩写为COMMITTRAN或COMMIT。<P>

MSSQL网站制作之SQL 数据库中的事件
登录/注册后可看大图

MSSQL网站制作之SQL 数据库中的事件
登录/注册后可看大图


11.4.3事件回滚
事件回滚(TransactionRollback)是指当事件中的某一语句实行失利时,将对数据库的操纵恢复到事件实行前或某个指定地位。
事件回滚利用ROLLBACKTRANSACTION命令,其语法以下:
ROLLBACK[TRAN[SACTION][transaction_name|@tran_name_variable
|savepoint_name|@savepoint_variable]]
个中savepoint_name和@savepoint_variable参数用于指定回滚到某一指定地位。
假如要让事件回滚到指定地位,则必要在事件中设定保留点(SavePoint)。所谓保留点是指定其地点地位之前的事件语句,不克不及回滚的语句即此语句后面的操纵被视为无效。

其语法以下:
SAVETRAN[SACTION]{savepoint_name|@savepoint_variable}
各参数申明以下:
avepoint_name
指定保留点的称号。同事件的称号一样,只要前32个字符会被体系辨认。@savepoint_variable
用变量来指定保留点的称号。变量只能声明为CHAR、VARCHAR、NCHAR或NVARCHAR范例。

MSSQL网站制作之SQL 数据库中的事件
登录/注册后可看大图

MSSQL网站制作之SQL 数据库中的事件
登录/注册后可看大图

注重:假如不指定回滚的事件称号或保留点,则ROLLBACKTRANSACTION命令会将事件回滚到事件实行前,假如事件是嵌套的、则会回滚到最接近的BEGINTRANSACTION命令前。
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
作者: 再现理想    时间: 2015-1-19 08:41
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
作者: 分手快乐    时间: 2015-1-27 15:43
个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。
作者: 海妖    时间: 2015-2-5 11:30
语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
作者: 不帅    时间: 2015-2-11 14:30
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
作者: 小妖女    时间: 2015-3-2 15:09
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
作者: 活着的死人    时间: 2015-3-11 04:26
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
作者: 变相怪杰    时间: 2015-3-17 21:02
所以你总能得到相应的升级版本,来满足你的需求。
作者: 爱飞    时间: 2015-3-25 02:35
发几份SQL课件,以飨阅者




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2