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


浙公网安备 33010602011771号