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

news2024/11/25 4:40:10

文章目录

  • 🛫数据库约束
    • 🌴约束类型
    • 🎋NOT NULL约束
    • 🎍UNIQUE:唯一约束
    • 🌳DEFAULT:默认值约束
    • 🎄PRIMARY KEY:主键约束
    • 🍀FOREIGN KEY:外键约束
    • 🌲CHECK约束
  • 🛬表的设计
    • 🚩一对一
    • 🚩一对多
    • 🚩多对多
  • ⭕总结

本节目标:

  • 数据库约束
  • 表的关系

🛫数据库约束

🌴约束类型

  • NOT NULL - 指示某列不能存储 NULL 值。

  • UNIQUE - 保证某列的每行必须有唯一的值。

  • DEFAULT - 规定没有给列赋值时的默认值。

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

  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

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

🎋NOT NULL约束

创建表时,可以指定某列不为空

比如我们先创建一个student表,我们对里面的id列进行约束为不能为null;

创建如下:

DROP TABLE IF EXISTS student;
CREATE TABLE student (
	id INT NOT NULL,
	sn INT,
	name VARCHAR(20),
	qq_mail VARCHAR(20)
);

查看表结构如下:
在这里插入图片描述
我们可以看到id行列是显示不可为null的

接下来我们插入数据试一下
在这里插入图片描述
结果也是意料之中,插入null数据时就直接报错了

🎍UNIQUE:唯一约束

指定sn列为唯一的、不重复的

这里我们重新设置一下表结构,对sn进行约束为唯一约束

DROP TABLE IF EXISTS student;
CREATE TABLE student (
	id INT NOT NULL,
	sn INT UNIQUE,
	name VARCHAR(20),
	qq_mail VARCHAR(20)
);

我们对表结构进行查询可以看到,sn列发生了明显变化
在这里插入图片描述
接下来我们依旧插入数据进行测试
在这里插入图片描述
发现如果sn相同就会进行报错

🌳DEFAULT:默认值约束

指定插入数据时,若列为空,则为默认值

我们重新设置一下student表,对name进行默认值约束,若为null,则为默认值:遇事问春风乄

设置如下:

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
	id INT NOT NULL,
	sn INT UNIQUE,
	name VARCHAR(20) DEFAULT '遇事问春风乄',
	qq_mail VARCHAR(20)
);

我们查看表结构后发现
在这里插入图片描述
Default列的name行不再为null,而为我们设置的默认值

我们来进行测试一下,插入一个name为null的数据
在这里插入图片描述
我们看到查询后name为默认值

注意事项:只适用于指定列插入数据,且该列不是受约束的列

🎄PRIMARY KEY:主键约束

指定列为主键

主键 是关系表中记录的唯一标识

使用主键应注意以下几点:

  • 每个表只能定义一个主键。

  • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

  • 一个字段名只能在联合主键字段表中出现一次。

  • 联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

这里我创建以下student表

-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
	id INT PRIMARY KEY,
	sn INT UNIQUE,
	name VARCHAR(20) DEFAULT '遇事问春风乄',
	qq_mail VARCHAR(20)
);

表结构如下:
在这里插入图片描述
我们发现上述表格可以理解为:主键是 NOT NULL 和 UNIQUE 的结合

对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1
使用如下:

-- 主键是 NOT NULLUNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment

注意事项:是当前表里使用的最大值+1

🍀FOREIGN KEY:外键约束

外键用于关联其他表的主键或唯一键

语法如下:

foreign key (字段名) references 主表()

MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

  • 必须为主表定义主键。

  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

  • 外键中列的数目必须和主表的主键中列的数目相同。

  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

接下来我们设计一个案例如下:

  • 创建班级表classes,id为主键
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
	id INT PRIMARY KEY auto_increment,
	name VARCHAR(20),
	desc1 VARCHAR(100)
);
  • 创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

表结构如下:
在这里插入图片描述

