MySql 表的约束

1.空属性

两个值:null(默认的)和not null(不为空)
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办
法参与运算。

我们根据这个例子可以知道 当表的成员有not null属性的时候 我们插入时这个成员对应的值不可以是NULL;

此外null不参与计算

我们再插入一个值就可以验证这个点

这个地方我们不能插入和NULL有关的值

因为有的版本的MySql你插入NULL+1 又可能插入进去的就算NULL+1

但是这种 对于not null 的约束而言 仍然是不被允许的!!!

2.默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,
用户可以选择性的使用默认值。

我们发现当我们一个字段不插入值的时候 其插入的是这个字段的default的值

当然default和not null 可以同时有

我们再来看下面这个

为什么这个地方我压根没有设置default 依然可以插入成功呢?

我们会发现 当我们创建的时候如果什么都没写 那么系统会自动帮我们加上default null

但是如果你加上了 not null 或者其他的default的值 那么这个就没有了

3.zerofill

zerofill的作用就算用0填充

int(a) 表示当a不足8位的时候会被补充到8位

我们正常使用可能看不出来差异

这个时候可以搭配zerofill使用就可以很明显看出来了

当插入的值不足a位的时候就会用0填充被补到a位

但是本质上只是位数变了 但是其本身并没有改变

4.主键

主键是表中用于唯一标识每条记录的字段(或字段组合),它具有以下特性:

唯一性:表中不存在两条记录具有相同的主键值

非空性:主键字段不能为 NULL 稳定性:主键值不应频繁变动

最小性:尽量使用最少的字段来定义主键 主键的主要作用是确保表中每条记录都能被唯一识别,同时数据库会自动为主键创建索引,这将显著提高基于主键的查询性能。

我们可以直接实际操作去验证

也可以像下面这样创建主键


当表创建好以后但是没有主键的时候,可以再次追加主键

sql 复制代码
alter table 表名 add primary key(字段列表)

追加主键的前提是当前表里的值满足主键的需求!!!

同时也可主键删除

sql 复制代码
alter table 表名 drop primary key;

当然我们还有复合主键

我们发现对于复合主键 它不允许和插入和复合主键完全一样的内容

比如上图创建的example3 除非插入的内容 其id和age和表中已有的一条内容的id和age完全一样

否则不会报错

4.自增长

自增长是 MySQL 中一种特殊的列属性,它允许列在插入新记录时自动生成递增的数值。当为表中的某个列设置了自增长属性后,无需手动为该列赋值,MySQL 会自动为每一条新插入的记录分配一个比上一条记录该列值大 1 的数值。

自增长具有以下特点:

  • 自增长列的值是唯一的,不会重复
  • 通常从 1 开始,每次递增 1(默认情况下)
  • 自增长列必须是整数类型(如 INT、BIGINT 等)
  • 一个表中只能有一个自增长列
  • 自增长列通常与主键配合使用,作为表的唯一标识

自增长的作用

  • 简化数据插入操作:无需手动生成和管理唯一标识,减少人为操作错误
  • 确保记录唯一性:自动生成的唯一数值可作为记录的唯一标识
  • 提高数据插入效率:避免了手动生成唯一 ID 的复杂逻辑
  • 便于数据管理:有序的自增长数值方便数据的排序和查找

自增长的使用条件

在使用自增长之前,需要了解它的使用条件:

  • 自增长列必须定义为整数类型,如 INT、BIGINT、SMALLINT 等
  • 自增长列必须设置为 NOT NULL,因为它需要有确定的数值
  • 自增长列通常需要设置为主键或唯一键,以确保其唯一性
  • 一个表中只能有一个自增长列

自增长的创建方式

我们发现

默认情况下,自增长列从 1 开始递增。

如果需要修改起始值,可以在创建表时指定

当我们插入的时候如果没有指定自增长对应的值 系统会自动推导其值

查看当前自增长值

使用 LAST_INSERT_ID() 函数 LAST_INSERT_ID() 函数返回最近生成的自增值,不过它返回的是当前会话中最后插入操作生成的自增值,而不是表的下一个自增值。一般在执行插入操作后立即使用该函数获取刚刚插入记录的自增值。例如:

为已有表添加自增长列

需要注意的是,添加自增长属性的列必须是整数类型且已设置为主键或唯一键

因为唯一键和主键都是和自增长一样不含重复的

修改自增值

5.唯一键

唯一键是 MySQL 中的一种约束机制,用于确保表中指定列(或列组合)的值具有唯一性,即同一列中不会出现重复的值。与主键不同,唯一键允许字段值为NULL,但多个 NULL 值在唯一键约束中被视为不重复(因为NULL不等于任何值,包括自身)。

唯一键的创建方式 以下三种方式都可以

复合唯一键 它不允许和插入和复合主键完全一样的内容

修改/增添 唯一键

唯一键和主键好像很相似 它们的区别是什么?

主要区别在于主键只能有一个且不能位NULL

但是唯一键可也有多个 且可以为NULL值

6.外键

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique
约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

我们创建了两个表一个是myclass 一个是stu

我们发现这个时候 我们插入stu表的class_id 必须存在于class这个表的id中 才能插入

同样我们发现无论删除主表还是从表的外键 要先把另一个表对应的外键值清空才能进行 删除

外键也有复合外键

相关推荐
秋千码途22 分钟前
一道同分排名的SQL题
数据库·sql
山烛34 分钟前
矿物分类系统开发笔记(二):模型训练[删除空缺行]
人工智能·笔记·python·机器学习·分类·数据挖掘
黑客影儿38 分钟前
黑客哲学之学习笔记系列(三)
笔记·学习·程序人生·安全·职场和发展·网络攻击模型·学习方法
似水流年流不尽思念2 小时前
MySQL 的 MVCC 到底解决了幻读问题没有?请举例说明。
mysql·面试
秋难降2 小时前
零基础学SQL(八)——事务
数据库·sql·mysql
槲栎3 小时前
CentOS7中使用yum安装mysql
mysql
RestCloud3 小时前
ETLCloud中的数据转化规则是什么意思?怎么执行
数据库·数据仓库·etl
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
数据库·深度学习·kubernetes·apache·时序数据库·iotdb
.Shu.4 小时前
Redis zset 渐进式rehash 实现原理、触发条件、执行流程以及数据一致性保障机制【分步源码解析】
数据库·redis·缓存