使用约束的小技巧

约束(constraint):约束是SQL Server提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在SQL SERVER中,对于基本表的约束分为列约束和表约束。

要想看列约束和表约束的区别,请看检查约束的例子。)

列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义之后,用空格分隔,不必指定列名;

表约束与列定义相互独立,不包括在列定义中,通常用于对多个列一起进行约束,与列定义用’,’分隔,定义表约束时必须指出要约束的那些列的名称。

1)创建约束

完整性约束的基本语法格式为:
   [CONSTRAINT constraint_name(约束名)] <约束类型>
   约束不指定名称时,系统会给定一个名称。

在SQL Server 2005中有6种约束
主键约束(primary key constraint)、
惟一性约束(unique constraint)、
检查约束(check constraint)、
默认约束(default constraint)、
外部键约束(foreign key constraint)
空值(NULL)约束。

创建检查约束常用的操作方法有如下两种 :使用SQL Server管理平台创建检查约束(即右键,选择,点击的过程用Transact-SQL语句创建检查约束。

2)检查约束 CHECK

检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。

这里全选sql语句写的约束做例子。

用Transact-SQL语句创建检查约束。其语法形式如下:
   CONSTRAINT constraint_name
   CHECK [NOT FOR REPLICATION]
   (logical_expression)

注:下面为列约束
CREATE TABLE 我的会员
(
会员编号 smallint NOT NULL
CONSTRAINT MemberNoChk
CHECK (会员编号 BETWEEN 1 AND 10000),
姓名 nvarchar(20) NOT NULL,
地址 nvarchar(60) NOT NULL
);
GO

(注:下面为表约束

看清楚了没有:列约束和表约束的区别就是列约束是直接跟在后面,而表约束则不是。

CREATE TABLE 我的会员
(
会员编号 smallint NOT NULL,
姓名 nvarchar(20) NOT NULL,
地址 nvarchar(60) NOT NULL,
CONSTRAINT ChkMemberNo
CHECK (会员编号 BETWEEN 1 AND 10000)
);
GO

2)主键约束PRIMARY KEY

PRIMARY KEY约束用于定义基本表的主键,它是惟一确定表中每一条记录的标识符,其值不能为NULL,也不能重复,以此来保证实体的完整性。PRIMARY KEY与UNIQUE约束类似,通过建立唯一索引来保证基本表在主键列取值的唯一性,但它们之间存在着很大的区别:

①在一个基本表中只能定义一个PRIMARY KEY约束,但可定义多个UNIQUE约束;

②对于指定为PRIMARY KEY的一个列或多个列的组合,其中任何一个列都不能出现空值,而对于UNIQUE所约束的唯一键,则允许为空。

注意:不能为同一个列或一组列既定义UNIQUE约束,又定义PRIMARY KEY约束。
PRIMARY KEY既可用于列约束,也可用于表约束。

使用Transact-SQL语句操作法设置主键约束,其语法形式如下:
   CONSTRAINT constraint_name
   PRIMARY KEY [CLUSTERED|NONCLUSTERED]
(column_name)

PRIMARY KEY用于定义表约束时,即将某些列的组合定义为主键,其语法格式如下:
   CONSTRAINT constraint_name
   PRIMARY KEY [CLUSTERED|NONCLUSTERED]
(column_name[,…n])


3)惟一性约束UNIQUE

使用Transact-SQL语句完成惟一性约束的操作,其语法形式如下:
CONSTRAINT constraint_name
UNIQUE [CLUSTERED|NONCLUSTERED]
column_name[,…n])

CREATE TABLE 我的员工
(
员工编号 int IDENTITY(10,10) NOT NULL
CONSTRAINT PK_员工编号_我的员工
    PRIMARY KEY ,
身份证号码 char(10) NOT NULL
CONSTRAINT UQ_身份证号码_我的员工
UNIQUE,
技能检定编号 char(6) NOT NULL
CONSTRAINT UQ_技能检定编号_我的员工
UNIQUE,
姓名 nvarchar(16) NULL,
电话号码 char(11) NULL,
行动电话 int NULL,
CONSTRAINT UQ_姓名_电话号码_我的员工
UNIQUE (姓名, 电话号码),
CONSTRAINT UQ_姓名_行动电话_我的员工
UNIQUE (姓名, 行动电话)
);

4)外部键约束FOREIGN KEY

     外键 (FOREIGN KEY) 是用于建立和加强两个表数据之间的链接的一列或多列。外部键约束用于强制参照完整性。
      当使用外部键约束时,应该考虑以下几个因素:
外部键约束提供了字段参照完整性;
外部键从句中的字段数目和每个字段指定的数据类型都必须和REFERENCES从句中的字段相匹配;
外部键约束不能自动创建索引,需要用户手动创建;
用户想要修改外部键约束的数据,必须有对外部键约束所参考表的SELECT权限或者REFERENCES权限;
参考同一表中的字段时,必须只使用REFERENCES子句,不能使用外部键子句;
一个表中最多可以有253个外部键约束;
在临时表中,不能使用外部键约束;
主键和外部键的数据类型必须严格匹配

5)默认约束 DEFAULT

默认约束指定在插入操作中如果没有提供输入值时,则系统自动指定值。默认约束可以包括常量、函数、不带变元的内建函数或者空值。

创建默认约束的Transact-SQL语句操作法。其语法形式如下:
CONSTRAINT constraint_name
   DEFAULT constraint_expression [FOR column_name]

CREATE TABLE 我的员工

地址 varchar(60) NOT NULL DEFAULT '北京市',
年收入 money NULL DEFAULT 10000
GO


6)空值约束NULL | NOT NULL

空值(NULL)约束用来控制是否允许该字段的值为NULL。NULL值不是0也不是空白,更不是填入字符串的“NULL”字符串,而是表示“不知道”、“ 不确定”或“没有数据”的意思。
当某一字段的值一定要输入才有意义的时候,则可以设置为NOT NULL。如主键列就不允许出现空值,否则就失去了唯一标识一条记录的作用。空值(NULL)约束只能用于定义列约束。

使用Transact-SQL语句设置空值(NULL)约束, 其语法形式如下:
     [CONSTRAINT <约束名> ][NULL|NOT NULL]

建立一个S表,对SNO字段进行NOT NULL约束。
程序清单如下:

CREATE TABLE S
(SNO CHAR(10) CONSTRAINT S_CONS NOT NULL,
SN VARCHAR(20),
AGE INT,
SEX CHAR(2) DEFAULT '男' ,
DEPT VARCHAR(20))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值