精灵巫婆 发表于 2015-1-16 22:19:15

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
COMMIT]
个中BEGINTRANSACTION能够缩写为BEGINTRAN、COMMITTRANSACTION能够缩写为COMMITTRAN或COMMIT。<P>

[*]transaction_name
指定事件的称号。只要前32个字符会被体系辨认。
[*]@tran_name_variable
用变量来指定事件的称号,变量只能声明为CHAR、VARCHAR、NCHAR或NVARCHAR范例。




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

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



注重:假如不指定回滚的事件称号或保留点,则ROLLBACKTRANSACTION命令会将事件回滚到事件实行前,假如事件是嵌套的、则会回滚到最接近的BEGINTRANSACTION命令前。
Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

再现理想 发表于 2015-1-19 08:41:08

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

分手快乐 发表于 2015-1-27 15:43:28

个人感觉没有case直观。而且默认的第三字段(还可能更多)作为groupby字段很容易造成新手的错误。

海妖 发表于 2015-2-5 11:30:05

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

不帅 发表于 2015-2-11 14:30:11

分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。

小妖女 发表于 2015-3-2 15:09:01

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

活着的死人 发表于 2015-3-11 04:26:10

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。

变相怪杰 发表于 2015-3-17 21:02:00

所以你总能得到相应的升级版本,来满足你的需求。

爱飞 发表于 2015-3-25 02:35:33

发几份SQL课件,以飨阅者
页: [1]
查看完整版本: MSSQL网站制作之SQL 数据库中的事件