博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL中的约束
阅读量:2241 次
发布时间:2019-05-09

本文共 2728 字,大约阅读时间需要 9 分钟。

约束的定义:

对一个表中的操作的限制叫做约束。

约束的分类:

主键约束:

作用:不允许重复元素,避免了数据的冗余。

外键约束:

作用:通过外键约束从语法上保证了本事物所关联的其他事物是一定存在的。比如员工表中的外键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)--errorinsert 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、主键不能为空,但是唯一键可以为空。

你可能感兴趣的文章
检测iOS的网络可用性并打开网络设置
查看>>
简单封装FMDB操作sqlite的模板
查看>>
iOS开发中Instruments的用法
查看>>
强引用 软引用 弱引用 虚引用
查看>>
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
C结构体、C++结构体、C++类的区别
查看>>
进程和线程的概念、区别和联系
查看>>
CMake 入门实战
查看>>
绑定CPU逻辑核心的利器——taskset
查看>>
Linux下perf性能测试火焰图只显示函数地址不显示函数名的问题
查看>>
c结构体、c++结构体和c++类的区别以及错误纠正
查看>>
Linux下查看根目录各文件内存占用情况
查看>>
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
(PAT 1019) General Palindromic Number (进制转换)
查看>>
(PAT 1073) Scientific Notation (字符串模拟题)
查看>>
(PAT 1080) Graduate Admission (排序)
查看>>
Play on Words UVA - 10129 (欧拉路径)
查看>>