使用注意事项放在上面了,这里博主偷个懒,就不演示了;

🌲CHECK约束

CHECK约束添加规则

  1. CHECK 约束用于限制列中的值的范围。

  2. Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Check约束的条件,否则将无法正确输入。

  3. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

  4. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

使用如下:

drop table if exists test_user;
create table test_user (
	id int,
	name varchar(20),
	sex varchar(1),
	check (sex ='男' or sex='女')
);

表结构如下:
在这里插入图片描述
表结构没有什么变化,我们再来看看添加数据吧

添加数据如下:
在这里插入图片描述
查询如下:
在这里插入图片描述
当我们输入其他值时
在这里插入图片描述
就会爆出错误!

🛬表的设计

大概可以分为以下三种

🚩一对一

在这里插入图片描述

🚩一对多

在这里插入图片描述

🚩多对多

在这里插入图片描述

⭕总结

关于《【MySQL】 MySQL的增删改查(进阶)–壹》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

web:[ACTF2020 新生赛]Include

前提知识 文件包含漏洞 php伪协议 题目 点开题目,页面只显示一个tips,点进去看看 点进去之后 没有别的提示,先看源代码,恩,什么都没有 再看一下点进tips显示的页面,发现url中 flag可能就藏在这个页面中&…

需求是怎么一步一步变态的

最初的需求 需求是处理一些数据,数据例子: 而界面要显示的样子: 看起来不太难,可以分解出需求: 每一列的所有数据要都能参与选择,或者输入当一个参数选中之后,比如选中A选中1,则…

《人人都是提示工程师》读书笔记01.PDF

本书旨在介绍提示(prompt)工程师的工作内容和相关技能。本书首先讲述提示技术的基本工作原理、提示工程师的常用工具、提示技术的基础模式和提示技术的进阶知识(包括零样本提示、少样本提示和思维链提示);然后讲解自然…

uni-app跳转到另一个app

第一步&#xff1a; 首先要知道 app的包名 获取方式如下 第二步&#xff1a; 在第一个 demo1 app 一个页面中需要一个按钮去跳转 方法如下 <template><view class"content"><button click"tz">跳转</button></view> </…

【动态规划刷题 16】最长等差数列 (有难度) 等差数列划分 II - 子序列

1027. 最长等差数列 https://leetcode.cn/problems/longest-arithmetic-subsequence/ 给你一个整数数组 nums&#xff0c;返回 nums 中最长等差子序列的长度。 回想一下&#xff0c;nums 的子序列是一个列表 nums[i1], nums[i2], …, nums[ik] &#xff0c;且 0 < i1 <…

