购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.4 创建、删除和修改约束

约束是SQL Server提供的自动强制数据完整性的一种方式,它定义列的取值规则,是强制完整性的标准机制。

4.4.1 非空(NOT Null)约束

列的为空性决定表中的行是否可为该列包含空值。空值(或NULL)不同于零(0)、空白或长度为零的字符串(如“”)。NULL的意思是没有输入。出现NULL通常表示值未知或未定义。

(1)创建非空约束。在用CREATE TABLE创建表时,使用NOT NULL关键字指定非空约束,其语法格式如下:

     [CONSTRAINT  <约束名>]  NOT NULL

(2)修改非空约束。修改非空约束的语法如下:

     ALTER TABLE table_name
     alter column column_name column_type  null | not null

参数说明如下。

table_name:修改非空约束的表名。

column_name:修改非空约束的列名。

column_type:修改非空约束的类型。

null | not null:修改为空或者非空。

【例4.10】 修改mingri表中的非空约束,SQL语句及运行结果如图4.12所示。 (实例位置:资源包\TM\sl\4\10)

     USE db_Test  --打开数据库
     ALTER TABLE mingri  --更改表
     alter column ID int null  --更改ID字段属性

图4.12 非空约束

4.4.2 主键(PRIMARY KEY)约束

通过定义PRIMARY KEY约束创建主键,用于强制表的实体完整性。一个表只能有一个PRIMARY KEY约束,并且PRIMARY KEY约束中的列不能接受空值。PRIMARY KEY约束保证数据的唯一性,因此经常对标识列定义这种约束。

1.创建主键约束

(1)在创建表时创建主键约束。

【例4.11】 创建数据表Employee5,并将字段ID设置主键约束,SQL语句及运行结果如图4.13所示。 (实例位置:资源包\TM\sl\4\11)

图4.13 主键约束

说明

例4.11的代码中,CONSTRAINT PK_ID PRIMARY KEY为创建一个主键约束,PK_ID为用户自定义的主键约束名称,主键约束名称必须是合法的标识符。

(2)在现有表中创建主键约束的语法如下。

     ALTER TABLE table_name
     ADD
     CONSTRAINT constraint_name
     PRIMARY KEY [CLUSTERED | NONCLUSTERED]
     {(Column[,…n])}

参数说明如下。

CONSTRAINT:创建约束的关键字。

constraint_name:创建约束的名称。

PRIMARY KEY:表示创建约束的类型为主键约束。

CLUSTERED | NONCLUSTERED:表示为PRIMARY KEY或UNIQUE约束创建聚集或非聚集索引的关键字。PRIMARY KEY约束默认为CLUSTERED,UNIQUE约束默认为NONCLUSTERED。

【例4.12】 对mingri表中的ID字段添加主键约束。 (实例位置:资源包\TM\sl\4\12)

SQL语句如下:

     USE db_Test
     ALTER TABLE mingri  --更改表
     ADD CONSTRAINT PRM_son  PRIMARY KEY (ID)  --对ID字段添加主键约束
2.修改主键约束

若要修改PRIMARY KEY约束,必须先删除现有的PRIMARY KEY约束,然后再用新定义重新创建该约束。

3.删除主键约束

删除主键约束的语法如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name[,…n]

【例4.13】 删除mignri表中的主键约束。 (实例位置:资源包\TM\sl\4\13)

SQL语句如下:

     USE db_Test
     ALTER TABLE mingri
     DROP CONSTRAINT PRM_son  --删除主键约束

4.4.3 唯一(UNIQUE)约束

唯一(UNIQUE)约束用于强制实施列集中值的唯一性。根据UNIQUE约束,表中的任何两行都不能有相同的列值。另外,主键也强制实施唯一性,但主键不允许NULL作为一个唯一值。

1.创建唯一约束

(1)在创建表时创建唯一约束。

【例4.14】 在db_Test数据库中创建数据表Employee6,并将字段ID设置唯一约束,如图4.14所示。 (实例位置:资源包\TM\sl\4\14)

SQL语句如下:

(2)在现有表中创建唯一约束的语法如下。

     ALTER TABLE table_name
     ADD CONSTRAINT constraint_name
     UNIQUE [CLUSTERED | NONCLUSTERED]
     {(column [,…n])}

参数说明如下。

table_name:创建唯一约束的表名。

constraint_name:唯一约束名。

column:创建唯一约束的列名。

【例4.15】 为Employee6表中的ID字段设置唯一约束。 (实例位置:资源包\TM\sl\4\15)

SQL语句如下:

     USE db_Test
     ALTER TABLE Employee6
     ADD CONSTRAINT Unique1_ID  --设置唯一约束
     UNIQUE(ID)

运行结果如图4.15所示。

图4.14 唯一约束

图4.15 在现有表中创建唯一约束

2.修改唯一约束

若要修改UNIQUE约束,必须删除现有的UNIQUE约束,用新定义重新创建。

3.删除唯一约束

删除唯一约束的语法如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name[,…n]

【例4.16】 删除Employee6表中的唯一约束。 (实例位置:资源包\TM\sl\4\16)

SQL语句如下:

     USE db_Test
     ALTER TABLE Employee6
     DROP CONSTRAINT Unique1_ID

4.4.4 检查(CHECK)约束

检查(CHECK)约束可以强制域的完整性。CHECK约束类似于FOREIGN KEY约束,可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY约束从其他表获得有效值列表,而CHECK约束通过不基于其他列中的数据的逻辑表达式确定有效值。

