SQL篇 添加约束、删除约束
1、相关链接
2、约束的增删找查
SQL Server约束是保证数据完整性的关键机制。我将以典型的员工信息表(emp_tbl)和厂区进出记录表(checkInRecord)为案例,系统讲解六大约束类型的增删找查,帮助开发者掌握约束的最佳实践。现数据库中已有emp_tbl表和checkInRecord表,设计的字段如下表格所示,并且所有字段未设置任何约束。
员工信息表(emp_tbl):
字段名 | 字段类型 | 字段注释 |
---|---|---|
empNo | varchar(10) | 员工编号 |
empName | varchar(10) | 员工姓名 |
sex | char(1) | 性别(1男;2女) |
enterDay | datetime | 入职日期 |
varchar(40) | 员工邮箱 | |
phone | varchar(11) | 员工电话 |
stateFlag | char(1) | 员工状态(0无效;1有效) |
厂区进出记录表(checkInRecord):
字段名 | 字段类型 | 字段注释 |
---|---|---|
empno | varchar(10) | 员工编号 |
punchType | varchar(1) | 进出类型(0进入;1出去) |
punchDate | date | 进出日期 |
punchTime | time | 进出时间 |
recordtime | datetime | 记录登记日期 |
2.1 查看约束(主键、外键、唯一性、检查约束)
INFORMATION_SCHEMA.TABLE_CONSTRAINTS是SQL Server系统数据库中的一个表,用于存储数据库中所有表的约束信息,包括主键、外键、唯一约束等类型。
TABLE_CONSTRAINTS表的数据结构:
字段 | 说明 |
---|---|
CONSTRAINT_CATALOG | 条件约束限定符 |
CONSTRAINT_SCHEMA | 包含条件约束的架构名称 |
CONSTRAINT_NAME | 条件约束名称 |
TABLE_CATALOG | 数据表限定符 |
TABLE_SCHEMA | 包含数据表的架构名称 |
TABLE_NAME | 数据表名称 |
CONSTRAINT_TYPE | 约束条件的类型 |
注意:
CONSTRAINT_TYPE条件约束的类型只包含CHECK(检查约束)、UNIQUE(唯一性约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)。
查看方法:
select *
from information_schema.table_constraints
where table_name = 'emp_tbl'
执行结果:
2.2 查看默认约束
在 SQL Server 中,sys.default_constraints 是一个系统视图,用于存储数据库中所有默认约束(DEFAULT 约束)的详细信息。
SELECT
dc.name AS DefaultConstraintName,
t.name AS TableName,
c.name AS ColumnName,
OBJECT_NAME(dc.parent_object_id) AS ParentObjectName,
dc.definition AS DefaultDefinition
FROM
sys.default_constraints dc
JOIN
sys.columns c ON dc.parent_column_id = c.column_id AND dc.parent_object_id = c.object_id
JOIN
sys.tables t ON c.object_id = t.object_id
WHERE
t.name = 'emp_tbl' AND c.name = 'stateFlag';
2.3 修改约束(添加/编辑/修改)
2.3.1 添加主键约束
alter table emp_tbl
add constraint pk_empno primary key(empno)
2.3.2 添加外键约束
alter table checkInRecord
add constraint fk_empno foreign key(empno) references emp_tbl(empno)
2.3.3 添加唯一性约束
alter table emp_tbl
add constraint uk_mail unique(email)
2.3.4 添加检查约束
alter table emp_tbl
add constraint ck_sex check(sex in ('1','2'))
2.3.5 添加默认值约束
alter table emp_tbl
add constraint df_state default '1' for stateFlag
2.3.6 添加非空约束
注意:NOT NULL 不是约束类型而是列属性
alter table emp_tbl
alter column email varchar(40) not null
2.3.7 修改约束
- 约束重命名
EXEC sp_rename 'pk_empno', 'pk_emp_empno'
- 修改约束
需要删除约束后再新增约束
2.3.8 删除约束
alter table emp_tbl
drop constraint DF__test20240__state__108B795B