C++之浅拷贝、深拷贝、拷贝构造函数、拷贝赋值运算符、自定义的深拷贝函数应用总结(二百二十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

宝塔重装注意事项

欢迎关注我的公众号&#xff1a;夜说猫&#xff0c;让一个贫穷的程序员不靠打代码也能吃饭~ 前言 宝塔8.0版本&#xff0c;宝塔卸载重装&#xff0c;或者重装Linux系统后重新安装宝塔也适用。 不能上来直接就执行安装宝塔脚本&#xff0c;除非之前没有安装过宝塔。 步骤 1、…

短视频源码php

对于php短视频源码而言&#xff0c;视频质量与用户使用体验息息相关&#xff0c;高质量的视频观感更有利于留下用户。但实际上视频质量很容易受到各种因素的影响&#xff0c;接下来我们分析一下php短视频源码中导致视频出现异常的各种原因吧。 所谓短视频源码的原生开发&#…

华为云云耀云服务器L实例评测|华为云上安装kafka

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上安装kafka一、kafka介绍二、华为云主机准备三、kafka安装1. 安装什么版本java2. 安装zookeeper服务3. 使用systemctl 管理启动ZooKeeper服务4. 修改kafka配置5. 使用systemctl 管理启动kafka服务6. 创建一个测试 topi…

Springboot 实践(21)服务熔断机制

在微服务架构中&#xff0c;服务众多&#xff0c;通常会涉及到多个服务层的调用&#xff0c;一旦基础服务发生故障&#xff0c;很可能会导致级联故障&#xff0c;继而造成整个系统不可用&#xff0c;这种现象被称为服务雪崩效应。 服务熔断引入熔断器概念&#xff0c;熔断器如果…

libopenssl 实现私钥加密公钥解密

在需要验证可信来源时&#xff0c;需要用到签名验签。因此&#xff0c;需要使用私钥加密&#xff0c;公钥解密&#xff0c;取得被加密的信息。这就会使用到私钥加密&#xff0c;公钥解密的场景了。 参考&#xff1a; https://github.com/openssl/openssl/issues/20493 https:/…

【Python】Pycharm使用anaconda中的PaddleOCR的虚拟环境 卡在loading package list(保姆级图文)

目录 异常表现&#xff1a;解决方法1. 试着使用pytcharm的http代理&#xff08;很确定没用&#xff0c;无法成功&#xff0c;直接看下一步&#xff09;2. conda换国内源&#xff08;换源后重启&#xff1f;不知道有没有用&#xff0c;不确定是否关键&#xff09;3. 在conda中更…

2023年浙工商MBA新生奖学金名单公布,如何看待?

浙工商MBA项目官方最新公布了2023年的非全日制新生奖学金名单&#xff0c;按照政策约定&#xff0c;共分为特等奖学金1名&#xff0c;一等奖学金10名&#xff0c;二等奖学金15名&#xff0c;三等奖学金30名&#xff0c;额度对应3万、1万、0.8万、0.5万不等&#xff0c;主要名单…

c++ 继承与多态

一、c如何解决菱形继承的问题 例子一 菱形继承问题 #include <iostream> #include <string.h> using namespace std; class Animal { public:int m_Age; }; class Sheep : public Animal {}; class Tuo : public Animal {}; class SheepTuo :public Sheep, publ…

phpstudy脚本编写 和sql注入编写

1.phpstudy编写 2.sql注入编写

一、iMove源码解读:初识

引言&#xff1a;随着低代码思想的不断蔓延&#xff0c;除了大企业&#xff0c;中小企业也尝试构建自己的低代码平台&#xff0c;以期降低开发门槛&#xff0c;提高开发效率&#xff0c;降低生产成本。本文中的iMove是一款面向前端开发者的逻辑编排工具&#xff0c;通过它设计出…

【Java 基础篇】Java线程安全与并发问题详解

多线程编程在Java中是一个常见的需求&#xff0c;它可以提高程序的性能和响应能力。然而&#xff0c;多线程编程也带来了一系列的线程安全与并发问题。在本文中&#xff0c;我们将深入探讨这些问题&#xff0c;以及如何解决它们&#xff0c;适用于Java初学者和基础用户。 什么…

机器学习入门教学——损失函数(交叉熵法)

1、前言 我们在训练神经网络时&#xff0c;最常用到的方法就是梯度下降法。在了解梯度下降法前&#xff0c;我们需要了解什么是损失(代价)函数。所谓求的梯度&#xff0c;就是损失函数的梯度。如果不知道什么是梯度下降的&#xff0c;可以看一下这篇文章&#xff1a;机器学习入…

人工智能的未来:技术与道德的交汇

人工智能的未来&#xff1a;技术与道德的交汇 摘要引言技术的前景1. 机器学习的进展2. 自主智能系统 道德考量3. 数据隐私与安全4. 自主决策的伦理 社会影响5. 就业与教育6. 医疗与健康 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;…

新款 锐科达 SV-2402VP SIP广播音频模块 支持RTP流音频广播

新款 锐科达 SV-2402VP SIP广播音频模块 支持RTP流音频广播 SV-2402VP网络音频模块是一款通用的独立SIP音频功能模块&#xff0c;可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 该模块支持多种网络协议和音频编解码协议&#xff0c;可用于VoI…