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

【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.理清楚实体之间的关系

大致分为以下三种:

🚩一对一

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

🚩一对多

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

🚩多对多

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

相关文章:

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

目录 🌴数据库约束 🚩约束类型 🚩NOT NULL 🚩UNIQUE 🚩DEFAULT 🚩PRIMARY KEY 🚩FOREIGN KEY 🚩CHECK 🎄表的设计 🚩一对一 🚩一对多 …...

MacOS RocketMQ安装

MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客:https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网,…...

OpenCV高级图形用户界面(6)获取指定窗口中图像的矩形区域函数getWindowImageRect()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 提供窗口中图像的矩形区域。 该函数 getWindowImageRect 返回图像渲染区域的客户端屏幕坐标、宽度和高度。 函数原型 Rect cv::getWindowImage…...

SpringColoud GateWay 核心组件

优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…...

5.计算机网络_抓包工具wireshark

安装 Linux中安装wireshark: sudo apt-get install wireshark Linux中执行wireshark: sudo wireshark 使用 注意:只有与外网交互的数据才可以被wireshark抓到,本机回环的数据不会被抓到 实验内容: 使用nc命令…...

基于Java的车辆管理系统的设计与实现-计算机毕业设计源码41727

摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对车辆管理系统等问题,对车辆管理…...

在软件开发中低耦合和高内聚是什么,如何实现,请看文章

软件开发中,“低耦合”和“高内聚”是设计原则,用于提高系统的可维护性、可扩展性和可重用性。下面我会详细解释这两个概念及其带来的好处和规避的坏处。 低耦合(Low Coupling) 定义: 低耦合指的是模块之间的依赖关系…...

关于MyBatis-Plus 提供Wrappers.lambdaQuery()的方法

实例&#xff1a; private LambdaQueryWrapper<XXX> buildQueryWrapper(XXXBo bo) { Map<String, Object> params bo.getParams(); LambdaQueryWrapper<XXX> lqw Wrappers.lambdaQuery(); lqw.eq(bo.getOrgId() ! null, XXX::getOrgId, bo.getOrgId()); lq…...

C++——vector的了解与使用

目录 引言 vector容器的基本概念 1.功能 2.动态大小 3.动态扩展 vector的接口 1.vector的迭代器 2.vector的初始化与销毁 3.vector的容量操作 3.1 有效长度和容量大小 (1)使用示例 (2)扩容机制 3.2 有效长度和容量操作 (1)reserve (2)resize 4.vector的访问操作…...

Ubuntu设置静态IP地址

Ubuntu如果是最小安装&#xff0c;没有图形界面&#xff0c;需要配置静态IP&#xff0c;该怎么操作呢&#xff1f; Netplan 是最新版 Ubuntu 的默认网络管理工具。Netplan 的配置文件使用 YAML 编写&#xff0c;扩展名为 .yaml。 注意&#xff1a;配置文件中的空格是语法的一部…...

力扣349.两个数组的交集

题目链接&#xff1a;349. 两个数组的交集 - 力扣&#xff08;LeetCode&#xff09; 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,…...

FreeRTOS - 软件定时器

在学习FreeRTOS过程中&#xff0c;结合韦东山-FreeRTOS手册和视频、野火-FreeRTOS内核实现与应用开发、及网上查找的其他资源&#xff0c;整理了该篇文章。如有内容理解不正确之处&#xff0c;欢迎大家指出&#xff0c;共同进步。 1. 软件定时器 软件定时器也可以完成两类事情…...

Python的Atlassian第三方库的详细介绍

atlassian-python-api 是一个用于与 Atlassian 生态系统进行交互的 Python 库&#xff0c;支持与多种 Atlassian 工具&#xff08;如 Jira、Confluence、Bitbucket 等&#xff09;进行 API 调用。它简化了 REST API 的调用&#xff0c;提供了高层次的抽象&#xff0c;方便开发者…...

Java中的基本循环结构详解

在Java编程中&#xff0c;循环是控制流的重要组成部分&#xff0c;用于重复执行一段代码。Java提供了三种基本的循环结构&#xff1a;for循环、while循环和do-while循环。本文将详细介绍这三种循环的语法和使用场景&#xff0c;并通过示例代码展示其应用。 一&#xff0c;for …...

关于Git Bash中如何定义alias

一、在一次临时Bash会话中使用alias 在Bash中直接输入alias xxdddd&#xff0c;xx为对应要执行的命令的缩写&#xff0c;dddd为要执行的命令&#xff0c;如alias ddcd /d&#xff0c;输入完成后&#xff0c;在Bash中输入dd&#xff0c;即可切换至D盘。 此种设置方式&#xff…...

luckfox1106初次使用

luckfox1106初次使用 下载rk驱动 https://files.luckfox.com/wiki/Luckfox-Pico/Software/DriverAssitant_v5.12.zip 安装驱动 SD 卡烧录工具 https://files.luckfox.com/wiki/Luckfox-Pico/Software/SocToolKit_v1.98_20240705_01_win.zip 右键以管理员方式运行...

ab命令深入解析:ApacheBench性能测试工具

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 引言 在Web开发和运维领域&#xff0c;性能测试是评估服务器和应用性能的重要手段。ApacheBench&#xff08;简称ab&#xff09;是Apache HTTP服务器自带的…...

