【MySQL】增删改查-进阶(一)

目录

🌴数据库约束

🚩约束类型

🚩NOT NULL

🚩UNIQUE

🚩DEFAULT

🚩PRIMARY KEY

🚩FOREIGN KEY

🚩CHECK

 🎄表的设计

🚩一对一

🚩一对多

🚩多对多


🌴数据库约束

约束可以理解成,数据库提供的一种针对数据的合法性,验证的一种机制。

数据库中经常会涉及到大量的数据,也会涉及到大量的增删改查操作,如果数据库不提供这样的校验机制,就只能靠程序员手工来保证数据是靠谱的,但是一旦涉及到人工基本认为是不靠谱的,所以通过程序自动化的检查,才是更科学的。

🚩约束类型

NOT NULL - 指示当前列不能存储 NULL 值。

UNIQUE - 保证某列的每行必须有唯一的值(不能重复)。

DEFAULT - 规定没有给列赋值时的默认值,没有设置即为NULL。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。称为主键,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性,称为外键。

CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句。但是MySQL5.7不能使用

🚩NOT NULL

不能为空!

不加not null:

加上not null:

当我们插入空值时,就会报错:

不只是针对插入操作,对于修改操作也是一样的:

🚩UNIQUE

确保唯一性!

不加unique约束:可重复插入

加上unique约束:

加上unique之后效率就会降低,但是对数据的校验就更严格了!

🚩DEFAULT

设置默认值!设置好了之后,后续进行指定列插入的时候,未被指定的列就会保持默认值。

当前这张表中,默认的默认值就是NULL

当我们指定列插入时,未被指定的列默认值就是NULL:

修改默认值:

注意:unique和default是有一定冲突的,unique是不能重复,但是设置default之后,当多个未被指定列插入时就为空,这是重复的,使用是注意两个用法!

🚩PRIMARY KEY

主键:一条记录的身份标识

例如,在C语言中,我们可根据两个变量的地址来判断是否是同一个变量,这个地址就是身份标识。在MySQL中,通过主键来判断是否为同一条记录。

在MySQL中,主键的两个要求:

  1. 不能为空
  2. 不能重复

设置主键: 

插入数据:

一般给表设置主键时,都是使用数字(整数形式),很少使用字符串。且一个表只能有一个主键。

 primary key = not null + unique,即创建主键时还可以直接使用not null + unique的形式创建:

上述谈到,一般主键会使用整数id作为主键,但是在实际开发中,id的值该如何选择,如何确定你插入id的值是唯一的呢?

自增主键:mysql中提供了自增主键,每次插入新的数据,都可以把主键基于上一条数据的主键 +1

设置自增主键:

插入数据:此时就不需要手动指定主键了

也可以手动插入,不一定非要使用自增主键:

此时,当我们再次使用自增主键插入时,得到的id就是101了:

当我们删掉101这条数据时,再次使用自增主键插入id为102:

自增主键的其他场景:

🚩FOREIGN KEY

外键约束,两张表直接的关联关系,例如学生表和班级表。

不指定外键约束:

创建班级表

创建学生表:原则上来说,插入学生表的数据中的classId,必须要在class表中存在,插入的学生才是有意义的(从属于某个班级),但是呢插入了一个班级为100这样的数据,正常来说是不能插入成功,这里却插入成功了。这就是一条有问题的数据

加上外键约束:

创建班级表

创建学生表(指定外键约束)

在学生表中插入数据,会受到外键约束的制约

在学生表中修改数据,也会受到外键约束的制约

修改父表:

尝试直接删除父表中的数据,发现这里的删除操作成功了,但是这里所删除的classId为3的班级,其实并没有被学生表所引用,我们在上述将id为3的这条记录进行了修改到classId为2的班级,所以能删除成功!

删除另一个班级,这里就删除失败了,即父表也受子表的约束!他们是双向的!

修改即一样!

创建外键的注意事项:

删除表时,现删除子表,再删父表

