|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
据我的观察,现在有一个趋势,那些经过正式培训的数据库管理员DBA更倾向于选择一个专有关系数据库,例如Oracle。对于一些具有专门数据库管理员的比较大的环境来说,MySQL很难得到宠爱,这时候,关于MySQL是否真的具有良好的可扩展性的争论已经没有意义。成绩形貌:某个基本信息表,与体系中30多个表存在外键干系,当删除基本数据时,必要判别是不是已被用过,假如用过则变动标记位,假如没有效过则间接删除,怎样能很好完成这个处置?最好可以主动顺应表的变更成绩办理(SQLServer2005)--SQLServer2005的毛病处置简单把持,因而,SQLServer2005中能够间接删除,经由过程毛病处置来断定是不是必要更新.--示比方下.USEtempdbGOCREATETABLEm(idintPRIMARYKEY,bzbit)INSERTmSELECT1,0UNIONALLSELECT2,0CREATETABLEc(idintprimarykey,a_idintreferencesm(id)ONDELETENOACTION)INSERTcSELECT1,1GO--删除处置存储历程CREATEPROCdbo.p_delete@idintASSETNOCOUNTONBEGINTRYBEGINTRANDELETEFROMmWHEREid=@idCOMMITTRANENDTRYBEGINCATCHROLLBACKTRANIFERROR_NUMBER()=547--假如是外键束缚毛病BEGINBEGINTRYBEGINTRAN--更新标记UPDATEmSETbz=1WHEREid=@idCOMMITTRANENDTRYBEGINCATCHSELECTERROR_NUMBER(),ERROR_MESSAGE()ENDCATCHENDELSESELECTERROR_NUMBER(),ERROR_MESSAGE()ENDCATCHGO--挪用EXECdbo.p_delete1EXECdbo.p_delete2SELECT*FROMmSELECT*FROMcGODROPTABLEc,mDROPPROCdbo.p_delete成绩办理(SQLServer2000)--SQLServer2000对毛病处置欠好把持,一样平常仍是倡议做判别--经由过程体系表查询体系表,能够猎取某个表联系关系的一切外键表--示例存储历程CREATEPROCdbo.p_Delete@tbnamesysname,--基本数据表名@PkFieldNamesysname,--基本数据表关头字段名@PkValueint--要删除的基本数据表关头字值ASSETNOCOUNTONDECLARE@bzbit,@snvarchar(4000)DECLAREtbCURSORLOCALFORSELECTNSET@bz=CASEWHENEXISTS(SELECT*FROM+QUOTENAME(@tbname)+NA,+QUOTENAME(OBJECT_NAME(B.fkeyid))+NBWHEREA.+QUOTENAME((SELECTnameFROMsyscolumnsWHEREcolid=B.rkeyANDid=B.rkeyid))+N=B.+QUOTENAME((SELECTnameFROMsyscolumnsWHEREcolid=B.fkeyANDid=B.fkeyid))+NANDA.+QUOTENAME((SELECTnameFROMsyscolumnsWHEREcolid=B.rkeyANDid=B.rkeyid))+N=@id)THEN1ELSE0ENDFROMsysobjectsAJOINsysforeignkeysBONA.id=B.constidJOINsysobjectsCONA.parent_obj=C.idWHEREA.xtype=fANDC.xtype=UANDOBJECT_NAME(B.rkeyid)=@tbnameOPENtbFETCHtbINTO@sWHILE@@FETCH_STATUS=0BEGINEXECsp_executesql@s,N@tbnamesysname,@idint,@bzbitOUT,@tbname,@PkValue,@bzOUTIF@bz=1BEGINSET@s=NUPDATE+QUOTENAME(@tbname)+NSETbz=1WHERE+QUOTENAME(@PkFieldName)+N=@idEXECsp_executesql@s,N@idint,@PkValueRETURNENDFETCHtbINTO@sENDCLOSEtbDEALLOCATEtbSET@s=NDELETEFROM+QUOTENAME(@tbname)+NWHERE+QUOTENAME(@PkFieldName)+N=@idEXECsp_executesql@s,N@idint,@PkValueGO注重事项设置表的主/外键干系的时分,不要设置级联删除(ONDELETECASCADE)
一些典型的RDBMS功能并不总是在DBaaS系统中可用。例如MySQL学习教程,WindowsAzureSQLDatabase(以前的SQLAzure)是微软的DBaaS产品,提供了一个类似于SQLServer的数据库平台。 |
|