约束
一、约束的介绍
引言:市面上很多介绍数据库约束的文章,大多数都是适合有一点基础的人进行阅读,不易小白理解,写这篇文章的目的主要是为了满足零基础的小白对约束有一个大概的理解。因为文章是给零基础了解约束的同学讲解,所以讲解的很简单,暂时不涉及外键约束.
1.1 引出问题
首先创建一个表:student(需要sql的在后面!各位懒狗)
字段为:学号(student_id),姓名(name),性别(sex),手机号(phone),城市(address)
添加五条数据,如下表所示:
student_id | name | sex | phone | address |
---|---|---|---|---|
100101 | 张三 | 男 | 177777777 | 湖北 |
100102 | 李四 | 男 | 155555555 | 湖北 |
100103 | 王五 | 111 | 77777777 | 湖北 |
100004 | 赵六 | 男 | 133333333 | 湖北 |
接下来我们看看上面的表格存在的一些上面问题:
- 性别规范问题
在上面的表格中,很容易看出一个问题,那就是‘王五’的性别为‘11’,按照规范要求我们的性别字段只能是‘男’或者‘女’,如果不符合要求那就不能保存成功。
- 学号规范问题
第二个问题就是赵六的学号不符合规范,可以看到其他人的学号都是1001开头,唯独他的是1000开头,那么针对这样不规范的学号是不是我们也得限制新增,否则会产生很多脏数据。
- 手机号重复问题
第三个问题就是每个人的手机号不应该重复,但是‘张三’和‘王五’的手机号已经重复,很明显不符合规范。
- 地址问题
第四个问题就是可以看到所有人的地址都是‘湖北’,那么我们是否可以让每个新增的用户都不去填写地址给个默认值?
1.2 引出约束
通过上面的表格我们已经分析出了表格中有的问题,那么我们是可以设定一些‘约束’,来进行填写的限制,让表里面不符合要求的内容禁止新增?
答案当然可以啦!
1.3 约束的概念
1、主键约束(Primay Key Coustraint) 确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录
2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3、检查约束 (Check Counstraint)对该列数据的范围、格式的限制,保证列中的值符合指定的条件
4、默认约束 (Default Counstraint)规定没有给列赋值时的默认值
5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列
以上都是比较官方的解释,看不懂没关系!
1.4 通俗理解约束
我们在初步理解约束的概念以后,如何使用约束解决掉刚才的问题?
- 解决问题1:性别规范问题
性别需要做到‘男,女’限制的约束,这里就要用到我们的检查(check)约束.
具体代码如下:
create table student
(
student_id varchar(50) ,
name varchar(50) ,
sex varchar(2) check (sex='男' and sex='女') , --限定姓别只能为男或女
phone varchar(11) ,
address varchar(10)
)
总结:check约束的作用可以用来限制字段的格式
- 解决问题2:学号规范问题
要解决学号只能以1001开头,这里还是用到检查约束。
具体代码如下:
create table student
(
student_id varchar(50) check (student_id like '%1001%') , --这里用到的是正则表达式%
name varchar(50) ,
sex varchar(2) ,
phone varchar(11) ,
address varchar(10)
)
总结:check约束的作用可以用来限制字段的范围
提问:怎么去限制字段只能输入英文?(提示:使用正则表达式)
- 解决问题3:手机号重复问题
要解决手机号不能重复的问题,这里用到的是主键约束或者唯一约束。
具体代码如下:
-- 第一种主键
create table student
(
student_id varchar(50)
name varchar(50) primary key , --主键约束,
sex varchar(2) ,
phone varchar(11),
address varchar(10)
)
-- 第二种唯一
create table student
(
student_id varchar(50) ,
name varchar(50) unique, -- 唯一约束
sex varchar(2) ,
phone varchar(11),
address varchar(10)
)
注意:主键约束里面的值不能为空,唯一约束可以为空(文章最后会详细讲解)
总结:主键约束和唯一约束的作用都可以用来限制字段的重复
- 解决问题4:地址问题
create table student
(
student_id varchar(50) ,
name varchar(50) ,
sex varchar(2) ,
phone varchar(11),
address varchar(10) default '湖北' -- 默认约束添加默认值为'湖北'
)
总结:默认约束的作用就是为字段添加默认值。
那么以上就是我们四种约束结合代码的使用啦!
1.5 主键约束和唯一约束的区别
1.5.1 主键约束(PRIMARY KEY)
---一张表只能有一个主键。
---主键用于唯一地标识表中的每一条记录,可以定义一列或多列同时成为为主键(也就是联合主键)。
联合主键实例:
Create Table 表名 (student_id varchar(50) ,
name varchar(13) Not Null Primary Key (student_id, name),
sex varchar(2) ,
phone varchar(11),
)
---主键一般是不可能进行更新的。
---主键列不允许有重复值,也不允许为空。
---主健可作外健,唯一索引不可。
2. 唯一性约束(UNIQUE)
---唯一性约束也是用来限制字段的唯一性不重复。
---但是一个表上可以放置多个唯一性约束。
---只要唯一就可以更新。
---即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL)。
---一个表上可以放置多个唯一性约束。
1.6总结
这次的讲解并不涉及到外键,想听讲解外键的朋友留个赞,我会继续完善这篇文章!
怕什么真理无穷,知识无涯,进一寸自有一寸的欢喜。