欢迎访问 生活随笔!

ag凯发k8国际

当前位置: ag凯发k8国际 > 运维知识 > 数据库 >内容正文

数据库

mysql五大约束详解(我有多详细只有我知道小白都能懂哦) -ag凯发k8国际

发布时间:2024/10/14 数据库 36 豆豆
ag凯发k8国际 收集整理的这篇文章主要介绍了 mysql五大约束详解(我有多详细只有我知道小白都能懂哦) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.约束概念和分类
2.五大约束的添加和删除
3.自增长列

1.1约束的概念:

对表中的数据进行限定,保证数据的正确性,有效性,完整性

1.2约束分类

1.主键约束(primary key):保证该字段具有非空且唯一性,一张表中只能有一个主键,主键是表中字段的唯一标识
2.非空约束(not null):保证字段不能为空
3.唯一约束(unique):保证该字段具有唯一性但是可以为null
4.外键约束(foreign key):在一个表中存在的另一个表的主键或唯一键称此表的外键。
5.默认约束(default 默认值):用于保证该字段有默认值(用引号引起来)

2.1添加约束的六种方法

1.在创建表的时候添加非空约束(以列级约束添加)

create table 表名(
列名 数据类型 约束名
)

2.在创建表的时候添加非空约束(以表级约束添加)

create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint 别名(就是随便为自己添加的约束起一个名字)) 约束名(对应字段名)
)

3.修改列名的时候

alter table 表名 change (column) 旧列名 新列名 新列名的类型 约束

4.修改列的数据类型的时候

alter table 表名 modify (column) 列名 列类型 约束

5.在添加新列的时候可以添加约束

alter table 表名 add (column) 新列名 新列名的类型 约束

6.外键特有

alter table 表名 add constraint 外键名称(自己随便为外键取得名字) foreign key(外键字段名) references 主表名称(主表要关联的字段)

2.2三种删除约束的方式

1.修改列名的时候不加约束

alter table 表名 change (column) 旧列名 新列名 新列名的类型

2.修改列的数据类型的时候不加约束

alter table 表名 modify (column) 列名 列类型

3.运用drop特定删除约束

alter table 表名 drop index/foreign key/primary key 约束的名字

注:查看表中约束的名字:

show index from 表名

2.3五大约束分别对应的添加删除方式(序号对应2.1和2.2)

1.非空约束(not null)

对应的添加方式:1 3 4 5
对应的删除方式:1 2

2.唯一约束(unique)

对应的添加方式:1 2 3 4 5
对应的删除方式:1 2 3(对应第3种的index选项)

3.默认约束(default)

对应的添加方式:1 3 4 5
对应的删除方式:1 2

4.主键(primary key)

对应的添加方式:1 2 3 4 5
对应的删除方式:3(对应第3种的primary key选项注意后边不加约束的名字了,因为一个表里只能有一个主键)

5.外键(foreign key)

对应的添加方式:2 6
对应的删除方式:3(对应第3种的foreign key选项)

外键单独拿出来讲
我们先看一个员工表(字段分别是员工编号,姓名,年龄,所属部门,部门所在地):

我们可以发现有冗余的部分,就是研发部对应广州,销售部对应深圳不用写那么多遍,其实可以把他们分成两张表来防止冗余的部分,第一张表存储员工的信息,另一张存储部门信息
表1(员工表employee):

表2(部门表department):

这里两个表的id都是主键

但是这里有一个问题,就是,我们可以随便删除部门表的某一行,就比如id=1的那一行,一旦删除,那么表1里的dep_id=1的员工就查不到他们的部门信息了,所以就可以用外键来解决这个问题

我们可以在创建表的时候就指定dep_id是外键,关联department的主键id

语句格式(这里虽然是第2种方法也就是以表级约束添加外键但是语法上有不同):

create table 表名(
列名 数据类型,
...
列名 数据类型,
(constraint 别名(就是随便为自己添加的约束起一个名字)) foreign key(字段名) references 主表(主表对应字段)
)

对于本例子就可以这么写:

create table employee(
id int primary key,
sname varchar(5),
age int,
dep_id int,
constraint aaa foreign key(dep_id) references department(id)
)

加上外键后我们就不能删除department表里边的任意一行,而且,我们也不能在employee里边添加新的员工信息的时候把dep_id填写成除1,2之外的任何数字

2.4对于创建约束的总结

在创建表的时候添加列级约束只支持:默认,非空,主键,唯一
在添加表级约束只支持:主键,唯一,外键

2.5对于主键和唯一的区别:

主键至多一个唯一可以有多个
允许两个列组成一个主键和一个唯一

3.1概念

如果某一列是数值类型,使用 auto_increment可以来完成值的自动增长(一般都是和主键一起用)

3.2在创建表的时候添加主键约束,并且完成主键自增长的例子

格式:

create table 表名(
列名 数据类型 primary key auto_increment
)

举个例子:
我们创建一个含学号姓名的student表,并且按照学号自增长
创建语句:

create table student(
id int primary key auto_increment,
sname char(4)
)

如果此时我们表里有一个数据;

当我们再次插入数据的时候不给学号即

insert into student value(null,“李四”)

再次查看表的时候自动给我们按自增长补了学号:

3.3自增长的添加和删除

1.添加(上述在创建的时候添加是一种)

alter table 表名 modify column 列名 类型 约束 auto_increment

2.删除

alter table 表名 modify column 列名 类型

3.4设置自增长步长

自增长起始值为1,步长起始值为1
起始值不能更改,步长可以更改
用show variables like “%auto_increment%”
查看对应的步常代表的名字然后用set 步长代表名字=要设置的步长

总结

以上是ag凯发k8国际为你收集整理的mysql五大约束详解(我有多详细只有我知道小白都能懂哦)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得ag凯发k8国际网站内容还不错,欢迎将ag凯发k8国际推荐给好友。

网站地图