|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
正如前文所提到的,MySQL易学、易部署、易管理和易维护。问:我的SQLServer表的一列同意NULL值。我但愿在其值为非NULL时,该列是独一的。如何才干以编程的体例完成这一举动?假如在该列上设置一个UNIQUE束缚,我只能包括一个值为NULL的纪录。我正在利用触发器完成这一束缚,您能够保举一个更复杂的办法以包管一切的非NULL值独一吗?
答:SQLServer没有完成非NULL值独一性的内建机制,因而您必要经由过程自界说的CHECK束缚来完成这一机制。比方,以下一段编码完成了您所必要的功效:
USEtempdb
CREATEtablet1(c1intNULL,c2char(5)NULL)
CREATEtriggermytriggeront1forinsert,updateas
BEGIN
IF(selectmax(cnt)from(selectcount(i.c1)
ascntfromt1,insertediwheret1.c1=i.c1group
byi.c1)x)>1
ROLLBACKTRAN
END
在SQLServer2000中,您还可使用INSTEADOF触发器来完成这一功效。有关INSTEADOF触发器的具体信息,请参阅以下文章。如需会见这些文章,请会见SQLServer杂志网站,在InstantDoc框中输出InstantDoc号,然后点击Go。相干文章以下:
TrickswithINSTEADOFTriggers;InstantDocnumber15828
INSTEADOFTriggersonViews;InstantDocnumber15791
INSTEADOFTriggers;InstantDocnumber15524
―SQLServerMVPs
怀疑这些功能在MySQL5.0中的成熟性。充其量它们在MySQL中被支持的时间也就一年左右,而在MySQL学习教程其他关系型数据库中则已经存在了近10年的时间。 |
|