创建表,发现此时却创建不了了,是因为引用的父表这一列要么是主键,要么是unique,要具有唯一性,由于这里没有设置主键,即失败。

🚩CHECK

 🎄表的设计

给你一个需求场景,能够结合场景把表如何创建给写出来,有几个表,每个表是干啥的,每个表里都有哪些属性,这些属性之间是否有一些关联关系......

设计表的通用步骤:

  • 1.理清楚需求场景中的"实体"(entry)有哪些.

实体即为面向对象中的对象,所谓对象也就是针对实际问题中的一些实际情况,在代码中进行"抽象的表示"。

所谓抽象,信息量越多越具体,信息量越少越抽象。

  • 2.理清楚实体之间的关系

大致分为以下三种:

🚩一对一

一个人只有一个身份证号,一个身份证号对应一个人

🚩一对多

一个班级包含多个学生,一个学生只能有一个班级

🚩多对多

一个学生对应多个课程,一个课程对应多个学生

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb合集07-MyBatis

七、MyBatis MyBatis是一款优秀的持久层(dao)框架,用于简化JDBC的开发。 MyBatis本是Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。 官网:https://mybati…

人工智能学习框架的探索与应用

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

Spark:DataFrame介绍及使用

1. DataFrame详解 DataFrame是基于RDD进行封装的结构化数据类型,增加了schema元数据,最终DataFrame类型在计算时,还是转为rdd计算。DataFrame的结构化数据有Row(行数据)和schema元数据构成。 Row 类型 表示一行数据 …

中文情感分析课程设计

中文情感分析 中文情感分析的实质是文本分类问题,本项目分别采用CNN和BI-LSTM两种模型解决文本分类任务,并用于情感分析,达到不错的效果。 两种模型在小数据集上训练,在验证集的准确率、号回率及F1因子均接近90% 项目设计的目标…

短链接能有多短?颠覆你的认知

在我们平时的网络活动中,经常会遇到需要将长链接缩短的情况。有细心的小伙伴会发现,平时收到的短信里面都会携带一个很短的链接,这就是将长链接缩短之后的效果。 缩短链接的主要目的有两个:一是使链接更加简洁美观;二…

基于SSM的网上拍卖平台

文未可获取一份本项目的java源码和数据库参考。 1. 选题背景 网络在人们的日常生活所占的比重越来越重,人们对网络信息的依赖性也越来越高。为用户提供良好的网络服务,可以给用户带来便捷的同时,也为网络服务开发商带来了客观的收益。当前&…

4-20mA采集卡 USB温度采集卡 USB热电偶采集 USB5601多功能采集卡

阿尔泰科技 型号:USB5601 概述: 产品外形图: 外形尺寸图: 主要指标: 8 路差分模拟量采集、8 路隔离数字量输入和 8 路隔离数字量输出 要了解更多技术和产品知识关注我吧!

最大公共子序列c++

最大公共子序列c 概念基本的概念 递归算法代码优化map基础优化代码 概念 基本的概念 子序列: 由原序列中若干个元素组成,元素可以不连续,但和原序列的顺序一致。最长公共子序列: 一个序列即是甲序列的子序列,也是乙序…

DNDC模型下载与安装;土壤碳储量;点尺度和区域尺度模拟;气象数据、土地数据、土壤数据处理、农田减排潜力分析、温室气体排放分析等

实现美丽中国建设目标,“双碳”行动将会发挥非常重要的作用。碳循环的精确模拟是实现“双碳”行动的关键。DNDC(Denitrification-Decomposition,反硝化-分解模型)是目前国际上最为成功的模拟生物地球化学循环的模型之一&#xff0…

spark:Structured Streaming介绍

文章目录 1. Structured Streaming介绍1.1 实时计算和离线计算1.1.1 实时计算1.1.2 离线计算 1.2 有界和无界数据 2. 简单使用3. 编程模型4. 数据处理流程4.1 读取数据Source4.1.1 文件数据处理 4.2 计算操作 Operation4.3 数据输出 Sink4.3.1 输出模式4.3.2 指定输出位置4.3.3…

