在数据库中添加约束的主要原因是保证数据的完整性(正确性)。
在SQL Server中,常用的约束有6种,分别是:主键约束(primary key)、外键约束(foreign key)、非空约束(not null)、默认值约束(default)、检查约束(check)、唯一约束(unique)。
主键约束:主键约束可以在表中定义一个主键值,它可以唯一地确定表中每一条数据,是最重要的一种约束。主键约束的列可以由1列或多列来组成,由多列组成的主键被称为联合组件,主键不能为空,主键不能重复。
外键约束:外键约束用于强制参照完整性,提供单个字段或多个字段的参照完整性。
唯一约束:确保在非主键列中不输入重复的值。
非空约束:保证列中的值不为空。
默认值约束:设置默认值约束后,如果该列没有输入值,系统会自动插入值作为默认约束。
检查约束:检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性。
1.主键约束
主键约束用于强制表的实体完整性,一张表中只能有一个主键约束,且主键不能为空值。
列级主键约束和表级主键约束的区别
约束范围不一样
列级约束是定义在列属性中的,而表级约束是定义在列之后的,两者本质上没什么区别,而如果你的约束需要同时对多列进行约束那么就只能采用表级约束,因为表级约束面向的是表(当然就包括所有列),而列级约束只能针对该列进行约束。
(1)列级主键约束
CREATE TABLE member
(
id INT PRIMARY KEY
)
(2)表级主键约束
CREATE TABLE member
(
id INT,
PRIMARY KEY(id)
)
(3)在现有表添加主键约束
ALTER TABLE member
ADD constraint pk_id --主键名称
PRIMARY KEY(id) --设置主键
(4)定义多个字段联合主键约束
如果多个字段定义了PRIMARY KEY约束,则一列中的值可能重复,但来自PRIMARY KEY约束定义中所有列的任何值组合必须唯一。
ALTER TABLE member
ADD constraint pk_id_name PRIMARY KEY(id,name)
(5)删除主键约束
ALTER TABLE member
DROP CONSTRAINT pk_id_name
2.外键约束
外键约束用来在两个表的数据直接建立连接,它可以是一列或者多列。外键对应的是参照完整性,一个表的外键可以是空值,如不为空值,则每一个外键值必须等于另一张表的主键的某个值。
(1)创建表时添加外键约束
CREATE TABLE tb_dept1
(
id INT PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50) NULL
)
CREATE TABLE tb_emp3
(
id INT PRIMARY KEY,
name VARCHAR(25),
deptId INT,
salary FLOAT,
CONSTRAINT FK_deptId --外键名称
FOREIGN KEY(deptId) --设置外键
REFERENCES tb_dept1(id) --所依赖表的列
)
(2)在现有表添加外键约束
ALTER TABLE tb_emp3
ADD CONSTRAINT fk_deptId FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
(3)删除外键约束
ALTER TABLE tb_emp3
DROP CONSTRAINT fk_deptId
3.默认值约束
默认值约束DEFAULT是表定义的一个组成部分,通过DEFAULT,可以在创建或修改表时添加数据表某列的默认值。
(1)创建表时添加默认值约束
CREATE TABLE member
(
address VARCHAR(20) DEFAULT '上海'
)
(2)在现有表添加默认值约束
ALTER TABLE member
ADD CONSTRAINT df_sex DEFAULT 1 FOR sex
(3)删除默认值约束
ALTER TABLE member
DROP CONSTRAINT df_sex
4.检查约束
(1)创建表时添加检查约束
CREATE TABLE member
(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
birth DATETIME NOT NULL,
info VARCHAR(255),
sex BIT,
price DECIMAL(6,2) CHECK(price>0 and price<20) --默认约束,price的值大于0小于20
)
(2)添加表级检查约束
CREATE TABLE member
(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
birth DATETIME NOT NULL,
info VARCHAR(255),
sex BIT,
price DECIMAL(6,2),
CONSTRAINT ch_price CHECK (price>0 and price<60)
)
(3)在现有表添加检查约束
ALTER TABLE member
ADD CONSTRAINT ch_price CHECK(price>0 and price<60)
(4)删除检查约束
ALTER TABLE member
DROP CONSTRAINT ch_price
5.唯一约束
(1)添加列级唯一约束
CREATE TABLE member
(
id INT PRIMARY KEY,
name VARCHAR(20) UNIQUE NOT NULL,--name列加上唯一约束,该列不能重复
birth DATETIME NOT NULL,
info VARCHAR(255),
sex BIT,
price DECIMAL(6,2),
)
(2)添加表级唯一约束
CREATE TABLE member
(
id INT PRIMARY KEY,
name VARCHAR(20) NOT NULL,
birth DATETIME NOT NULL,
info VARCHAR(255),
sex BIT,
price DECIMAL(6,2),
UNIQUE(name) --唯一约束
)
(3)现有表添加唯一约束
ALTER TABLE member
ADD CONSTRAINT uq_name UNIQUE(name)
(4)删除唯一约束
ALTER TABLE member
DROP CONSTRAINT uq_name
6.非空约束
(1)现有表添加非空约束
ALTER TABLE member
ALTER COLUMN info VARCHAR(255) NOT NULL
(2)删除非空约束
ALTER TABLE member
ALTER COLUMN info VARCHAR(255) NULL