MySQL中的数据库约束用法及说明

 更新时间:2026年03月16日 14:11:11   作者:灰阳阳  
本文介绍了MySQL数据库中的约束类型,包括notnull、unique、default、primary key、foreign key和check,这些约束类型用于实现对插入数据的管控,确保数据的完整性和逻辑性

导读

在使用数据库的时候,为了避免插入数据出错,一般会对插入的数据进行约束(限制)

比如插入学生信息(包含学生名字):

如果不对插入的数据进行约束,那么这种情况,也会插入成功:

在逻辑上这显然是不成立的,因为学生的名字不能是null。

为此,MySQL中提供了约束类型,用来实现对插入数据的管控。

约束类型

一共有这几种:

  • not null - 指示某列不能存储 NULL 值。
  • unique - 保证某列的每行必须有唯一的值。
  • default - 规定没有给列赋值时的默认值。
  • primary key - not nullunique 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
  • foreign key - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • check - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 check子句。

接下来,妖妖介绍:

1、not null(不能为空)

语法形式:

create table 表名(id int ,name varchar(20) not null,score int);

举例,创建一个表,名字这一列不能填NULL

此时还想插入一个名字为null的学生就不可能了:

注意事项:

1、name的默认值不能是NULL了:

2、不能将名字修改成NULL:

2、unique(唯一)

语法形式:

create table 表名(id int unique,name varchar(20),score int);

举例,创建一个表,id不能重复

注意:

unique允许有多个NULL值,而不报错。

3、default(默认值约束)

语法形式:

create table 表名(id int ,name varchar(20) default '自定义的默认值',score int);

举例,创建一个表,id的默认值是-1,名字的默认值是‘无姓名’:

4、primary key(唯一)与unique

primary key(一般叫主键)unique很像,被约束的列,都不能出现重复的值,但他们也有很多不同点。

相同点

1.唯一性:primary keyunique都确保了被修饰的列的值是唯一的。

2.索引:MySQL 会自动为 PRIMARY KEY 和 UNIQUE 创建索引,以加快查询速度。(索引如果没学过,不用管,不要紧)

不同点

1.unique允许插入相同的NULL值,因为MySQL认为NULL无法比较,因此不相等

但primary key不允许插入相同的NULL值。

2.数量 primary key在一个表中,只能约束一列数据:

但unique在一个表中可以约束多列数据:

像这种约束,用的还是比较多的,比如说游戏的ID

五月份 L O L 的改名活动,不知道大家有没有白.嫖:

像这种可以取重复ID的账户系统,底层使用的就是primary key这类约束,既对id这一列进行唯一约束,但是不对name这一列进行唯一约束。

auto_increment

auto_increment是一个关键字,通常与primary key一起使用去约束整数类型的数据,

MySQL 中用于自动生成唯一标识符的属性

语法:

插入数据:

 结果:

也就是说,id默认从1,开始,然后顺序增加。

注意:

如果图中插入了一个id为100的数据:

在使用auto_increment:

那么id将会从101开始递增:

5、foreign key(外键)

语法形式

create table 表名(id int ,foreign key(id) references 另一个表的表名(表中一个字段) )

看不懂没关系,等一下有栗子吃。

外键相对于前四个,功能就有意思了,语法形式也和上面有所不同。

功能

有这样两个表,一个存储班级:

一共只有三个班级,请记住。

接下来一个表,用来存储学生:

此时,父表(class)和子表(student)就建立了联系。

子表,在插入数据的时候,受到父表的约束,班级号码不能1、2、3以外的数字,否则报错:

同时,父表也可能会被子表约束:

子表先插入一个非法数据:

然后删除父表对应的行数据,将会报错:

6、check——了解即可

语法:

实际上也是对插入数据进行约束。

例如,上图插入数据的price必须是正数才行,不然会报错。

但是,MySQL并不支持check关键字的使用,即使它可以用代码执行,但是实际运行时,会自动忽略。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Mybatis mapper动态代理的原理解析

    Mybatis mapper动态代理的原理解析

    这篇文章主要介绍了Mybatis mapper动态代理的原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • MySQL数据库学习之排序与单行处理函数详解

    MySQL数据库学习之排序与单行处理函数详解

    这篇文章主要为大家详细介绍一下MySQL数据库中排序与单行处理函数的使用,文中的示例代码讲解详细,对我们学习MySQL有一定帮助,需要的可以参考一下
    2022-07-07
  • mysql binlog 回滚示例解析

    mysql binlog 回滚示例解析

    严格来说mysqlbinlog 不能算回滚,他只是将过去的数据修改记录 重新执行一遍,但是从结果上来看,他也算把数据恢复到任意时间点了,这篇文章主要介绍了mysql binlog回滚示例解析,需要的朋友可以参考下
    2023-08-08
  • MySQL 如何查询 JSON 数组是否包含特定的值

    MySQL 如何查询 JSON 数组是否包含特定的值

    本文给大家介绍MySQL 如何查询 JSON 数组是否包含特定的值,假设定义了一张表 School,其中字段 stages 为 JSON 类型,本文通过实例代码给大家详细讲解,感兴趣的朋友一起看看吧
    2023-11-11
  • MySQL 8.0新功能监控统计限制连接不再担心被垃圾SQL搞爆内存

    MySQL 8.0新功能监控统计限制连接不再担心被垃圾SQL搞爆内存

    这篇文章主要介绍了MySQL 8.0新功能监控统计限制连接不再担心被垃圾SQL搞爆内存详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • mysql安装数据库初始化失败问题解决方法保姆级教程

    mysql安装数据库初始化失败问题解决方法保姆级教程

    这篇文章主要给大家介绍了关于mysql安装数据库初始化失败问题解决方法保姆级教程,包括更改电脑名称、确保防火墙设置、清理残留文件、检查权限和配置文件等,需要的朋友可以参考下
    2025-01-01
  • Mysql实现范围分区表(新增、删除、重组、查看)

    Mysql实现范围分区表(新增、删除、重组、查看)

    MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解一下
    2025-07-07
  • mysql中GROUP_CONCAT函数使用及遇到问题详解

    mysql中GROUP_CONCAT函数使用及遇到问题详解

    这篇文章主要给大家介绍了关于mysql中GROUP_CONCAT函数使用及遇到问题的相关资料,GROUP_CONCAT是用于将分组后的多个行连接为一个字符串的聚合函数,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • mysql 5.7.9 winx64在windows上安装遇到的问题

    mysql 5.7.9 winx64在windows上安装遇到的问题

    mysql5.7.9版本以上在windwos上安装时会遇到无法启动但是没有任何报错的问题,怎么回事呢?接下来通过本文给大家介绍mysql 5.7.9 winx64在windows上安装遇到的问题及解决方法,需要的朋友可以参考下
    2016-10-10
  • mysql查询字段类型为json时的两种查询方式

    mysql查询字段类型为json时的两种查询方式

    这篇文章主要介绍了mysql查询字段类型为json时的两种查询方式,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07

最新评论