|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用 |
|