Html/Vue浏览器下载并重命名文件

Html/Vue浏览器下载并重命名文件 row是上方图片的数据对象 download(row) {const link document.createElement(a);link.style.display none;// 设置下载地址link.setAttribute(href, row.url);// 设置文件名(这里可以重新设置名字,下载之后的文件就是你重新命名…

【数据结构与算法】链表(上)

记录自己所学&#xff0c;无详细讲解 无头单链表实现 1.项目目录文件 2.头文件 Slist.h #include <stdio.h> #include <assert.h> #include <stdlib.h> struct Slist {int data;struct Slist* next; }; typedef struct Slist Slist; //初始化 void SlistI…

死锁和活锁和线程饥饿

死锁 死锁是指两个或两个以上的线程在执行过程中&#xff0c;因争夺资源而造成的一种相互等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。 原因&#xff1a;两个或两个以上的线程共同访问两个或多个相同的资源&#xff08;如对象锁&#xff09;&#…

Unity使用TriangleNet参考

TriangleNet下载如下&#xff1a; TriangleNet 效果如下&#xff1a; 代码参考如下&#xff1a; using System.Collections.Generic; using UnityEngine; using TriangleNet.Geometry;public class TestTriangleNet : MonoBehaviour {[SerializeField]Material material;voi…

耳夹式耳机哪个品牌音质好?五大优质音质的耳夹式耳机!

随着健康理念的传播&#xff0c;运动健身成为大众追求高品质生活的重要部分。传统耳机在运动场景下有局限性&#xff0c;稳定性差、清洁不便&#xff0c;影响运动体验。这时&#xff0c;耳夹式耳机出现&#xff0c;以独特设计和传音方式重塑运动音乐享受&#xff0c;无需入耳&a…

游戏推荐业务中基于 sentinel 的动态限流实践

作者&#xff1a;来自 vivo 互联网服务器团队- Gao Meng 本文介绍了一种基于 sentinel 进行二次开发的动态限流解决方案&#xff0c;包括什么是动态限流、为什么需要引入动态限流、以及动态限流的实现原理。 一、背景 1.1 当前的限流方案 随着互联网的发展及业务的增长&…

Flythings学习(四)串口通信

文章目录 1 串口编程基本步骤1.1 打开串口1.2 配置串口 1.3 读串口1.4 发送串口1.5 关闭串口 2 综合使用3 如何在软件上保证串口稳定通信4 flythings中的串口通讯5 协议接收部分使用和修改方法6 通讯协议数据怎么和UI控件对接 1 串口编程基本步骤 串口通信有5个步骤 1.打开串口…

Telegram——Bot 机器人/小程序入门指南

一、Bot 介绍 在 TG 中,机器人可以用于接收和发送消息、管理群组(在有权限的情况下可以封禁用户、删除消息、置顶消息等)、通过API进行编程操作、使用 Inline 查询功能在不同的聊天室中提供查询服务、创建自定义键盘按钮、发出账单并收款、接入小程序游戏等。 然而,Bot 默…

单片机中断概念以及示例

中断允许控制寄存器 CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。 EX0(IE.0)&#xff0c;外部中断0允许位&#xff1b;EX01&#xff0c;打开外部中断0中断&#xff1b;EX00关闭外部中断0中断。 ET0(IE.1)&#xff0c;定时/计数器T0中断允许…

沪尚茗居装修秘籍:嵌入式蒸烤箱,让厨房生活更精彩

在装修厨房时&#xff0c;选择一款合适的嵌入式蒸烤箱不仅能提升烹饪效率&#xff0c;还能为厨房增添一份现代感。沪尚茗居深知用户对厨房电器的需求&#xff0c;从实际出发&#xff0c;为用户推荐选购嵌入式蒸烤箱的实用技巧&#xff0c;让厨房生活更加美好。    首先&…