仓酷云

标题: MSSQL教程之数据库 划定规矩 [打印本页]

作者: 简单生活    时间: 2015-1-16 22:19
标题: MSSQL教程之数据库 划定规矩
Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。划定规矩(Rule)就是数据库中对存储在表的列或用户自界说数据范例中的值的划定和限定。划定规矩是独自存储的自力的数据库工具。划定规矩与其感化的表或用户自界说数据范例是互相自力的,即表或用户自界说工具的删除、修正不会对与之相连的划定规矩发生影响。划定规矩和束缚能够同时利用,表的列能够有一个划定规矩及多个CHECK束缚。划定规矩与CHECK束缚很类似,比拟之下,利用在ALTERTABLE或CREATETABLE命令中的CHECK束缚是更尺度的限定列值的办法,但CHECK束缚不克不及间接感化于用户自界说数据范例。

9.2.1创立划定规矩
(1)用CREATERULE命令创立划定规矩
CREATERULE命令用于在以后数据库中创立划定规矩,其语法以下:
CREATERULErule_nameAScondition_expression
个中condition_expression子句是划定规矩的界说。condition_expression子句能够是能用于WHERE前提子句中的任何表达式,它能够包括算术运算符、干系运算符和谓词(如IN、LIKE、BETWEEN等)。注重:condition_expression子句中的表达式必需以字符“@”开首。

MSSQL教程之数据库 划定规矩
登录/注册后可看大图


(2)用EnterpriseManager创立划定规矩
在EnterpriseManager当选择数据库工具“Rules”,单击右键从快速菜单当选择“NewRule”选项,即会弹出如-1所示的创立划定规矩属性对话框。输出划定规矩称号和表达式以后,单击“断定”按钮,即完陈规则的创立。
MSSQL教程之数据库 划定规矩
登录/注册后可看大图


9.2.2检察划定规矩
(1)用EnterpriseManager检察划定规矩
在EnterpriseManager当选择“Rules”工具,便可从右侧的义务板中看到划定规矩的年夜部分信息,包含划定规矩的称号、一切者、创立工夫,等如-2所示。在SQLServer2000中不像7.0版本能够间接在义务板中看到划定规矩的表达式,这必要检察划定规矩的属性。能够选择要检察的划定规矩,单击右键,从快速菜单当选择“Properties”选项,即会呈现如-3所示的对话框,能够从中编纂划定规矩的表达式。修正划定规矩的称号能够经由过程Sp_rename体系存储历程举行,也能够间接在-2顶用右键单击要修正的划定规矩,从快速菜单当选择“重定名(Rename)”菜单项,举行称号修正。
(2)用存储历程Sp_helptext检察划定规矩
利用Sp_helptext存储历程能够检察划定规矩的细节,其语法以下:
sp_helptext[@objname=]name
个中[@objname=]name子句指明工具的称号,用Sp_helptext存储历程检察的工具可
所以以后数据库中的划定规矩、缺省值、触发器、视图或未加密的存储历程。
MSSQL教程之数据库 划定规矩
登录/注册后可看大图
MSSQL教程之数据库 划定规矩
登录/注册后可看大图

例9-5:检察划定规矩hire_date_rule。
execsp_helptexthire_date_rule
运转了局以下:
Text
--------------------------------------------------------------------------------------
createrulehire_date_rule
as@hire_date>=1980-01-01and@hire_date<=getdate()

9.2.3划定规矩的绑定与松绑
创立划定规矩后,划定规矩仅仅只是一个存在于数据库中的工具,并未产生感化。必要将划定规矩与数据库表或用户自界说工具接洽起来,才干到达创立划定规矩的目标。接洽的办法称为“绑定”。所谓绑定就是指定例则感化于哪一个表的哪一列或哪一个用户自界说数据范例。表的一列或一个用户自界说数据范例只能与一个划定规矩相绑定,而一个划定规矩能够绑定多工具,这恰是划定规矩的魅力地点。排除划定规矩与工具的绑定称为“松绑”。

