SQL篇 约束2
SQL篇 约束【1】
4、检查约束(Unique Constraint)
4.1 含义
检查约束通过布尔表达式校验数据的有效性,其约束条件在数据插入或更新时即刻生效,当表达式计算结果为false时拒绝操作,确保数据符合业务规则,并且在数据库层面进行数据验证,减少应用程序层面的错误处理逻辑,简化开发工作。
4.2 如何在创建表单时添加检查约束
CREATE TABLE emp_tbl( --员工信息表
empNo varchar(10) not null primary key, --员工编号
empName varchar(10) NOT NULL, --员工姓名
sex char(1) NOT NULL, --员工性别 (1男;2女)
enterDay datetime not null, --入职日期
email varchar(40), --电子邮箱
phone varchar(11), --电话
stateFlag char(1) not null --账号状态 (0离职;1在职)
CONSTRAINT chk_sex CHECK (sex in ('1','2')),
CONSTRAINT chk_state CHECK (stateFlag in ('0','1'))
);
添加一个员工信息表中没有的账号状态的数据案例如下:
insert into emp_tbl
(empNo,empName,sex,enterDay,email,phone,stateFlag)
values
('T0007',N'申葛','1','2014-05-11 00:00:00.000',null,null,'5')
执行结果:
Msg 547, Level 16, State 0, Line 2
The INSERT statement conflicted with the CHECK constraint “chk_state”. The conflict occurred in database “myDatabase”, table “dbo.emp_tbl”, column ‘stateFlag’.
The statement has been terminated.
5、默认约束(DEFAULT)
5.1 含义
默认约束指在创建表时为某个字段指定一个默认值,当插入数据时如果没有为该字段提供具体的值,系统会自动使用这个默认值为列指定默认值。
5.2 如何在创建表单时添加默认约束
CREATE TABLE emp_tbl2(
empNo varchar(10) not null primary key,
empName varchar(10) NOT NULL,
sex char(1) NOT NULL,
enterDay datetime not null,
email varchar(40),
phone varchar(11),
stateFlag char(1) not null default '1'
);
新增一条数据到员工信息表的案例:
insert into emp_tbl
(empNo,empName,sex,enterDay,email,phone)
values
('T0008',N'张三丰','1','2014-05-11 00:00:00.000','zsf@qq.com','0222')
员工信息表中新增数据行信息:
6、非空约束(NOT NULL)
6.1 含义
非空约束是数据库中对表中字段设置的一种强制性规则,它要求该字段在插入或更新数据时必须包含有效值,禁止存储 NULL(空值),主要目的是确保数据表中特定字段的数据完整性与可靠性,避免因缺失必要信息而导致的数据不一致或不完整问题。
添加一个姓名为空的数据案例如下:
insert into emp_tbl
(empNo,empName,sex,enterDay,email,phone)
values
('T0009',null,'1','2014-05-11 00:00:00.000','kk@qq.com','0222')
执行结果:
Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column ‘empName’, table ‘myDatabase.dbo.emp_tbl’; column does not allow nulls. INSERT fails.
The statement has been terminated.
7、SQL约束的目的
- 确保数据完整性
✅ SQL约束用于强制数据库表中的数据遵循特定规则,防止无效或不一致的数据插入或更新。 - 维护数据一致性
✅ 约束通过定义表之间的关系确保跨表数据的一致性。 - 实现业务规则
✅ 约束可以直接体现业务逻辑要求。 - 简化应用逻辑
✅ 通过数据库层约束,减少应用程序代码中对数据的验证逻辑。 - 防止误操作
✅ 约束自动拦截不符合规则的数据操作,提供错误反馈,避免人为操作导致的数据问题。