MySQL-表的约束

文章目录

  • 一、空属性
  • 二、默认值
  • 三、zerofill
  • 四、列描述
  • 五、主键
    • 删除主键
    • 追加主键
    • 复合主键
    • 根据主键快速索引
  • 六、自增长
    • last_insert_id()
  • 七、唯一键
  • 八、外键
    • class表(主表)
    • student表(从表)


一、空属性

在这里插入图片描述
之前我们将表的机构,使用desc table_name查看表的结构的时候,我们并没有说明Null这一栏代表的什么意思,现在我们就来详细讲解一下。

试想一种场景,我们要统计一个班上的人员信息,我们就需要创建一个表,这个表需要保存学生的姓名,学号,地址等信息。 以实际需求来讲,我们在插入表的时候,这里的姓名和学号是一定不能为空的,所以为了约束程序员在对表插入信息的行为,就可以使用添加是否允许一个字段的数据可以被设置为NULL。

那么怎么才能约束这种空属性的行为呢?

我们只需要在创建表的时候对字段添加上 not null 就可以约束该字段不允许为NULL。
在这里插入图片描述

在这里插入图片描述
可以看到,对设置的not null的字段强行设置为null时,数据库是会给我们报错的!

所以可以通过设置null空属性来对我们表插入的一种约束!

二、默认值

在这里插入图片描述
直接教用法:

在这里插入图片描述

然后插入数据
在这里插入图片描述
可以看到,我们设置的字段如果带有default默认值,在插入时如果忽略这个字段,会默认根据我们的设置的default默认值来填充这个字段。


三、zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。

mysql> show create table tt3\G
***************** 1. row *****************
Table: tt3
Create Table: CREATE TABLE tt3 (
a int(10) unsigned DEFAULT NULL,
b int(10) unsigned DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk
1 row in set (0.00 sec)

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

int(N)中的(N)如果没有携带zerofill就没有意义了,那么它的作用是什么呢?

  • 一旦添加了zerofill,该数字类型就会变成unsigned,所以也就不能再设置为负数。
  • 我们使用select查询表中的内容时,可以发现,如果你输入的数字少于N位,输出的时候就会用0来填补位数;如果你输入的位数大于N位,就不会有任何影响。

四、列描述

列描述–comment之前我们就已经接触过了。
在这里插入图片描述
comment更像是一种注释的行为,也算是一种约束。

五、主键

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

例如下面我们要创建一个student表,要以学生的学号作为主键。

方法1在这里插入图片描述
方法2在这里插入图片描述

在插入的时候,作为主键的字段不允许插入重复的数据,否则会报错。在这里插入图片描述

删除主键

当创建好了一个表,并且创建表的时候就设置好了主键,如果又想删除这个字段的主键性质,应该怎么办?

在这里插入图片描述

追加主键

当有一个表,这个表没有主键,现在想让一个字段追加主键性质,应该怎么办?
在这里插入图片描述

复合主键

在这里插入图片描述
上面不是说 一张表中最多只能有一个主键吗? 为什么这里有两个主键?
这里的主键其实也只是一个,只不过这个表的主键添加到了两列上。

复合主键所带来的就是 在插入数据的时候,只要被设为主键的字段不同时存在相同的数据,就不会报错。
在这里插入图片描述
这里就是只要id和phone_num不同时都重复,插入就不会有问题,只有一个重复是没有关系的。

根据主键快速索引

在这里插入图片描述

六、自增长

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

  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)
  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长

在这里插入图片描述
在这里插入图片描述
我们再调用show create table student \G;
在这里插入图片描述
可以看到这里是有一个AUTO_INCREMENT=22来控制这种自增长的。

last_insert_id()

LAST_INSERT_ID() 是 MySQL 中的一个函数,它用于获取最近一次使用 AUTO_INCREMENT 字段的 INSERT 或 UPDATE 语句生成的 ID 值。这个函数非常有用,特别是在你插入数据到包含自增主键的表中,并希望立即获取这个新生成的主键值的时候。
在这里插入图片描述

七、唯一键

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

那么唯一键跟主键有什么区别呢?
主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。(其实也就是哲学意义不同)

在这里插入图片描述
对一个字段设置唯一键属性,可以用unique也可以用unique key。
我们还可以看到,primary key是默认带有not null属性的,unique key是不默认带有not null属性的。

在这里插入图片描述

八、外键

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

这里我们举一个例子就是主表为class,它有班级编号和班级名称;从表为student,它有学生的所属班级和学生的个人信息。 这里我们就可以让student表的所属班级与class表的班级编号相关联。

class表(主表)

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

student表(从表)

在这里插入图片描述
在这里插入图片描述
当从表student在向class_id插入1,2,3时都是非常顺利地插入进去的,但是当插入4的时候就报错了,这是因为我们的主表class只有1,2,3三个class_id,没有4这个班级编号,所以当从表student在插入4时才会报错,这就说明了这两个表已经建立了约束关系。

那如果我的主表想删除一行怎么办?
在这里插入图片描述
可以看到,如果我们想要删除主表中class_id=1的一行数据,数据库是不让我删的,这是因为我们的从表student也已经有对应的外键class_id=1,如果想要主表删除class_id=1这一数据行,首先就要删除所有从表外键class_id=1的数据行。

在这里插入图片描述
这也说明 主表和从表因为外键是互相约束的。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/376859.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】——数学规划模型

目录 一、线性规划(Linear Programming) 1.1 线性规划的基本概念 1.2 线性规划的图解法 模型建立: 二、整数规划(Integer Programming) 2.1 整数规划的基本概念 2.2 整数规划的求解方法 三、非线性规划&#x…

