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中 才能插入
同样我们发现无论删除主表还是从表的外键 要先把另一个表对应的外键值清空才能进行 删除

外键也有复合外键