VSCode创建VUE项目(二)前端登录页面

一.创建登录页面 代码&#xff1a; <template><div class"login-container dis-h"><div class"login-form dis-h"><div class"dis-v left"><span> 欢迎~ </span><span> VUE 新世界 </span>&l…...

centos 8.4学习小结

1.权限委派 2.vim快捷方式 2.1非正常关闭文本处理方式 2.2快捷方式 2.3TAB键补齐安装包 [ rootcloud Packages]# rpm -ivh bash-completion-2.7-5.el8.noarch.rpm 2.4#history 查询历史记录 [rootcloud ~]# vim /etc/profile HISTSIZE1000&#xff08;默认保存1000条历史记…...

AI 设计工具合集

&#x1f423;个人主页 可惜已不在 &#x1f424;这篇在这个专栏AI_可惜已不在的博客-CSDN博客 &#x1f425;有用的话就留下一个三连吧&#x1f63c; ​ 前言: AI 视频&#xff0c;科技与艺术的精彩融合。它借助先进的人工智能技术&#xff0c;为影像创作带来全新可能。本书…...

eMarker芯片如何保障100W+PD充电的安全

一、100W以上充电的独特安全挑战当充电功率跨过100W门槛&#xff0c;安全风险的复杂性和严重性都进入了全新量级。根据UL 62368-1标准&#xff0c;100W是PS2与PS3能量源等级的分界线——PS3能量源等级&#xff08;100W及以上&#xff09;意味着设备和线缆发生点火和火灾蔓延的风…...

mysql安装后忘记root密码如何找回_单用户模式重置密码方法

跳过权限验证启动MySQL是唯一可行入口&#xff1b;需用--skip-grant-tables绕过校验&#xff0c;再根据版本&#xff08;5.7用UPDATEPASSWORD()&#xff0c;8.0用ALTER USER&#xff09;改密并FLUSH PRIVILEGES&#xff0c;最后务必清除配置重启服务。跳过权限验证启动 MySQL 是…...

代码随想录算法训练营第六天 | Leetcode 454.四数相加 | 383.赎金信 | 15.三数之和 | 18.四数之和

day6 – 哈希表part02 454.四数相加 力扣题目链接&#xff1a;454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09;文章讲解&#xff1a;第454题.四数相加II | 哈希表 | map | 统计查找 | 代码随想录视频讲解&#xff1a;学透哈希表&#xff0c;map使用有技巧&#xff…...

来画AI漫剧软件2025推荐,创新故事创作工具引领未来

来画AI漫剧软件2025推荐&#xff0c;创新故事创作工具引领未来一、引言随着科技的快速发展&#xff0c;越来越多的创新工具正在改变我们的创作方式。来画AI漫剧软件作为一款集成了人工智能技术的故事创作工具&#xff0c;正逐渐成为创作者们的新宠。本文将从多个维度详细解析来…...

2.2MySQL 在电商全链路中的高频应用场景

2.2MySQL 在电商全链路中的高频应用场景 开篇&#xff1a;为什么电商行业90%的业务数据都存在MySQL里 我第一次接触电商数据时&#xff0c;公司用的是Oracle&#xff0c;听说一年授权费几百万。后来跳槽到一家创业公司&#xff0c;用的是MySQL&#xff0c;免费、轻量、跑得也挺…...

8大网盘直链解析终极指南:免费解锁5倍下载速度的完整解决方案

8大网盘直链解析终极指南&#xff1a;免费解锁5倍下载速度的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

OpenClaw+千问3.5-9B智能监控:服务器日志异常自动告警

OpenClaw千问3.5-9B智能监控&#xff1a;服务器日志异常自动告警 1. 为什么需要智能日志监控&#xff1f; 去年我负责维护的一个内部项目突然在凌晨崩溃&#xff0c;直到第二天上班才发现。查看日志才发现&#xff0c;其实系统在崩溃前2小时就已经开始报错——如果能实时捕获…...

宝可梦存档管理全世代兼容指南:从备份到跨世代转移的完整解决方案

宝可梦存档管理全世代兼容指南&#xff1a;从备份到跨世代转移的完整解决方案 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM 宝可梦训练师们常常面临存档丢失、跨世代宝可梦转移困难等问题。本文将介绍一款名…...

JMS, ActiveMQ 学习一则唾

开发个什么Skill呢&#xff1f; 通过 Skill&#xff0c;我们可以将某些能力进行模块化封装&#xff0c;从而实现特定的工作流编排、专家领域知识沉淀以及各类工具的集成。 这里我打算来一次“套娃式”的实践&#xff1a;创建一个用于自动生成 Skill 的 Skill&#xff0c;一是用…...

手把手调试:用逻辑分析仪抓取Camera Sensor的DVP和SPI时序波形(附MIPI对比)

实战指南&#xff1a;用逻辑分析仪精准捕捉Camera Sensor的DVP与SPI时序问题 调试摄像头Sensor时&#xff0c;图像花屏、颜色异常或帧率不稳定往往是工程师最头疼的问题。上周在调试一款安防摄像头模组时&#xff0c;客户反馈夜间画面出现规律性条纹&#xff0c;经过逻辑分析仪…...