1.创建检查约束

(1)在创建表时创建检查约束。

【例4.17】 创建数据表Employee7,为字段Sex设置检查约束,在输入性别字段时,只能接受“男”或者“女”,不能接受其他数据。 (实例位置:资源包\TM\sl\4\17)

SQL语句如下:

运行结果如图4.16所示。

(2)在现有表中创建检查约束的语法如下。

     ALTER TABLE table_name
     ADD CONSTRAINT constraint_name
     CHECK (logical_expression)

参数说明如下。

table_name:创建检查约束的表名。

constraint_name:检查约束名。

logical_expression:检查约束的条件表达式。

【例4.18】 为Employee5表中的Sex字段设置检查约束,在输入性别时只能接受“女”,不能接受其他字段。 (实例位置:资源包\TM\sl\4\18)

SQL语句如下:

     USE db_Test
     ALTER TABLE [Employee5]
     ADD CONSTRAINT Check_Sex Check(sex='女')

运行结果如图4.17所示。

图4.16 检查约束

图4.17 在现有表中创建检查约束

2.修改检查约束

修改表中某列的CHECK约束使用的表达式,首先删除现有的CHECK约束,然后使用新定义重新创建,才能修改CHECK约束。

3.删除检查约束

删除检查约束的语法如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name[,…n]

删除Employee5表中的检查约束,SQL语句如下:

     USE db_Test
     ALTER TABLE Employee5
     DROP CONSTRAINT Check_Sex  --删除约束

4.4.5 默认(DEFAULT)约束

在创建或修改表时可通过定义默认(DEFAULT)约束创建默认值。默认值是计算结果为常量的任何值,如常量、内置函数或数学表达式。其为每一列分配一个常量表达式作为默认值。

1.创建默认约束

(1)在创建表时创建默认约束。

【例4.19】 创建数据表Employee8,并为字段Sex设置默认约束“女”。 (实例位置:资源包\TM\ sl\4\19)

SQL语句如下:

运行结果如图4.18所示。

图4.18 创建表时创建默认约束

(2)在现有表中创建默认约束的语法如下。

     ALTER TABLE table_name
     ADD CONSTRAINT constraint_name
     DEFAULT constant_expression [FOR column_name]

参数说明如下。

table_name:创建默认约束的表名。

constraint_name:默认约束名。

constant_expression:默认值。

【例4.20】 为Employee6表中的Sex字段设置默认约束“男”。 (实例位置:资源包\TM\sl\4\20)

SQL语句如下:

     ALTER TABLE [Employee6]
     ADD CONSTRAINT Default_Sex_Man  --设置默认约束
     DEFAULT '男' FOR Sex            --默认值为“男”
2.修改默认约束

修改表中某列的Default约束使用的表达式,首先删除现有的Default约束,然后使用新定义重新创建,才能修改Default约束。

3.删除默认约束

删除默认约束的语法如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name[,…n]

【例4.21】 删除Employee6表中的默认约束。 (实例位置:资源包\TM\sl\4\21)

SQL语句如下:

     USE db_Test
     ALTER TABLE Employee6
     DROP CONSTRAINT Default_Sex_Man

4.4.6 外键(FOREIGN KEY)约束

通过定义FOREIGN KEY约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

1.创建外键约束

(1)在创建表时创建外键约束。

【例4.22】 创建表mrsoft,并为mrsoft表创建外键约束,该约束把mrsoft中的编号(ID)字段和表Employe中的编号(ID)字段关联起来,实现mrsoft中的编号(ID)字段的取值要参照表Employee中编号(ID)字段的数据值。 (实例位置:资源包\TM\sl\4\22)

SQL语句如下:

说明

FOREIGN KEY (ID)中的ID字段为Employee表中的编号(ID)字段。

(2)在现有表中创建默认约束的语法如下。

     ALTER TABLE table_name
     ADD CONSTRAINT constraint_name
     [FOREIGN KEY]{(column_name[,…n])}
       REFERENCES ref_table[(ref_column_name[,…n])]

创建外键约束语句的参数及其说明如表4.6所示。

表4.6 创建外键约束语句的参数及其说明

【例4.23】 将Employee表中的ID字段设置为mrsoft表中的外键。 (实例位置:资源包\TM\sl\4\23)

SQL语句如下:

     use db_Test
     ALTER TABLE mrsoft
     ADD CONSTRAINT Fkey_ID_2  --添加外键
     FOREIGN KEY (ID)          --所选字段为ID
     REFERENCES Employee(ID)   --参照Employee表的ID字段
2.修改外键约束

修改表中某列的FOREIGN KEY约束。首先删除现有的FOREIGN KEY约束,然后使用新定义重新创建,才能修改FOREIGN KEY约束。

3.删除外键约束

删除外键约束的语法如下:

     ALTER TABLE table_name
     DROP CONSTRAINT constraint_name[,…n]

【例4.24】 删除Employee表中的外键约束。 (实例位置:资源包\TM\sl\4\24)

SQL语句如下: UQc2KpH5PN9DB8h7b9U/SvW99K+UMzgTPMfrlwEzg0FLTTkt3Am6lz2/g25ToenV

     use db_Test
     Alter Table mrsoft
     Drop CONSTRAINT FKEY_ID
点击中间区域
呼出菜单
上一章
目录
下一章
×