当前位置: 首页 > news >正文

【MySQL】第三弹——表的CRUD进阶(一)数据库约束

文章目录

  • 🚀数据库的约束
    • <font color= #FF0000 size=3>约束类型:
    • 🪐<font color= #FF0000 size=3>①.NOT NULL非空约束
    • 🪐<font color= #FF0000 size=3>②.UNIQUE唯一性约束
    • 🪐<font color= #FF0000 size=3>③.DEFAULT默认值约束
    • 🪐<font color= #FF0000 size=3>④.PRIMARY KEY
    • 🛰️外键
    • 🛰️删除
    • 🛰️check
    • 🛰️总结

🚀数据库的约束

  • 约束就是数据库可以让程序员定义一些数据的限制规则,数据库会在插入/修改数据的时候按照这些规则进行校验,检验不通过,就直接报错

约束的实质就是让我们及时发现数据中的错误,更好的保证数据的正确性

是关系型数据库的一个重要功能,主要作用是保证数据的完整性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确)
人工检查数据完成性工作量非常大,在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮我们进行校验工作

约束一般是指定在列上的

约束类型:

在这里插入图片描述

🪐①.NOT NULL非空约束

  • 定义表时某些列不允许为NULL时,可以为列添加非空约束
    在这里插入图片描述
    在这里插入图片描述
    这就是数据库帮我们做的一次校验
    在这里插入图片描述

🪐②.UNIQUE唯一性约束

  • 保证某列的每行必须有一个唯一值

某些值在整个表中不能重复,比如身份证号,学号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

🪐③.DEFAULT默认值约束

  • 规定没有给列赋值时的默认值
mysql> drop table student;
Query OK, 0 rows affected (0.00 sec)mysql> create table student (id int default 0, name varchar(20) default '未命名');
Query OK, 0 rows affected (0.01 sec)mysql> desc student;
+-------+-------------+------+-----+-----------+-------+
| Field | Type        | Null | Key | Default   | Extra |
+-------+-------------+------+-----+-----------+-------+
| id    | int(11)     | YES  |     | 0         |       |
| name  | varchar(20) | YES  |     | 未命名    |       |
+-------+-------------+------+-----+-----------+-------+
2 rows in set (0.00 sec)mysql> insert into student (id) values (1);
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 未命名    |
+------+-----------+
1 row in set (0.00 sec)mysql> insert into student (name) values ('张三');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 未命名    |
|    0 | 张三      |
+------+-----------+
2 rows in set (0.00 sec)

在这里插入图片描述

在这里插入图片描述

插入时只指定了id,这时name列使用默认值填充

当为某列设置了默认约束的时候,如果不给这个列指定值才会使用默认约束

在这里插入图片描述

虽然指定的默认约束,但是当我们手动指定这一列的值为NULL时
插入的值依然是NULL,因为这个NULL是我们手动指定的,也可以理解为我们想要的值

用户指定的优先级要高于默认值

🪐④.PRIMARY KEY

  • NOT NULL 和 UNIQUE的结合,确保某列(或者两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录

主键约束的列既是非空的也是唯一的

在这里插入图片描述
在这里插入图片描述

写入数据是两个约束同时生效

主键约束帮我们校验了非空和唯一,这两个校验写入数据时对效率是有一定影响的,但是比起不做校验来说,这个性能消耗还是可以承担的,而且主键对后面所学习的索引起到了非常重要的作用

强烈建议为每张表定义一个主键

在这里插入图片描述

让数据库帮我们去维护主键的增长,不用程序员自己去计算,插入时先找到最大的值,然后在这基础上+1生成一个新的值,作为新的数据行主键(这张表中的id列)的值

  • 演示全列插入
    在写入数据时不具体的指定主键列的值,而是用NULL代替

在这里插入图片描述

这里不是说把NULL写入数据库了,而是说让数据库帮我们处理这个列的值(进行自增操作)

  • 演示指定列插入
    当指定列插入时,也会自动生成id列,作为数据行的主键列

在这里插入图片描述

可不可以指定一个主键值?–可以的,只要主键值不重复即可

在这里插入图片描述
在这里插入图片描述

那么主键值在数据表中可能是不连续的

注意!!一个表中不允许有两个主键

在这里插入图片描述

一个主键同时可以包含多个列(复合主键)

在这里插入图片描述
在这里插入图片描述

🛰️外键

  • FOREIGN KEY -保证一个表中的数据匹配另一个表中的值的参照完整性

这里命令行的形式大家也掌握的差不多了,我们尝试使用Navicat来进行演示

在这里插入图片描述

当前创建的表没有设置主外键关系

外键用于关联其他表的主键和唯一键,语法:

foreign key(字段名) reference 主表()

在这里插入图片描述

在这里插入图片描述
通过外键约束,保证数据的完整性和关系的正确性

🛰️删除

  • 删除主表中的数据

当子表中存在对主表的依赖的时候,那么能不能删除主表中相应的记录?

在这里插入图片描述
在这里插入图片描述

如果要删除主表中的记录,子表中不能有对该条记录的依赖,也就意味着要先删除子表中的记录,再去删除主表中的记录

在这里插入图片描述

🛰️check

  • check-保证列中的值符合指定的条件,对于MySQL数据库,对于check子句进行分析,但是忽略check子句

在这里插入图片描述
练习中会遇到的问题
在这里插入图片描述

写入记录时,由于各种原因报错了(主外键约束or语法…)
当insert 操作时,就会先生成一个主键值,不论记录写入成功与否,这个主键值都会视为已使用
下一次写入记录时,会发现主键值不连续的现象
在真正的开发环境中对我的是没有影响的,数据库本身也是根据数据结构来排序的,只要大小关系正确就可以,开发环境中数据是成千上万的,我们也不好发现,是没有影响的

🛰️总结

在这里插入图片描述

相关文章:

  • 专栏特辑丨悬镜浅谈开源风险治理之SBOM与SCA
  • 鸿蒙Next开发 获取APP缓存大小和清除缓存
  • Open Source Geospatial Content Management System -GeoNode
  • 《100天精通Python——基础篇 2025 第18天:正则表达式入门实战,解锁字符串处理的魔法力量》
  • Leetcode 3547. Maximum Sum of Edge Values in a Graph
  • Excelize 开源基础库发布 2.9.1 版本更新
  • win部署Jenkins 自动化部署发布后端项目
  • 6. 多列布局/用户界面 - 杂志风格文章布局
  • RabbitMQ 核心概念与消息模型深度解析(一)
  • centos中libc.so.6No such file的解决方式
  • 尼康VR镜头防抖模式NORMAL和ACTIVE的区别(私人笔记)
  • 专栏项目框架介绍
  • wpf DataGrid 行选择 命令绑定
  • vscode不能跳转到同一个工作区的其他文件夹
  • 阿里二面:聊聊 MySQL 主从同步方案的优缺点
  • 从虚拟现实到混合现实:沉浸式体验的未来之路
  • STM32 变量加载到flash的过程中
  • python打卡day24
  • 芋道(yudao-cloud)项目,后端接口报401-账号未登录解决方案
  • DELL R770 服务器,更换RAID卡教程!
  • 加拿大新政府宣誓就职
  • 特朗普开启第二任期首次外访:中东行主打做生意,不去以色列
  • 生态环境保护督察工作条例对督察对象和内容作了哪些规定?有关负责人答问
  • 中国工程院院士、国医大师石学敏逝世
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 非洲雕刻艺术有着怎样的“变形之美”