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

MySQL数据库的约束

MySQL对于数据库存储的数据, 做出一些限制性要求, 就叫做数据库的"约束".

在每一列的 列名, 类型 后面加上"约束".

一. not null (非空)

指定某列不能存储null值.

二. unique (唯一)

保证这一列的每行必须有唯一值.

我们可以看到, 给 table 的 sn 列插入两次 77 , 结果就会出现报错:"Duplicate entry(重复的条目)".

三. default (默认值)

default 用于指定默认值.

如上图, id 的默认值为null, 而由于我们手动给name指定了默认值, 所以name列的默认值是"无名".

四. primary key (主键)

primary key 主键: 约定了这个表的某个列为"身份标识".

从上图我们可以看到, id 被指定为primary key. 

主键的性质:

(1) 非空性: 被指定为主键的列不能为空(null), 数据表的每条记录都必须有一个主键值.

(2) 唯一性: 被指定为主键的列的值必须是唯一的, 不能有重复.(每条记录的主键列都是不同的值). 

主键(primary key)既有非空性(not null), 又有不可变性(unique). primary key = not null + unique.

(3) 不可变性: 一旦某个记录的主键被设定, 它就不能更改.

(4) 复合主键: 虽然通常只指定一个列为主键, 但是MySQL也支持使用多个列组合作为主键

(5) 自增主键: auto_increment, 被设置为自增主键的列,当你向表中插入新记录时,不需要为这个列指定值,MySQL会自动为它生成一个值. (注意: 自增主键只能针对像int, bigint这样的整数 指定).

(6) 作为索引: 被指定为主键的列会自动创建唯一缩索引, 有助于快速检索表中的记录.

五. foreign key (外键)

外键(foreign key)是一种用于建立两个表之间关系的约束。它确保了表中的某个列的值必须存在于另一个表的主键或唯一键字段, 外键通常用于将多个表连接在一起.

(注意: 数据表中的列我们又称为字段)

例如:

我们在这里往student表里插入数据时, 给classid列插入的值就必须是在class表中存在的.

如上图所示, 往student表中插入class中存在的数据, 都没问题. 但是如果插入在class中没有的数据, 就会报错. 这就是主键的作用. 

关于外键的一些关键点:

1. 关联性: 子表的外键必须与父表中相应的主键或唯一键字段类型相匹配。

2. 相互约束: 父表约束了子表, 子表也会对父表进行反向约束. (例如: 如果父表中的某个记录被子表引用了, 此时就不能删除/修改父表中相应的记录了). 解决方案: 在创建外键约束时,可以指定 ON DELETE CASCADE 或 ON UPDATE CASCADE 选项,这样当父表中的记录被删除或更新时,子表中的相关记录也会自动被删除或更新。

所以, 在删除表的时候, 我们要确保先删除子表, 再删除父表. 否则父表无法删除.

先删父表 --> 无法正常删除.

先删子表 -->正常删除

以上就是本篇博客的全部内容啦,如果喜欢小编的文章,可以点赞,评论,收藏~

http://www.lryc.cn/news/361117.html

相关文章:

  • 计算机毕业设计 | springboot+vue会议室管理系统(附源码)
  • 常见端口及其脆弱点
  • JS函数的进阶
  • 【UE+GIS】UE5GIS CAD或shp构建3D地形
  • Unity学习笔记---音视频播放
  • 项目集成过程中的makefile记录
  • Vue3 -Computed计算属性
  • MySQL—函数—日期函数(基础)
  • Java+SVNCloud+Mysql课程设计
  • MySQL之创建高性能的索引(四)
  • Python 限制输入数的范围
  • STM32两轮平衡小车原理详解
  • (笔记)如何评价一个数仓的好坏
  • 友善RK3399v2平台利用rkmpp实现硬件编解码加速
  • Mysql 8.0 主从复制及读写分离搭建记录
  • PyTorch、显卡、CUDA 和 cuDNN 之间的关系
  • Lambda 表达式练习
  • JavaScript第七讲:数组,及练习题
  • 从docker镜像反推Dockerfile
  • 车载软件架构 - AUTOSAR 的信息安全框架
  • 欧洲版“OpenAI”——Mistral 举办的 AI 大模型马拉松
  • Java | Leetcode Java题解之第128题最长连续序列
  • C++的List
  • 网易有道QAnything使用CPU模式和openAI接口安装部署
  • 量子加速超级计算简介
  • Unity3D 基于YooAssets的资源管理详解
  • Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本
  • python练习五
  • YOLOv1深入解析与实战:目标检测算法原理
  • Apache Calcite - 自定义标量函数