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

【MySQL】表的约束

文章目录
  • 1. 空属性 null
  • 2. 默认值 default
  • 3. 描述 comment
  • 4. zerofill
  • 5. 主键、复合主键
    • 5.1 主键
    • 5.2 复合主键
  • 6. 自增长 auto_increment
  • 7. 唯一键 unique
  • 8. 外键 foreign key

在这里插入图片描述
在上一篇的内容中,我们学习了MySQL的数据类型,数据类型本身就是一种约束。
但是只有数据类型约束是不够的。

1. 空属性 null

  • null(默认的)
  • not null

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

在这里插入图片描述

设置了非空约束后,空值就无法插入进表中

在这里插入图片描述

2. 默认值 default

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

如果用户不指定值,但设置了默认值,则使用默认值; 未设置默认值,MySQL设置默认值为NULL。
在这里插入图片描述
在上面的结构中,gender一列我既设置了非空,又设置了默认值,这样有意义吗?

  • 如果一列指定了非空约束
    • 设置了默认值,用户没有明确指定插入的值,则使用default的值,插入成功;
    • 没有设置默认值,用户未明确指定插入的值,插入失败。
  • null 与默认值二者不冲突,是相互补充的
  • not null 和 defalut一般不需要同时出现,因为default本身有默认值,不会为空

3. 描述 comment

列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或数据库管理员来进行了解。

通过desc查看不到注释信息,通过show可以查看到
在这里插入图片描述

4. zerofill

在我们属性的类型设置为 int 类型时,编译器会默认给我们有华为 int(10),后面带数字是什么意思呢?为什么mysql会默认加上?

  • int的范围是21亿多,10位数刚好可以表示几十亿。
  • 有符号数,则默认是11位

一般我们查看时,位数是不会全显示的。若设置了 zerofill,且显示的宽度小于()中指定长度,则使用0填充。
在这里插入图片描述

要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是原来插入的值。补0只是设置了zerofill属性后的一种格式化输出而已

在这里插入图片描述

5. 主键、复合主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型

5.1 主键

  • 主键可以在创建表的时候直接在字段上指定主键
  • 当表创建好以后但是没有主键的时候,可以再次追加主键
  1. 建表指定主键

在这里插入图片描述
也可在创建表的最后指定主键

在这里插入图片描述

  1. 建表追加主键

在这里插入图片描述

  1. 删除主键

在这里插入图片描述

5.2 复合主键

一张表只能有一个主键,但是不意味着一个表的主键,只能添加给一列。

当主键添加给多列时,就叫做复合主键;

复合主键只要不是所有的列全都冲突,则可以添加成功。

举个例子:
学生选课时,一名学生可以选则不同的课程,但是每门课程他只能选择一次,此时就可以将学号与课程设置为复合主键,防止冲突。

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键。

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

6. 自增长 auto_increment

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。

自增长的特点:

  • 任何一个字段要做自增长,前提是本身是一个索引(索引部分再详细讲 )
  • 自增长字段必须是整数 ,默认从1开始,也可以自己设置
  • 一张表最多只能有一个自增长

在这里插入图片描述

在插入后可通过 last_insert_id() 获取上次插入的 AUTO_INCREMENT 的值(批量插入获取的是第一个值)

在这里插入图片描述

7. 唯一键 unique

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键,唯一键就可以解决表中有多个字段需要唯一性约束的问题。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较

唯一键和主键的区别:
主键更多的是标识唯一性的;而唯一键更多的是保证在业务上,不要和别的信息出现重复(如电话号码,学号,工号等)。

在这里插入图片描述

8. 外键 foreign key

在这里插入图片描述
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须要有主键约束或unique约束。

当定义外键后,要求外键列数据必须在主表的 主键列存在为null

foreign key (列名) references 主表(列名)

必须在所有字段后面指定:

在这里插入图片描述

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

两张表在业务上是有相关性的,但是在业务上没有建立约束关系,那么就可能出现问题。

建立外键的本质其实就是把相关性交给mysql去审核了,提前告诉mysql表之间的约束关系,那么当用户插入不符合业务逻辑的数据的时候,mysql不允许你插入。

相关文章:

  • 深入剖析C语言中#和##的作用
  • 用大白话解释基础框架Spring Boot——像“装修套餐”一样简单
  • -bash: lsof: command not found
  • Si24R2E:2.4GHz,内置MCU的有源RFID标签芯片特点
  • 使用Java操作Excel
  • Golang快速上手02/Golang基础
  • Nginx将tomcat项目转发。将非80/443端口口转为80或443及https
  • mysql架构查询执行流程(图解+描述)
  • WPF高级 | WPF 3D 图形编程基础:创建立体的用户界面元素
  • ChatGPT 提示词框架
  • mysql数据迁移到SQLserver: 构建数据迁移脚本
  • 2025年网校系统源码开发趋势:技术革新的教育培训APP搭建实战
  • WPF11-附加属性
  • 推荐律师事务管理系统(SpringCloud+mysql+rocketmq+deepseek)
  • Qt 中,**信号与槽(Signals Slots)机制
  • docker通用技术介绍
  • 基于Python socket库构建的基于 P2P 的文件共享系统示例
  • 深入理解消息队列
  • 【TypeScript】TypeScript的应用实例
  • 重磅 | Cloud Ace 推出 GenAIOps 服务:加速企业生成式 AI 商业落地
  • 天津网站建设工作室/google应用商店
  • 仿历史网站模板下载/网络推广网站程序
  • led动态视频网站建设/网站接广告
  • dw外部网站链接怎么做/看到招聘游戏推广员千万别去
  • 洞口网站建设/网站广告策划
  • 做企业网站一般多少钱/百度公司官网入口