(1)用存储历程Sp_bindrule绑定例则
存储历程Sp_bindrule能够绑定一个划定规矩到表的一个列或一个用户自界说数据范例上。其语法以下:
sp_bindrule[@rulename=]rule,
[@objname=]object_name
[,futureonly]
各参数申明以下:
[@rulename=]rule
指定例则称号。
[@objname=]object_name
指定例则绑定的工具。
futureonly
此选项仅在绑定例则到用户自界说数据范例上时才可使用。当指定此选项时,仅今后利用此用户自界说数据范例的列会使用新划定规矩,而以后已利用此数据范例的列则不受影响。
例9-6:绑定例则hire_date_rule到用户自界说数据范例hire_date上。
execsp_bindrulehire_date_rule,hire_date
运转了局以下:
Ruleboundtodatatype.
Thenewrulehasbeenboundtocolumn(s)ofthespecifieduserdatatype.
例9-7:绑定例则hire_date_rule到用户自界说数据范例hire_date上,带futureonly选项。
execsp_bindrulehire_date_rule,hire_date,futureonly
运转了局以下:
Ruleboundtodatatype.
例9-8:绑定例则my_rule到orders表的字段order_id。
execsp_bindruleid_rule,orders.[order_id]
运转了局以下:
Ruleboundtotablecolumn.
注重:划定规矩对已输出表中的数据不起感化。
划定规矩所指定的数据范例必需与所绑定的工具的数据范例分歧,且划定规矩不克不及绑定一个数据范例为TEXT、MAGE或TIMESTAMP的列。
与表的列绑定的划定规矩优先于与用户自界说数据范例绑定的列,因而,假如表的列的数据范例与划定规矩A绑定,同时列又与划定规矩B绑定,则以划定规矩B为列的划定规矩。
你能够间接用一个新的划定规矩来绑定列或用户自界说数据范例,而不必要先将其本来绑定的划定规矩排除,体系会将早班划定规矩掩盖。

(2)用存储历程Sp_unbindrule排除划定规矩的绑定
存储历程Sp_unbindrule可排除划定规矩与列或用户自界说数据范例的绑定,其语法以下:
sp_unbindrule[@objname=]object_name
[,futureonly]
个中futureonly选项同绑准时一样,仅用于用户自界说数据范例,它指定现有的用此用户自界说数据范例界说的列仍旧坚持与此划定规矩的绑定。假如不指定此项,一切由此用户自界说数据范例界说的列也将随之排除与此划定规矩的绑定。
例9-9:排除划定规矩hire_date_rule与用户自界说数据范例birthday的绑定,带futureonly
选项。
execsp_unbindrulebirthday,futureonly
运转了局以下:
(1row(s)affected)
Ruleunboundfromdatatype.

(3)用EnterpriseManager办理划定规矩的绑定
在EnterpriseManager中,选择要举行绑定设置的划定规矩,单击右键,从快速菜单当选择“Properties”选项,即会呈现如-3所示的划定规矩属性对话框。图中的“BindUDTs…”按钮用于绑定用户自界说数据范例,“BindColumns…”按钮用于绑定表的列。
在-3中单击“BindUDTs…”按钮,则呈现如-4所示的绑定例则到用户自界说数据范例的对话框;单击“BindColumns…”按钮,则呈现如-5所示的绑定例则到表的列的对话框。
MSSQL教程之数据库 划定规矩
登录/注册后可看大图
MSSQL教程之数据库 划定规矩
登录/注册后可看大图


9.2.4删除划定规矩
能够在EnterpriseManager当选择划定规矩,单击右键,从快速菜单当选择“Delete”选项删除划定规矩,也可以使用DROPRULE命令删除以后数据库中的一个或多个划定规矩。其语法以下:
DROPRULE{rule_name}[,...n]
注重:在删除一个划定规矩前,必需先将与其绑定的工具排除绑定。
例9-10:删除多个划定规矩
droprulemytest1_rule,mytest2_rule
在执行崩溃恢复时,理解在一个数据库中的每一个表tbl_name对应的在数据库目录中的3个文件是很重要的:
作者: 只想知道    时间: 2015-1-19 08:43
相信各位对数据库和怎么样学习数据库都有一些经验和看法,也会有人走了一些弯路总结出自己的经验来,希望大家能把各自的看法和经验拿出来分享,给别人一份帮助,给自己一份快乐
作者: 变相怪杰    时间: 2015-1-24 23:50
代替了原来VB式的错误判断。比Oracle高级不少。
作者: 仓酷云    时间: 2015-2-2 16:35
对于微软系列的东西除了一遍遍尝试还真没有太好的办法
作者: 海妖    时间: 2015-2-8 02:24
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
作者: 灵魂腐蚀    时间: 2015-2-24 02:05
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
作者: 爱飞    时间: 2015-3-7 10:28
备份方面可能还是一个老大难的问题。不能单独备份几个表总是感觉不爽。灵活备份的问题不知道什么时候才能解决。
作者: 精灵巫婆    时间: 2015-3-15 00:05
学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!
作者: 柔情似水    时间: 2015-3-21 16:26
SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。)




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2