Sheck mo'see

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

列约束和表约束

约束定义列的取值的规则,可以是列约束和表约束。列约束指定为列定义的一部分,仅适用于单个列;表约束声明与列定义无关,可适用于表中多个列;分类如下:

1、主键约束【PRIMARY KEY】

(1)  一个表只能有一个PRIMARY KEY约束,但主键可以由多个列组成。

(2) 主键必须包含惟一的值(自定义UNIQUE约束)。

(3) 主键列不能包含NULL值。

(4) 默认索引为CLUSTERED。

代码
CREATE TABLE table_name
(
column_name column_type [CONSTRAINT pk_name] PRIMARY KEY,
...
);
//////////////////////////////////////////////////
ALTER TABLE table_name
ADD
CONSTRAINT pk_name
PRIMARY KEY [CLUSTERED
| NONCLUSTERED]
{(column1,...)}
--前提:添加主键的列必须有NOT NULL约束。
--关键字[CLUSTERED|NONCLUSTERED]表示为主键约束创建聚集或非聚集索引。
//////////////////////////////////////////////////
ALTER TABLE table_name
DROP CONSTRAINT pk_name

 

2、外键约束【FOREIGN KEY】

(1) 一个表中的外键指向另一个表中的主键。

(2) 防止非法数据插入外键列(因为插入值只能是它所指向的表中的数据)。

代码
///////////////////////////////////////////////////
CREATE TABLE table_name
(
  column_name column_type FOREIGN KEY REFERENCES other_table(column_name)
  
//两个列名要一致
...
);
//////////////////////////////////////////////////
CREATE TABLE table_name
(
  column1_name column_type,
  column2_name column_type,
...
CONSTRAINT fk_name FOREIGN KEY(column1_name) REFERENCES other_table(column1_name)
);
//////////////////////////////////////////////////
ALTER TABLE table_name
ADD [CONSTRAINT fk_name]
FOREIGN KEY(column1_name)
REFERENCES other_table(column1_name)
//////////////////////////////////////////////////
ALTER TABLE table_name
DROP CONSTRAINT fk_name

 

3、默认约束【DEFAULT】

为字段提供默认值,可以是具有返回值的函数。

代码
CREATE TABLE table_name
(
column_name column_type DEFAULT default_value,
...
);
///////////////////////////////////////////////////
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value
///////////////////////////////////////////////////
ALTER TABLE table_name
ALTER COLUMN column_name DROP DEFAULT

 

4、惟一约束【UNIQUE】

(1) 确保在非主键列(列集)中不输入重复值。

(2) 一个表可以有多个UNIQUE约束。

(3) 默认索引为NONCLUSTERED。

代码
///////////////////////////////////////////////////
CREATE TABLE table_name
(
column_name column_type [CONSTRAINT uk_name] UNIQUE,
...
);
///////////////////////////////////////////////////
CREATE TABLE table_name
(
column1_name column_type,
column2_name column_type,
...
CONSTRAINT uk_name UNIQUE(columns_list)
);
///////////////////////////////////////////////////
ALTER TABLE table_name
ADD [CONSTRAINT uk_name]
UNIQUE [CLUSTERED
| NONCLUSTERED]
{(columns_list)}
--关键字[CLUSTERED|NONCLUSTERED]表示为惟一约束创建聚集或非聚集索引。
///////////////////////////////////////////////////
ALTER TABLE table_na
DROP CONSTRAINT uk_name

 

5、检查约束【CHECK】

对表进行插入和修改时,检查新纪录的列值满足检查约束条件。

代码
///////////////////////////////////////////////////
CREATE TABLE table_name
(
column_name column_type CHECK(column_name约束表达式),
...
);
///////////////////////////////////////////////////
CREATE TABLE table_name
(
column1_name column_type,
column2_name column_type,
...
CONSTRAINT ck_name CHECK(column1_name…… AND column2_name……)
);
///////////////////////////////////////////////////
ALTER TABLE table_name
ADD
CONSTRAINT ck_name
CHECK(单列或多列的条件表达式)
--如CHECK(column_name like‘[0-9][0-9]’)
///////////////////////////////////////////////////
ALTER TABLE table_name
DROP CONSTRAINT ck_name

 

6、非空约束【NOT NULL】

强制字段不接受NULL值。

 

posted on 2010-09-18 20:28  Sheck mo'see  阅读(74)  评论(0)    收藏  举报