约束的定义:
对一个表中的操作的限制叫做约束。
约束的分类:
主键约束:
作用:不允许重复元素,避免了数据的冗余。
外键约束:
作用:通过外键约束从语法上保证了本事物所关联的其他事物是一定存在的。比如员工表中的外键dept_id关联部门表的主键dept_id,那么有了外键,我们就可以保证员工表关联的部门信息一定是存在的。
另外事物和事物之间的关系是通过外键来体现的。
check约束
作用:保证事物属性的取值在合法的范围之内。check的使用方式见(例子1)
Default约束:
作用:保证事物的属性一定有一个值。使用方式见(例子2)
唯一约束(unique):
作用:保证了事物属性的取值不允许为重复,但允许其中一条记录为空。(实例3)同时我会在实例中演示为什么只允许一条记录的唯一键为空。
实例1——check约束 |
create table student
(
student_id int primary key,
student_val int check(student_val>2000 and student_val<20000),--学生工资
)
--执行插入语句
insert into student(student_id,student_val)values(1,500)--error
insert into student(student_id,student_val)values(1,5000)--ok
补充:
1、工资的约束为大于2000但是小时20000。如果输入其他的数值就会报错。
2、我们在第一句插入语句时会报错。错误如下:
3、第二个插入语句正常
实例2——Default约束 |
create table student_1
(
student_id int primary key,
student_val int check(student_val>2000 and student_val<20000),
student_sex nchar(1) default ('男')--括号可以删除,但是字符串必须用单引号括起来。
)
insert into student(student_id,student_val)values(1,5000)--这里没有指定性别,那么在数据库中显示为男。
insert into student(student_id,student_val,student_sex)values(1,5000,'女')--这里指定性别女,那么在数据库中显示为女。
实例3——唯一约束(unique) |
create table student11
(
student_id int primary key,
student_val int check(student_val>2000 and student_val<20000),
student_sex nchar(1) default ('男'),
student_name nvarchar(200) unique--可以和not null组合使用,这样既保证唯一,又能保证非空
)
执行实例三种的语句,我们创建了一个student表,其中student_name 为唯一键。我们下面通过执行在student表中插入语句来学习unique的用法。
唯一约束(unique)——插入语句(1) |
insert into student11(student_id,student_val,student_name)values(1,5000,'张三')
insert into student11(student_id,student_val,student_name)values(1,5000,'张三')--违反唯一建规则
我们在执行完第一句插入语句后,在执行第二句的时候,就会违反唯一键规则。
报错详情如下。
唯一约束(unique)——插入语句(2) |
注意:删除因为插入语句产生的结果再执行本语句。
insert into student11(student_id,student_val,student_name)values(1,5000,'张三')
insert into student11(student_id,student_val,student_name)values(1,5000,'李四')--error 违反了主键的规则,不能重复
执行第二语句的时候,违反了主键的规则,不能重复。
唯一约束(unique)——插入语句(3) |
注意:删除因为插入语句产生的结果再执行本语句。
insert into student11(student_id,student_val,student_name)values(1,5000,'张三')
student(student_id,student_val,student_name)values(null,5000,'王五')--主键不能为空error
执行第二语句的时候,违反了主键的规则,主键不能为空。提示:
“不能将值 NULL 插入列 ‘student_id’,表 ‘sql_learn.dbo.student11’;列不允许有 Null 值。INSERT 失败。”
唯一约束(unique)——插入语句(4) |
注意:删除因为插入语句产生的结果再执行本语句。
insert into student11(student_id,student_val,student_name)values(1,5000,'张三')
insert into student11(student_id,student_val,student_name)values(2,5000,null)--唯一建可以为空 ok
这两句插入语句可以执行,说明我们的唯一键可以为空。
唯一约束(unique)——插入语句(5) |
注意:删除因为插入语句产生的结果再执行本语句。
insert into student11(student_id,student_val,student_name)values(1,5000,null)
insert into student11(student_id,student_val,student_name)values(2,5000,null)--唯一建可以为空 ok
刚才说了,唯一键可以为空,那么如果两条记录中的唯一键都为空是否可以呢。执行以下上面语句你就知道了。
好了,我告诉大家吧——不行。同样违反了唯一键不能重复的规则。
总结:
1、主键和唯一键都不能重复。
2、主键不能为空,但是唯一键可以为空。