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,一经查实,立即删除!

相关文章

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; % 采样…

【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自身的键值对就是通过哈希的方式来组织的。把…

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;接下来我们就开始吧…

【计算机网络 - 基础问题】每日 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、进…

记录一个Ajax发送JSON数据的坑,后端RequestBody接收参数小细节?JSON对象和JSON字符串的区别?

上半部分主要介绍我实际出现的问题&#xff0c;最终下面会有总结。 起因&#xff1a;我想发送post请求的data&#xff0c;但是在浏览器中竟然被搞成了地址栏编码 如图前端发送的ajax请求数据 如图发送的请求体&#xff1a; 很明显是keyvalue这种形式&#xff0c;根本就不是…

基于Java+SpringBoot+Vue的在线文档管理系统的设计与实现

基于JavaSpringBootVue的在线文档管理系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&…

【算法题解】二分查找的经典问题解析

文章目录 什么是二分&#xff1f;关于二分的一些题目1.分巧克力解题思路编写代码 2.数组中数值和下标相等的元素3.0到n-1中缺失的数字4.数列分段 II解题思路编写代码 总结 什么是二分&#xff1f; 二分是一种思想&#xff0c;用于有序数组中快速查找目标元素。 用动图展示一下…

信息系统的生命周期

信息系统是面向现实世界人类生产、生活中的具体应用&#xff0c;是为了提高人类活动的质量、效率而存在的。信息系统的目的、性能、内部结构和秩序、外部接口、部件组成等由人来规划&#xff0c;它的产生、建设、运行和完善构成一个循环的过程&#xff0c;这个过程遵循一定的规…

【vue】指令补充+样式绑定+计算属性+侦听器

代码获取 知识总结 ⼀、指令补充 1.指令修饰符 1.1 什么是指令修饰符&#xff1f; 所谓指令修饰符就是让指令的 功能更强⼤&#xff0c;书写更便捷 1.2 分类 1.2.1 按键修饰符 keydown.enter&#xff1a;当enter键按下时触发 keyup.enter&#xff1a;当enter键抬起时触…

Jmeter脚本录制:抓取IOS手机请求包

现在移动端的项目越来越多&#xff0c;今天给大家介绍一下&#xff0c;在IOS下Jmeter如何抓包。 1、电脑连上wifi 2、Jmeter中配置“HTTP代理服务器” 1)启动Jmeter&#xff1b; 2)“测试计划”中添加“线程组”&#xff1b; 3)“测试计划”中添加“HTTP代理服务器”&…