仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1100|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之SQL 数据库中的事件

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
虽然可以将一个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>

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




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范例。



注重:假如不指定回滚的事件称号或保留点,则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的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
不帅 该用户已被删除
5#
发表于 2015-2-11 14:30:11 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
小妖女 该用户已被删除
6#
发表于 2015-3-2 15:09:01 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
活着的死人 该用户已被删除
7#
发表于 2015-3-11 04:26:10 | 只看该作者
记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
变相怪杰 该用户已被删除
8#
发表于 2015-3-17 21:02:00 | 只看该作者
所以你总能得到相应的升级版本,来满足你的需求。
爱飞 该用户已被删除
9#
发表于 2015-3-25 02:35:33 | 只看该作者
发几份SQL课件,以飨阅者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 18:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表