【MySQL】表的约束

概念

表的约束保证插入的数据是合法的, 符合预期的;
真正约束字段的是数据类型, 但关于单一, 所以需要一些额外的约束, 满足不同的场景;

1. 空属性

  • MySQL 中, 空属性有两个值, null 和 not null;

  • 与 C/C++ 中的空值不同, MySQL 中的空值无法参与运算;

  • 数据库默认字段基本都是可为空, 但实际使用中, 尽可能保证字段不为空;

例:

创建一个可为空的字段和不可为空的字段;
在这里插入图片描述

向其插入数据, 不可为空的字段中是不能插入空值的;
在这里插入图片描述

2. 默认值

  • MySQL 中, 字段的默认值 默认为空值;
  • 当字段不可为空时, 若默认值为空值, 那么需要显示插入数据;

例:

新增字段 num3 , 默认值为 3;
在这里插入图片描述

向表中插入数据时, 不可为空且默认值为空的字段是不能被忽略的;
在这里插入图片描述

3. 列描述

  • comment, 列描述, 没有实际的含义, 专门用来描述字段, 类似注释, 会根据表创建语句保存;

例:

desc 是不显示列描述信息的, 会在表创建的详细信息中显示;
在这里插入图片描述

4. zerofill

  • zerofill 零填充, 若当前值的宽度小于该字段定义时的宽度(包括符号位), 会将自动填充前导零, 使其与定义中指定的显示宽度相匹配, 类似一种格式化输出;

例:

新增字段 num4, 设置 zerofill 约束, 需要注意, 使用 zerofill 会默认添加无符号属性;
而 int(10) 中的 (10) 表示的是前导零填充至的位数, 与类型的存储大小无关;
在这里插入图片描述

将 num4 的前导零长度减少, 方便观察, 然后向表中插入数据;
在这里插入图片描述

5. 主键

  • primary key 主键, 是用来约束唯一数据的;
  • 主键不能重复, 不能为空, 一张表中只能有一个主键, 通常是整数类型;

例:

新增字段 num5, 设置为主键;
在这里插入图片描述

向表中插入数据, 主键的数据是不能重复, 为空的;
在这里插入图片描述

可以指定删除表的主键

ALTER TABLE table_name DROP PRIMARY KEY;

在这里插入图片描述

也可以为已经插入数据的表创建主键, 但只有字值不为空且不重复的字段才能被设置为主键;

ALTER TABLE table_name ADD PRIMARY KEY(column)

在这里插入图片描述

6. 自增长

  • auto_increment 自增长, 设置自增长的字段, 若插入数据时未显示设置, 会被系统自动触发, 将当前字段中已有的最大值, 进行 +1 操作, 设置; 通常和主键配合使用, 作为逻辑主键;
  • 自增长字段类型必须为整型, 并且本身必须为一个索引, 一张表最多只能有一个自增长字段;

例:

修改字段 num5 , 设置主键和自增长属性;
在这里插入图片描述

向表中插入数据, auto_increment 会根据在该字段中记录的最大值进行操作;
在这里插入图片描述

7. 唯一键

  • unique 唯一键, 是多个字段用来约束唯一性的;
  • 和主键不同, 唯一键可以存在多个, 并且允许为空, 但空字段不做唯一性比较, 主键和唯一键不冲突, 相互补充;
  • 每个唯一键字段都不允许出现重复的值 ;

例:

修改 num1, num2, num3, num4 字段, 添加唯一键;
在这里插入图片描述

向表中插入数据, 每个字段新插入的数据都不能与当前字段存在的值重复;
在这里插入图片描述

8. 外键

  • 外键用于定义主表和从表之间的关系;
  • 外键的约束主要定义在从表上, 主表则必须是有主键约束或唯一键约束字段的;
  • 当定义外键后, 要求外键字段的数据必须在主表的字段中存在或为 null;

例:

为 t1 表的 num5 字段插入数据, 并创建 t2 表, 建立从属关系, 设置 num5 为主键字段, num6 为外键字段;
在这里插入图片描述

向 t2 表中插入数据, 只能插入主键字段中存在的值;
在这里插入图片描述

也可以使用语句创建,

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段);

删除外键;

ALTER TABLE 从表名 ADD CONSTRAINT 约束名 FOREIGN KEY (外键字段) REFERENCES 主表名(主键字段) ON DELETE CASCADE;

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-07 22:20:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-07 22:20:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-07 22:20:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-07 22:20:06       20 阅读

热门阅读

  1. 使用机器学习做医学图像分类的开源项目集锦

    2024-06-07 22:20:06       9 阅读
  2. postgressql——ReadBuffer_common函数(7)

    2024-06-07 22:20:06       8 阅读
  3. MySQL优化器的SQL重写规则

    2024-06-07 22:20:06       11 阅读
  4. 前端js解析websocket推送的gzip压缩json的Blob数据

    2024-06-07 22:20:06       10 阅读
  5. C语言实现三角波生成

    2024-06-07 22:20:06       8 阅读
  6. css 清除伪类active,hover效果

    2024-06-07 22:20:06       9 阅读
  7. SHELL脚本学习(五)用户输入

    2024-06-07 22:20:06       11 阅读