python 怎样生成窗体

通过import tkinter导入Tkinter模块,没有这句下面的都不成立了。 wintkinter.Tk(),这句是创建windows的窗口对象,注意后面的Tk,大小写。 win.title("窗口"),这段是设置窗口上的标题。 另外窗口的大小你可以通…

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型体验Jupyter Lab AI 应用样例(新手入门)

文章目录 一、引言⭐1.1下载镜像烧系统⭐1.2开发板初始化系统配置远程登陆💖 远程ssh💖查看ubuntu桌面💖 远程向日葵 二、部署LLMS大模型2.1 快速启动💖拉取代码💖下载mode数据💖启动模型对话 三、体验 内置…

提高项目透明度:有效的跟踪软件

国内外主流的10款项目进度跟踪软件对比:PingCode、Worktile、Teambition、Tower、Asana、Trello、Jira、ClickUp、Notion、Liquid Planner。 在项目管理中,确保进度跟踪的准确性与效率是每位项目经理面临的主要挑战之一。选用合适的项目进度跟踪软件不仅…

《SpringBoot 整合 Prometheus 采集自定义指标》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,如需交流&#xff…

Dataset for Stable Diffusion

1.Dataset for Stable Diffusion 笔记来源: 1.Flickr8k数据集处理 2.处理Flickr8k数据集 3.Github:pytorch-stable-diffusion 4.Flickr 8k Dataset 5.dataset_flickr8k.json 6.About Train, Validation and Test Sets in Machine Learning Tarang Shah …

树莓派pico入坑笔记,ssd1306使用

目录 关于树莓派pico和circuitpython的更多玩法,请看树莓派pico专栏 说明 后附进阶玩法:显示中文,外加简单库实现 官方模块使用 使用样例 方法说明 下面是绘图支持的方法 进阶玩法,显示中文 方法,对汉字取字模…

力扣经典题目之->移除值为val元素的讲解,的实现与讲解

一:题目 博主本文将用指向来形象的表示下标位的移动。 二:思路 1:两个整形,一个start,一个end,在一开始都 0,即这里都指向第一个元素。 2:在查到val之前,查一个&…

基于SSM的校园一卡通管理系统的设计与实现

摘 要 本报告全方位、深层次地阐述了校园一卡通管理系统从构思到落地的整个设计与实现历程。此系统凭借前沿的 SSM(Spring、Spring MVC、MyBatis)框架精心打造而成,旨在为学校构建一个兼具高效性、便利性与智能化的一卡通管理服务平台。 该系…

聚观早报 | 网宿科技推出边缘AI网关;AMD再收购AI公司

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 7月12日消息 网宿科技推出边缘AI网关 AMD再收购AI公司 谷歌Pixel 9系列将配超声波指纹 三星Galaxy Z Fold6亮相 …

[线性RNN系列] Mamba: S4史诗级升级

前言 iclr24终于可以在openreview上看预印本了 这篇(可能是颠覆之作)文风一眼c re组出品;效果实在太惊艳了,实验相当完善,忍不住写一篇解读分享分享。 TL;DR (overview) Structured State-Sp…

【TOOLS】Chrome扩展开发

Chrome Extension Development 1. 入门教程 入门案例,可以访问【 谷歌插件官网官方文档 】查看官方入门教程,这里主要讲解大概步骤 Chrome Extenson 没有固定的脚手架,所以项目的搭建需要根据开发者自己根据需求搭建项目(例如通过…

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习

机器学习一些基本概念: 监督学习 监督学习是机器学习中最常见的形式之一,它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射,这样当给出新的未见过的输入时…

vue学习day09-自定义指令、插槽

29、自定义指令 (1)概念:自己定义的指令,可以封装一些dom操作,扩展额外的功能。 (2)分类: 1)全局注册 2)局部注册 3)示例: 让表…

Android Studio启动报错:The emulator process for AVD Pixel_5_API_30 has terminated

Android Studio启动AVD报错: The emulator process for AVD Pixel_5_API_30 has terminated. 原因:安装时使用自定义安装后,修改了默认安装目录。 而avd文件默认在 C:\Users\用户名\.android 目录下。所以导致打开AVD时报错。 解决方法&am…

RABBITMQ的本地测试证书生成脚本

由于小程序要求必须访问wss的接口,因此需要将测试环境也切换到https,看了下官方的文档 RabbitMQ Web STOMP Plugin | RabbitMQ里面有这个信息 然后敲打GPT一阵子,把要求输入几个来回,得到这样一个脚本: generate_cer…

几何建模-Parasolid中GO功能使用

1.背景介绍 1.1 Parasolid和它的接口间关系 1.2 什么是GO GO全称是Graphical Output.你的程序需要在屏幕或者打印设备上显示模型数据时。在需要使用PK中的某个渲染函数时创建图形显示数据时,Parasolid会调用GO相关的函数。GO函数会输出绘图指令给你的应用程序提供…

主机安全-进程、命令攻击与检测

目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机(不含容器)上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…

Nignx配置

Nginx配置之nginx.conf文件解析及配置 1、nginx.conf文件解析 user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf;events {worker_connections 768;# multi_accept on; }http {### Basic Settings###开启文件的高效传输…

Docker搭建kafka+zookeeper以及Springboot集成kafka快速入门

参考文章 【Docker安装部署KafkaZookeeper详细教程】_linux arm docker安装kafka-CSDN博客 Docker搭建kafkazookeeper 打开我们的docker的镜像源配置 vim /etc/docker/daemon.json 配置 { "registry-mirrors": ["https://widlhm9p.mirror.aliyuncs.com"…