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

初识MYSQL —— 表的约束

前言

了解了mysql中是数据类型,我们会发现,数据类型本身也是一种约束,确保数据库中存储的数据合法性。

但是数据类型约束单一,还需要一些额外的约束来确保数据的合法性,从业务逻辑角度上保证数据的正确性。

空属性

在创建表时,我们可以设置字段(列)是否能够为null。(默认是null,设置not null字段不能为空)

数据库默认字段都是字段为空,(在实际应用中,尽量不要让字段为空)

例如 : 创建一个课表,其中记录了课程名和教室号(还包含其他属性,时间、教师等等)。

在逻辑上理解:

  • 如果课程名为空,就不知道要上什么课;
  • 如果教室号为,就不知道要去哪里上课。

在设计表时,就要加上一定的限制(不为空),这样错误的数据就不能插入到表中。(表中的数据一定是正确的
在这里插入图片描述

这里如果忽略字段,错误是没有default值(默认值);

默认值

对于默认值,简单来说就是:用户在插入数据时,忽略字段,此时就会使用默认值。(不设置默认值,默认值为NULL

在这里插入图片描述

在插入数据时,如果用户给该字段赋值,就使用用户输入的值;

如果没有给该字段赋值,就使用默认值(default

此外,在插入时,如果忽略字段并且没有默认值,插入就会报错。(设置not null就没有默认值

列描述

comment列描述,没有实际含义,用来描述字段。

在这里插入图片描述

zerofill

通过学习数据库相关操作,我们知道charvarcharfloatdecimal后面括号中数字的含义;但是整数类型(如int)后面括号中数字的含义又是什么意思呢?

在这里插入图片描述

没有设置zerofill的情况下,该数字是没有任何意义的。

zerofill的作用就是0填充,而int后面括号内的数字则表示位数(数据总位数)。

例如,int(10),数据100查询出来的就是:0000000100

在这里插入图片描述

可以看到,int(4)设置了zerofill,数据不足4为就在前面填充0

数据超过了4位,就显示原数据。

默认情况下有符号int后面数字是11,无符号int后面数字是(10)

主键

主键:primary key,唯一约束该字段里面的数据,不能重复,不能为空;一张表中只能存在一个主键

1. 创建主键

可以在创建表时,直接在字段上指明主键:

id tinyint unsigned primary key

也可以在创建表时最后指明主键:

primary key(id)

在这里插入图片描述

这里创建表时,在字段后面指明主键,而使用show create table查看创建表语句,可以发现还是在字段最后,表明主键。

如果在创建表时,没有指明主键,也可以追加主键

alter table 表名 add primary key(字段名)

2. 删除主键

一张表只能存在一个主键,在添加主键时需要指明字段,而在删除主键时不需要指明主键字段。

alter table 表名 drop primary key

3. 主键约束

主键对应的字段不能重复,一旦重复,操作失败。

在这里插入图片描述

4. 复合主键

一张表只能有一个主键,但是主键不一定是某一个字段,主键也可以是多个字段组成(复合主键)。

例如:学生选课成绩表,一个学生会选多门课程,一门课程也会有多名学生选择。(在这张表中,主键就应该是学生id和课程id)

自增长

auto_increment,当对应字段在插入时没有给值,系统就会从当前字段已有数据的最大值+1得到一个新的值。

  • 一个字段要做自增长,前提是该字段是一个索引
  • 子增长字段必须是整数
  • 一张表只能存在一个自增长字段

在这里插入图片描述

唯一键

主键可以保证一张表中某一字段的唯一性,主键只能用一个;

但是在实际应用场景中,一张表中往往有多个字段需要保证唯一性,这是就需要唯一键来保证字段的唯一性约束。

唯一键和主键类似,唯一键可以为空,可以存在多个NULLNULL不做比较。

定义唯一键约束,需要使用unique关键字。

在这里插入图片描述

外键

主键是一张表中的唯一字段,但是在现实场景中,在多张比表中可能存在统一字段,这些表中就存在一定的关联。

例如:班级信息表和学生信息表,其中都应该存在班级编号这一字段。

外键:用来定义主表和从表之间的关系;

外键约束主要定义在从表上,主表则对应字段必须是有 主键或者 唯一键约束。

语法

foreign key (字段名) references 主表()

主表是被引用的表,从表是引用别人的表。

外键的使用

这里定义两张表:学生表、班级表。

在这里插入图片描述

学生表中存在字段class_id,该字段引用班级表中字段id

这里班级表是主表,而学生表是从表。

在这里插入图片描述

在定义表结构时,要先创建主表,再创建从表(定义外键时,主表一定是已经存在的)

创建完表结构之后,向表中插入数据:

可以直接向主表cla中插入数据;

向从表中插入数据时,如果外键字段的数据在主表中不存在,就会插入失败

在这里插入图片描述

所以,外键约束(Foreign Key)是保证两张表之间数据一致性的一种规则。

在上述操作中,向stu表中插入数据,但是主表cla中不存在班级id为15的数据;插入失败。

就相当与现在有一个学生,它是15班的,但是在学校中根本就不存在15班。

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

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

此外,要删除主表中的某条数据,id字段数据为10,如果从表中存在外键为10的数据,就无法删除。

http://www.dtcms.com/a/462139.html

相关文章:

  • mysql存储微信Emoji表情问题
  • DzzOffice 通知功能(notification_add)调用
  • 西安手机网站建设公司排名安徽房产网站建设
  • 杭州强龙网站建设电话广西桂林天气预报7天
  • autosar
  • LinkMate 智能会议室系统:基于 Qt / QML / WebRTC / FFmpeg / Whisper / OpenGL 的实时音视频会议平台
  • JavaScript编程工具有哪些?老前端的实用工具清单与经验分享
  • 企业营销网站服务器1g够wordpress 电影网站
  • 360°全景视频 数据集Dataset
  • 项目愿景缺乏共识会带来哪些风险
  • 网站服务器vps温州做网站哪里好
  • 分片并发上传实现
  • JavaWeb后端实战(IOC+DI)
  • php网站模板制作工具昆明网架公司
  • 甘肃省住房和城乡建设厅网站网站域名登录
  • lazarust中SqlConnector的使用
  • 美国银行与Anchorage合作推动稳定币发展,平台XBIT在去中心化交易所领域发力
  • Gemini 2.5如何通过视觉理解,告别脆弱的UI测试脚本
  • 【星海出品】ASCII
  • 青州网站建设优化排名找工程包工平台app
  • 哪些网做网站比较好网站产品关键词导出
  • python学习之单例模式和魔法方法属性
  • 网站地址英文网站视频与服务器的关系
  • 优秀电商设计网站有哪些免费的推广平台有哪些
  • 【论文阅读】LANGUAGE MODELS CAN LEARN FROM VERBAL FEEDBACK WITHOUT SCALAR REWARDS
  • 怎么管理网站的内容吗网站建设与实现毕业答辩ppt
  • 苏州做网站的哪个公司比较好PS做图标兼职网站
  • 【Flutter】约束错误总结(Constraint Error 全面解析)
  • 2025年Flutter状态管理新趋势:AI友好度成为技术选型第一标准
  • WinPython下载安装和使用教程(附安装包,图文并茂)