再见西城 发表于 2015-1-16 22:29:14

MSSQL编程:数据库事件和锁(三)

Cluster/NDB高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用数据|数据库
利用事件的思索

在利用事件时,准绳上应当使事件尽量得短而且要制止事件嵌套。事件应当尽量得短,这是由于对照长的事件增添了事件占用数据的工夫,使别的必需守候会见该事件锁定命据的事件,延伸了守候会见数据的工夫。在利用事件时,为了使事件尽量得短,应当接纳一些响应的办法。为了最小化工夫,在利用一些Transact-SQL语句时,必定要十分当心。比方,当利用轮回语句WHILE时,必定要事前确认轮回的长度和占用的工夫,使这类轮回在完成响应的功效之前,必定要确保轮回尽量得短。在入手下手事件之前,必定要懂得必要用户交互式操纵才干失掉的信息。如许,在事件的举行过程当中,就能够制止举行一些泯灭工夫的交互式操纵,延长事件历程的工夫。在一个用户界说的事件中,应当尽量地利用一些数据利用言语,比方INSERT、UPDATE和DELETE语句,由于这些语句次要是利用数据库中的数据。而关于一些数据界说言语,应当尽量地罕用大概不必,由于这些数据界说言语的操纵既占用对照长的工夫,又占用对照多的资本,而且这些数据界说言语的操纵一般不触及到数据,以是应当在事件中尽量地罕用大概不必这些操纵。别的,在利用数据利用言语时,要注重,必定要在这些语句中利用前提判别语句,使得这些数据利用言语触及到尽量少的纪录,从而延长事件的处置工夫。

在嵌套事件时,也要注重一些成绩。固然说,在事件两头嵌套事件是大概的,其实不影响SQLServer处置事件的功能。可是,实践上,利用嵌套事件,除把事件弄得加倍庞大以外,并没有这么分明的优点。因而,不倡议利用嵌套事件。

事件的范例

依据体系的设置,能够把事件分红两品种型。一种是体系供应的事件,另外一种是用户界说的事件。体系供应的事件是指在实行某些语句时,一条语句就是一个事件。这时候要明白,一条语句的工具既多是表中的一行数据,也多是表中的多行数据,乃至是表中的全体数据。因而,只要一条语句组成的事件也大概包括了多行数据的处置。比方实行上面这条数据利用语句:

UPDATEauthors

SETstate=‘CA’

这是一条语句,这条语句自己就组成了一个事件。这条语句因为没有利用前提限定,那末这条语句就是修正表中的全体数据。以是这个事件的工具,就是修正表中的全体数据。假如authors表中有1000行数据,那末这1000行数据的修正要末全体乐成,要末全体失利。

别的一种事件,是用户明白界说的事件。在实践使用中,年夜多半的事件处置就是接纳了用户界说的事件来处置。在开辟使用程序时,可使用BEGINTRANSACTION语句来界说明白的用户界说的事件。在利用用户界说的事件时,必定要注重两点:一是事件必需有明白的停止语句来停止。假如不利用明白的停止语句来停止,那末体系大概把处置务入手下手到用户封闭毗连之间的全体操纵都作为一个事件来看待。事件的明白停止可使用如许两个语句中的一个:COMMIT语句和ROLLBACK语句。COMMIT语句是提交语句,将全体完成的语句明白地提交到数据库中。ROLLBACK语句是作废语句,该语句将事件的操纵全体作废,即暗示事件操纵失利。

另有一种特别的用户界说的事件,这就是散布式事件。后面提到的事件都是在一个服务器上的操纵,其包管的数据完全性和分歧性是指一个服务器上的完全性和分歧性。可是,假如一个对照庞大的情况,大概有多台服务器,那末要包管在多服务器情况中事件的完全性和分歧性,就必需界说一个散布式事件。在这个散布式事件中,一切的操纵都能够触及对多个服务器的操纵,当这些操纵都乐成时,那末一切这些操纵都提交到响应服务器的数据库中,假如这些操纵中有一条操纵失利,那末这个散布式事件中的全体操纵都被作废。

锁和锁的感化

锁就是避免其他事件会见指定的资本的手腕。锁是完成并发把持的次要办法,是多个用户可以同时利用统一个数据库中的数据而不产生数据纷歧致征象的主要保证。一样平常来讲,锁能够避免脏读、不成反复读和幻觉读。脏读就是指当一个事件正在会见数据,而且对数据举行了修正,而这类修正还没有提交到数据库中,这时候,别的一个事件也会见这个数据,然后利用了这个数据。由于这个数据是还没有提交的数据,那末别的一个事件读到的这个数据是脏数据,根据脏数据所做的操纵多是不准确的。不成反复读是指在一个事件内,屡次读统一数据。在这个事件还没有停止时,别的一个事件也会见该统一数据。那末,在第一个事件中的两次读数据之间,因为第二个事件的修正,那末第一个事件两次读到的的数据多是纷歧样的。如许就产生了在一个事件内两次读到的数据是纷歧样的,因而称为是不成反复读。幻觉读是指当事件不是自力实行时产生的一种征象,比方第一个事件对一个表中的数据举行了修正,这类修正触及到表中的全体数据行。同时,第二个事件也修正这个表中的数据,这类修正是向表中拔出一行新数据。那末,今后就会产生操纵第一个事件的用户发明表中另有没有修正的数据行,就好象产生了幻觉一样。
MySQL这个名字是怎么来的已经不清楚了。基本指南和大量的库和工具带有前缀“my”已经有10年以上,而且不管怎样,MySQLAB创始人之一的的女儿也叫My。

兰色精灵 发表于 2015-1-19 14:31:23

很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。

莫相离 发表于 2015-1-25 23:10:49

总感觉自己还是不会SQL

不帅 发表于 2015-2-4 13:09:32

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

第二个灵魂 发表于 2015-2-9 23:05:00

索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。

爱飞 发表于 2015-2-28 04:18:31

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

因胸联盟 发表于 2015-3-9 20:51:38

原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!

冷月葬花魂 发表于 2015-3-17 01:10:01

以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了
页: [1]
查看完整版本: MSSQL编程:数据库事件和锁(三)