服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL学习之数据库表五大约束详解小白篇

MySQL学习之数据库表五大约束详解小白篇

2021-11-14 19:10祈祷ovo Mysql

本篇文章非常适合MySQl初学者,主要讲解了MySQL数据库的五大约束及约束概念和分类,有需要的朋友可以借鉴参考下,希望可以有所帮助

 

1.约束概念和分类

1.1约束的概念:

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

1.2约束分类

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

 

2.五大约束的添加和删除

 

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选项)

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

MySQL学习之数据库表五大约束详解小白篇

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

MySQL学习之数据库表五大约束详解小白篇

表2(部门表department):

MySQL学习之数据库表五大约束详解小白篇

这里两个表的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.自增长列

 

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)
)

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

MySQL学习之数据库表五大约束详解小白篇

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

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

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

MySQL学习之数据库表五大约束详解小白篇

 

3.3自增长的添加和删除

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

alter table + 表名 + modify column + 列名 类型 约束 + AUTO_INCREMENT

2.删除

alter table + 表名 + modify column 列名 类型

 

3.4设置自增长步长

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

以上就是MySQL学习之数据库表五大约束详解小白篇的详细内容,更多关于MySQl五大约束的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/qq_45737068/article/details/106143246

 

延伸 · 阅读

精彩推荐
  • Mysqlmysql 不能插入中文问题

    mysql 不能插入中文问题

    当向mysql5.5插入中文时,会出现类似错误 ERROR 1366 (HY000): Incorrect string value: '\xD6\xD0\xCE\xC4' for column ...

    MYSQL教程网5722019-11-25
  • MysqlMySQL锁的知识点总结

    MySQL锁的知识点总结

    在本篇文章里小编给大家整理了关于MySQL锁的知识点总结以及实例内容,需要的朋友们学习下。...

    别人放弃我坚持吖4362020-12-14
  • Mysql浅谈mysql 树形结构表设计与优化

    浅谈mysql 树形结构表设计与优化

    在诸多的管理类,办公类等系统中,树形结构展示随处可见,本文主要介绍了mysql 树形结构表设计与优化,具有一定的参考价值,感兴趣的小伙伴们可以参...

    小码农叔叔5242021-11-16
  • MysqlERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event()

    ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 2 ...

    MYSQL教程网6412020-03-13
  • MysqlMySQL 数据备份与还原的示例代码

    MySQL 数据备份与还原的示例代码

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    逆心2972019-06-23
  • MysqlMySQL数据库varchar的限制规则说明

    MySQL数据库varchar的限制规则说明

    本文我们主要介绍了MySQL数据库中varchar的限制规则,并以一个实际的例子对限制规则进行了说明,希望能够对您有所帮助。 ...

    mysql技术网4192019-11-23
  • Mysql解决MySQl查询不区分大小写的方法讲解

    解决MySQl查询不区分大小写的方法讲解

    今天小编就为大家分享一篇关于解决MySQl查询不区分大小写的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起...

    Veir_dev5592019-06-25
  • Mysql详解MySQL中的分组查询与连接查询语句

    详解MySQL中的分组查询与连接查询语句

    这篇文章主要介绍了MySQL中的分组查询与连接查询语句,同时还介绍了一些统计函数的用法,需要的朋友可以参考下 ...

    GALAXY_ZMY5442020-06-03