MySQL中表的约束

1,概念

表中一定要有各种约束,通过约束,让我们来插入数据库中的数据是符合预期的。

约束本质是通过技术手段,倒逼程序员插入正确的数据;反过来,站在MySQL的角度来单,内部已经插进来的数据,都i是符合数据约束的数据。

约束的最终目标:保证数据完整性和可预期性

为了完成以上的所有目标,就需要除了数据类型自带的范围约束以外的更多约束。

2,空属性

在MySQL里,null表示没有而不是0,' '代表空串。

两个值:null(默认的)和not null(不为空)

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

操作:在创建表后面加上not null;

 可以看到,在创建元素的时候加了 not null,在查看表的时候Null列里就会显示NO。

那么插入操作:

                   

可以看到,insert里不对加了空约束的值插入数据时系统会报错,当然可以插入空串;还有一个操作也无法插入数据:

3,默认值

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

例子:

可以看到,表中default这一列出现了值,接下来我们插入几个值测试一下:

可以看到,在我们不输入值的时候就会默认给我们输入缺省,在用户输入元素的时候,就会选择用户输入的元素插入。

可以看到,我给age设置了not null 和 default:

可以看到,就算加了not null 没对age指定插入时不会报错,且使用的时缺省值,但是指定对age插入空的话就会报错。

在我们日常使用中,not null和default是互相补充的。

not null 和 default 一般不需要同时出现,以为default本身默认值不会为空。

4,列描述

操作:comment + 内容

没有实际含义,更类似于我们平时写代码的注释:

5,zerofill

刚开始学习数据库时,很多人对数字类型后面的长度很迷茫。通过show看看text14表的建表语句:

可以看到int(11),这个代表什么意思呢?整型不是4字节码?这个11又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。age和id列就是前面插入的数据,如下:

那么我们稍微改一下id的属性,在后面加上zerofill:

可以看到,在id加了zerofill的约束之后,在100前面会补零,其总位数就是11位,正好对上

int(11)的括号里的值,那么改完属性之后里面的100的值会不会发生改变?

可以用where查到,值是不会发生改变的。

那么zerofill的作用在哪里?

可以在固定的长度中让表的宽度保持一直以维持美观,当然如果插入的位数大于zerofill定义的位数,也可以成功插入,但是超过的位数会有图出:

6,主键

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

那么我们来插入数据测试一下:

可以看到,当我们插入重复的数据的时候,系统会拦截不给我们插入:

可以看到,也不能往里面插入空值.

那么如何去掉主键?

以为整个表里就一个主键,所以直接指明要删主键系统自动就会帮我们删除。

在删除了主键之后,我们就可对其进行插入重复值的操作:

那么如何插入主键?

可以看到,我们要把表内重复的数据和null清理了才可以插入主键。

7,复合主键

我们知道,一个表中主键只有一个,但是不意味着一个表的主键只能添加一列,这种多列主键的操作叫做复合主键。

操作:

可以看到key位置的id和course位置都有pri,现在我们对他插入测试:

这就是复合主键的使用方法。

8,主键子问题:自增长

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

可以看到,id在我们不插入值时他会固定增长,要是插入的值和表中id相同则会报错。

我们可以指定某个数字开始加一:

也可以在创建表时,在表的结尾写:auto_increment = 500来改想要的id起始值:

9,唯一键(可以为空)

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以 解决表中有多个字段需要唯一性约束的问题,除了可以为空,其他操作和主键相同,如果想让值不为空,可以加not null。

关键字:unique

那么我们来插入一下数值看看:

可以看到,插入的id不能重复,但是可以为空。

主键选择了某个元素为主键,这时如果其他值也有唯一性的时候,可以用唯一键来补充,唯一键与主键并不冲突,他们是相互补充的。

例如个人id和telphone(电话),都是唯一的。

10,外键

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

语法:foreign key (字段名) references 主表(列)

我们在进行复杂的表管理时,难免不了经常有表与表之间有精密的联系,这个时候我们可以用外键来相互对两张表进行相互约束:

接下来看案例:

我们可以看到,表与表之间存在某种关联,主表是calss,从表是student,这时我们可以使用外键命令来约束,一般外键写在从表:

那么我们来插入数据测试一下:

可以看到,在符合主表的条件下可以插入,但是不符合主表约束条件的不给插入

如果从表有数据,那么主表的相关的数据不能被删掉:

希望对你们有帮助。

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

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

相关文章

YOLOv11改进策略【卷积层】| ParNet 即插即用模块 二次创新C3k2

一、本文介绍 本文记录的是利用ParNet中的基础模块优化YOLOv11的目标检测网络模型。 ParNet block是一个即插即用模块,能够在不增加深度的情况下增加感受野,更好地处理图像中的不同尺度特征,有助于网络对输入数据更全面地理解和学习,从而提升网络的特征提取能力和分类性能…

Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)

文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token(首选)2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…

(39)MATLAB生成高斯脉冲及其频谱

文章目录 前言一、MATLAB仿真代码二、仿真结果画图 前言 高斯脉冲在通信中是很重要的调制符号波形,本文使用MATLAB生成高斯脉冲,并使用FFT变换给出其频谱。 一、MATLAB仿真代码 代码如下: % 信号参数 fs 100; % 采样…

自注意力机制self-attention中的KV 缓存

在自注意力机制中,KV 缓存(Key-Value Caching)主要用于加速模型在推理阶段的计算,尤其是在处理长序列或者生成任务(如文本生成)时,这种缓存机制可以显著提高效率。 1. KV 缓存的背景 在 Trans…

