设为首页 加入收藏

TOP

SQL应用与开发:(八)数据完整性(二)
2015-07-24 10:17:19 来源: 作者: 【 】 浏览:1
Tags:SQL 应用 开发 数据 完整性
”、“参加工作时间”和“联系电话”,并且要求在向表中添加数据时,列“参加工作时间”应介于2015年1月1日到2015年5月1日之间。

下面就两个约束分别创建,以作比较:

将CHECK约束作为列约束在创建表的语句中定义:

CREATE TABLE销售人员信息

(编号 INTEGER NOT NULL,

姓名 VARCHAR(50),

参加工作时间 SMALLDATETIME NOT NULL,

CONSTRAINT CK_ 参加工作时间

CHECK

(参加工作时间 BETWEEN '2015-01-01' AND '2015-05-01')

)

将CHECK约束作为表约束在创建表的语句中定义:

?

CREATE TABLE销售人员信息

(编号 INTEGER NOT NULL,

姓名 VARCHAR(50),

参加工作时间 SMALLDATETIME NOT NULL

CHECK

(参加工作时间 BETWEEN '2015-01-01' AND '2015-05-01')

)

5.2定义断言

断言仅仅是一种可以应用于多个表的CHECK约束,因此必须在表定义之外独立地创建断言。创建断言时使用下列语法:

CREATE ASSERTION CHECK

创建断言和穿件表CHECK约束非常相似,但在CHECK关键字后必须提供必要的限定条件,并且断言的条件必须一直为真。

举例来说,重新创建表“销售信息”,包含的列仍未“商品编号”、“商品名称”、“销售价格”和“销售日期”,则其创建语句如下:

CREATE TABLE 销售信息

(商品编号 INTEGER PRIMARY KEY,

商品名称 VARCHAR(50) UNIQUE,

销售价格 MONEY NOT NULL,

销售日期 SMALLDATETIME NOT NULL

)

上述语句中并没有指定CHECK约束。如果对该表中的列“销售价格”中的数据进行总和,并且希望其总和大于10000,则可以创建一个断言把“销售价格”中的数据加起来,并验证总和是否大于10000。

CREATE ASSERTION AS_销售价格

CHECK

((SELECT SUM(销售价格) FROM 销售信息) > 10000)

在该语句中使用了一个子查询(SELECT SUM(销售价格) FROM 销售信息),并且将这个子查询的结果与10000进行比较。如果在“销售价格”列中添加的数据的总和小雨10000,那么系统将弹出一个出错消息。

5.3创建域和域约束

还有一种约束CHECK约束是插入域定义中的域约束。除了不用连接域约束和特定的列约束或表以外,域约束的定义与其他约合苏的定义相似。而当需要表示某个定义列的中的值时,域约束使用关键字VALUE。创建域的语法如下所示:

CREATE DOMAIN [AS]

[DEFAULT ]

[CONSTRAINT ] CHECK ( )

举例来说,在5.1的例子中的“销售信息”表创建之后,引用列“销售日期”创建一个机遇SMALLDATETIME数据类型的域,并且要求所有的值都必须在2015年1月1日到2015年5月1日之间。

CREATE DOMAIN 销售日期 AS SMALLDATETIME

CONSTRAINT CK_销售日期

CHECK

(VALUE BETWEEN '2015-01-01' AND '2015-05-01')

在上述的语句中添加VALUE关键字,它表示由“销售信息”域定义的列中的值。因此,要插入的值必须在“2015-01-01”和“2015-05-01”。

6.使用规则

规则限制了可以存在表中或用户定义数据类型的值。,它可以使用多种方式来完成对数据值的检验,可以使用函数返回验证信息,也可以使用关键字BETWEEN、LIKE和IN完成度输入数据的检查。

规则是数据库对象之一,它的作用与CHECK约束的部分功能相同,在向表的某列插入或更新数据时,用它来限制输入的新值的取值范围。规则与CHECK约束不同之处在于:

CHECK约束是用CREATE TABLE语句在建表时指定的,而规则需要作为单独的数据库对象来实现;

在一列上只能使用一个规则,但可以使用多个CHECK约束;

规则可以应用于多个示例,还可以应用于用户自定义的数据类型,而CHECK约合苏只能应用于它定义的列。

规则是实现域完整性的方法之一,它用来验证一个数据库中的数据是否处于一个指定的值域范围内。当数据库中的数据被插入或更新时,需要检查这个新值是否遵循规则,如果违反了规则,那么这一操作将会失败。

?

6.1创建规则

创建规则使用CREATE RULE语句,其格式如下:

CREATE RULE

AS

其中, 表示创建的规则名称, 表示定义规则的条件。规则可以是WHERE自己中任何有效地表达式,并且可以包括算术运算符、关系运算符以及IN、LIKE、BETWEEN等关键字。

举例来说,在数据库“销售管理系统”中创建一个名为“城市_rule”的规则,限定输入的值必须是“北京市”、“上海市”、“广州市”、“南京市”、“深圳市”之一。

CREATE RULE 城市_rule

AS

@供应商所在城市 IN ('北京市','上海市','广州市','南京市','深圳市')

6.2绑定规则

要使用规则,必须首先将其和列或者用户定义数据定义类型绑定。可以使用sp_bindrule存储过程对规则进行绑定。sp_bindrule存储过程的语法格式如下:

sp_bindrule [ @rulename=] ,

[ @objname= ]

[ ,@futureonly= ]

其中,[ objname= ] 表示绑定了规则的表和列或用户定义的数据类型,[ @futureonly= ] 只有将规则绑定到用户定义的数据类型时才使用。

举例来说,将上一例子中创建的规则“城市_rule”绑定到“供应商信息”表的“供应商所在城市”列上。

sp_bindrule 城市_rule,'供应商信息.供应商所在城市'

6.3删除规则

对于不再需要的规则,可以使用DROP RULE语句删除。要删除规则首先要解除对改队则的绑定,解除规则的绑定可以使用sp_unbindrule存储过程,其语法格式如下:

sp_unbindrule [ @objectname= ]

[ ,@futureonly= ] ]

举例来说,要删除规则“城市_rule”,那么首先要将该绑定从“供应商信息”表的列“供应商所在城市”上解除,可以使用下述语句解除绑定。

sp_unbindrule '供应商信息.供应商所在城市'

在解除绑定之后,就可以使用下述DROP RULE语句将该规则删除。

DROP RULE 城市_rule

也可以在企业管理器中将规则删除,但是在删除规则之前必须确定该规则不存在任何的绑定,即要删除规则,必须先解除规则上的绑定。

?

三.学习小结

关于数据库的完整性的整理,到这里也算是完结了,而相对于其它章节的整理中,本章节尤为简单,个人的理解。都是一些简单的SQL语句的练习,在先前的学习中,对于早已熟悉SQL语句的我们,这一章也尤为重要,无规则不成方圆。

对于自己的整理,也由于在数据库中练习,相得益彰。多去实践,才能提升对这规则的更好理解。

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇eclipse连接sqlserver ping failed 下一篇STRAIGHT_JOIN优化坑爹SQL

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)
·玩转C语言和数据结构 (2025-12-27 01:19:05)
·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)