【Vercel】Vercel部署项目遇到的问题

部署问题1&#xff1a; 问题详情 部署提示报错&#xff0c;vite的命令找不到 13:18:21.159 13:18:21.160npm error This is an error with npm itself. Please report this error at: 13:18:21.160npm error 13:18:221.16 npm error A complete l <https://github.com/np…

【自动驾驶汽车通讯协议】I2C(IIC)总线通讯技术详解

文章目录 0. 前言1. I2C简介2.I2C的工作原理2.1 硬件要求&#xff1a;2.2 半双工通信&#xff1a; 3. 通信时序4. 其他特性4.1 通信速率4.2 抗干扰措施4.3 注意事项 5. 在自动驾驶汽车中的应用5.1 I2C操作模式5.2 I2C的用途 6. 总结 0. 前言 按照国际惯例&#xff0c;首先声明&…

Java—类和对象习题讲解

如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 目录 习题一&#xff1a; 习题二&#xff1a; 习题三&#xff1a;.import static 能够导入一些静态方法 习题四&#xff1a; 习题五&#xff1a; 习题六&#xff1…

【刷题册】2024.10.13 - 2024.10.15

目录 一、2024.10.131.1 BC153 [NOIP2010]数字统计1.2 NC313 两个数组的交集1.2.1 思路一&#xff1a;暴力O(N^2)1.2.2 思路二&#xff1a;hash 1.3 AB5 点击消除 二、2024.10.142.1 BC64⽜⽜的快递2.2 DP4 最⼩花费爬楼梯2.3 数组中两个字符串的最⼩距离 三、2024.10.153.1 BC…

Visual Studio Code基础:使用debugpy调试python程序

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 一、安装调试器插件 在VS code中可以很轻松地调试Python程序&#xff0c;首先需要安装Python调试器插件&#xff0c;如图1所示。 图1 安装调试器插件 Python Debugge…

Redis --- 第四讲 --- 常用数据结构 --- Hash、List

一、Hash哈希类型的基本介绍。 哈希表&#xff1a;之前学过的所有数据结构中&#xff0c;最最重要的。 1、日常开发中&#xff0c;出场频率非常高。 2、面试中&#xff0c;非常重要的考点。 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。把…

导致动态代理无法使用的原因有哪些?

在动态代理的应用过程中&#xff0c;有时会遇到其无法正常使用的情况。这种现象可能源于多种原因&#xff0c;从网络配置到软件设置&#xff0c;了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策&#xff0c;以帮助用户及…

16年408计算机网络

第一题&#xff1a; 解析&#xff1a; 首先我们要清楚R1,R2,R3是路由器&#xff08;网络层&#xff09;&#xff0c;Switch是以太网交换机&#xff08;数据链路层&#xff09;&#xff0c;Hub是集线器&#xff08;物理层&#xff09;。 由此可见路由器实现的最高功能层是3层&am…

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年&#xff0c;是一款老牌知名的PHP开发集成环境工具&#xff0c;产品历经多次迭代升级&#xff0c;目前有phpStudy经典版、phpStudy V8&#xff08;2019版&#xff09;等等&#xff0c;利用phpstudy可以快速搭建一个mysql环境&#xff0c;接下来我们就开始吧…

apifox发送请求,参数类型为枚举类

背景 使用apifox模拟前端发送请求时&#xff0c;对于string、int等基本类型直接选择就ok了&#xff0c;但是后端controller的参数是枚举类的时候&#xff0c;我就有点蒙了&#xff0c;不知道应该发送什么过去&#xff0c;apifox也不可能有咱们自定义的枚举类 解决 实际上&am…

Docker 常见命令

命令库&#xff1a;docker ps | Docker Docs 安装docker apt install docker.io docker ps -a 作用&#xff1a;显示所有容器 docker logs -f frps 作用&#xff1a;持续输出容器名称为frps的日志信息&#xff08;监控&#xff09; docker restart frps 作用&#xff1a;重…

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Java项目:160 基于springboot物流管理系统(PPT+论文+说明文档)

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 物流管理系统有管理员和用户两个角色。 ​ 管理员功能有个人中心&#xff0c;用户管理&#xff0c;车辆信息管理&#xff0c;公告信息管理&#xff…

实现MySQL异地多活场景

作为现代化的互联网企业 &#xff0c;最怕的是什么 &#xff1f;是意外&#xff01;由各种意外导致的数据库问题&#xff0c;磁盘问题、网络问题、人员误操作问题等等&#xff0c;这些问题都可能导致数据不可用或者丢失&#xff0c;造成重大损失。 因此&#xff0c;很少会有企…

运维:winserver服务器添加nginx开机自启动

前言 发现之前做的一版windows开机自启动任务对nginx的启用无效&#xff0c;因此这里给出针对性的配置&#xff0c;以实现winserver服务器添加nginx开机自启动目的。 先前的配置方案&#xff1a;windows部署开机自启动服务_windows 服务中添加自行启动任务-CSDN博客 方案 1、进…

[Web安全 网络安全]-中间件解析漏洞(iis nginx apache tomcat)

文章目录&#xff1a; 一&#xff1a;iis 前言 a 不同版本和安装 b iis5.x-iis6.x c iis7.5 1.目录解析漏洞 2.短文本漏洞 3.PUT上传漏洞 4.RCE-CVE-2017-7269 5.HTTP.SYS远程代码执行(MS15-034) 6.CGI-PHP解析漏洞 7.基于文件名的解析漏洞 8.基于文件夹的解析漏…