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

初始MySQL(五)(自我复制数据,合并查询,外连接,MySQL约束:主键,not null,unique,foreign key)

目录

表复制

自我复制数据(蠕虫复制)

合并查询

union all(不会去重)

union(会自动去重)

MySQL表的外连接

左连接

右连接

MySQL的约束

主键

not null

unique(唯一)

foreign key(外键)


表复制

自我复制数据(蠕虫复制)

#为了对某个sql语句进行效率测试,我们需要海量数据时,可以使用此法为表创建海量数据

-- 演示表的复制
CREATE TABLE my_tab01( id INT,`name` VARCHAR(32),sal DOUBLE,job VARCHAR(32),deptno INT);
DESC my_tab01;
SELECT * FROM my_tab01;
-- 演示如何自我复制
-- 1.先把emp表记录复制到my_tab01
INSERT INTO my_tab01 (id, `name` ,sal,job,deptno)SELECT empno,ename,sal,job,deptno FROM emp;
SELECT * FROM my_tab01;-- 2.自我复制
INSERT INTO my_tab01SELECT * FROM my_tab01;
SELECT * FROM my_tab01;

-- 如何删除掉一张表重复记录

-- 1.先创建一张表 my_tab02

-- 2.考虑去重

-- 如何删除掉一张表重复记录
-- 1.先创建一张表 my_tab02
CREATE TABLE my_tab02 LIKE emp; -- 这个语句 把emp表结构(列) , -- 复制到my_tab02,并没有复制数据
DESC my_tab02;
SELECT * FROM my_tab02INSERT INTO my_tab02SELECT *FROM emp
SELECT * FROM my_tab02;-- 2.考虑去重
-- 思路:(1)先创建一个临时表 my_tmp,该表的结构和my_tab02一致-- (2)把my_tab02的记录通过distinct关键字处理后,把记录复制到my_tmp-- (3)清除掉my_tab02记录-- (4)把my_tmp 表的记录复制到my_tab02-- (5)drop掉 临时表my_tmp
-- (1)先创建一个临时表 my_tmp,该表的结构和my_tab02一致
CREATE TABLE my_tmp LIKE my_tab02
-- (2)把my_tab02的记录通过distinct关键字处理后,把记录复制到my_tmp
INSERT INTO my_tmp SELECT DISTINCT * FROM my_tab02;
-- (3)清除掉my_tab02记录
DELETE FROM my_tab02;
-- (4)把my_tmp 表中的记录复制到my_tab02
INSERT INTO my_tab02 SELECT * FROM my_tmp
-- (5)drop掉 临时表my_tmp
DROP TABLE my_tmp
SELECT * FROM my_tab02;

合并查询

介绍 有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号  union , union all

union all(不会去重)

union(会自动去重)

MySQL表的外连接

# 创建stu 
CREATE TABLE stu(
id INT,
`name` VARCHAR(32));
INSERT INTO stu VALUES(1,'jack'),(2,'tom'),(3,'kity'),(4,'nono');
SELECT * FROM stu;
#创建exam表
CREATE TABLE exam(
id INT,
grade INT);
INSERT INTO exam VALUES(1,56),(2,76),(11,8);
SELECT * FROM exam;
#笛卡尔集
SELECT * FROM stu,exam

左连接

练习要求:显示所有人的成绩,如果没有成绩,也要显示该姓名和id号,成绩显示为空

我们可以用左连接(我们以左边的表为基准去右边的表去找,找到一起显示,找不到显示NULL)

-- 改成左外连接,显示所有人的成绩,如果没有成绩,也要显示该人的姓名和id号,
-- 成绩显示空
-- select ... from 表1 left join 表2 on 条件   
-- 上面的表1是左表,表2是右表SELECT  `name`,stu.id,grade  FROM stu LEFT JOIN examON stu.id = exam.id; -- 一左边为基准去右边找,找到显示,找不到显示NULL

右连接

再来一个练习

列出部门名称和那些部门的员工信息(名字和工作), 同时列出那些没有员工的部门名

-- 右外连接 select ... from 表1 right join 表2 on 条件   
SELECT ename ,dname FROM emp RIGHT JOIN deptON emp.deptno = dept.deptnoORDER BY dname

MySQL的约束

主键

在创建表的时候使用 基本语法:    字段名  字段类型  primary key

用于唯一的标示表行的数据,当定义主键约束后,该行的值不能重复

主键使用的细节

(1) primary key 不能重复而且不能为空

INSERT INTO t17 VALUES(NULL,'nb','nb克拉斯') -- Column 'id' cannot be null

(2)-- 一张表中最多只能有一个主键,但是可以设置复合主键

-- 一张表中最多只能有一个主键
CREATE TABLE t18(
id INT PRIMARY KEY,
`name` VARCHAR(32) PRIMARY KEY,
email VARCHAR(32));
-- 演示复合主键(id 和 name 做成复合主键)
CREATE TABLE t18(
id INT,
`name` VARCHAR(32),
email VARCHAR(32),
PRIMARY KEY (id,`name`) -- 这里就是复合主键 ,表示这两列的值要都不相同
); 
INSERT INTO t18 VALUES(1,'tom','tom@nb.com');
INSERT INTO t18 VALUES(1,'lhq','lhq@znb.com');SELECT * FROM t18;

只有设置复合主键中的值都相同的时候会报错误

desc来查看主键

not null

如果在列上定义了not null ,那么当插入数据时,必须为列提供数据

字段 字段类型 NOT NULL

说明我们输入id的时候不可以输入NULL值

unique(唯一)

当定义了唯一约束后,该列值是不能重复的

字段名 字段类型 unique

下面重复的id时候报错误的

unique使用细节

-- 1.如果没有指定not null ,则unique 字段可以有多个null

-- 如果一个列(字段),是 unique not null 使用效果类似于 primary key

--2.一张表中可以有多个unique字段

foreign key(外键)

啥叫外键?

用韩老师画的这张图就是说,我现在班级表设置成主表,id有主键约束,学生表中的class_id正好和班级表的id一样,我们将学生表中的class_id指向班级表的id,这两个表之间就产生了联系,我再往学生表中添加信息,如果class_id在主表的id中不存在,那就添加不上去,这就是我们的外键约束

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

建立外键的时候,表的引擎必须是innodb才行,别的是建不起来的

就是在这

创建两个表

设置外键约束的时候,设置在从表中

#外键演示
-- 创建 主表 my_class
CREATE TABLE my_class(
id INT PRIMARY KEY,
`name` VARCHAR(32) NOT NULL DEFAULT '');-- 创建 从表 my_stu
CREATE TABLE my_stu(
id INT PRIMARY KEY,
`name` VARCHAR(32) NOT NULL DEFAULT '',
class_id INT,
-- 下面指定外键关系
FOREIGN KEY (class_id) REFERENCES my_class(id));

一旦主外键的关系形成了,那么就不能随意删除

但是可以先删除完从表的,当主表中主键没有外键指向他了,那主键的这一行也是可以删除的

相关文章:

初始MySQL(五)(自我复制数据,合并查询,外连接,MySQL约束:主键,not null,unique,foreign key)

目录 表复制 自我复制数据(蠕虫复制) 合并查询 union all(不会去重) union(会自动去重) MySQL表的外连接 左连接 右连接 MySQL的约束 主键 not null unique(唯一) foreign key(外键) 表复制 自我复制数据(蠕虫复制) #为了对某个sql语句进行效率测试,我们需要海量…...

ssh秘钥登录

1.设置 SSH 通过密钥登录 密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。 将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力…...

Vue3+NodeJS 接入文心一言, 发布一个 VSCode 大模型问答插件

目录 一&#xff1a;首先明确插件开发方式 二&#xff1a;新建一个Vscode 插件项目 1. 官网教程地址 2. 一步一步来创建 3. 分析目录结构以及运行插件 三&#xff1a;新建一个Vue3 项目&#xff0c;在侧边栏中展示&#xff0c;实现vscode插件 <> vue项目 双向消息传…...

VUE element组件生成的全选框如何获取值

//先声明 const Selection ref([]);//获取 const handleSelectCodeForTicket (val) > {console.log(val);// values.value val;Selection.value [];val.forEach((v) > {Selection.value.push(v);});console.log(Selection.value); }; <el-table selection-change…...

第三章:代码块

系列文章目录 文章目录 系列文章目录前言一、代码块总结 前言 代码块是只有方法体的类成员。 一、代码块 代码块又成为初始化块&#xff0c;属于类中的成员&#xff0c;类似于方法&#xff0c;将逻辑语句封装在方法体中&#xff0c;通过{}包围起来。但与方法不同&#xff0c;…...

javaEE案例,前后端交互,计算机和用户登录

加法计算机,前端的代码如下 : 浏览器访问的效果如图 : 后端的代码如下 再在浏览器进行输入点击相加,就能获得结果 开发中程序报错,如何定位问题 1.先定位前端还是后端(通过日志分析) 1)前端 : F12 看控制台 2)后端 : 接口,控制台日志 举个例子: 如果出现了错误,我们就在后端…...

安卓学习记录

文章目录 Text_View基础属性字体阴影跑马灯**activity_main.xml**MyTextview button Text_View ctrl右键可以看到属性 代码整理采用的快捷键是ctrlaltL(电脑qq锁定快捷键&#xff0c;退一下qq就行了) 基础属性 字体阴影 <?xml version"1.0" encoding"utf-…...

gradle 使用记录

gradle 使用记录 下载与设置android studio 配置 参考 IDEA如何配置 Gradle 及 Gradle 安装过程&#xff08;详细版&#xff09; 设置Gradle国内镜像并配置本地仓库地址 下载与设置 腾讯镜像下载 比如gradle-8.4-bin.zip 新建环境变量 GRADLE_HOME 为 D:\java\gradle &#…...

电源基础元件

文章目录 电源基础元件理想电压源理想电流源受控电源 电源基础元件 理想电压源 定义 其两端电压总能保持定值或一定的时间函数&#xff0c;其值与流过它的电流i无关的元件叫理想电压源 理想电压源的电压、电流关系 1.电源两端电压由电源本身决定&#xff0c;与外电路无关&…...

[RK-Linux] updateEngine工具使用以及代码分析

Rockchip Linux 平台支持两种启动方案,Recovery 模式和Linux A/B 模式: Recovery 模式,设备上有一个单独的分区(recovery)用于升级操作。Linux A/B 模式,设备上有两套固件,可切换使用。两种启动方案的对比如下: 升级方案代码路径是否支持Recovey启动模式升级是否支持A/B启…...

MySQL | 数据库的表的增删改查【进阶】

MySQL | 数据库的表的增删改查【进阶】 文章目录 MySQL | 数据库的表的增删改查【进阶】系列文章目录本节目标&#xff1a;数据库约束约束类型NULL约束UNIQUE&#xff1a;唯一约束DEFAULT&#xff1a;默认值PRIMARY KEY&#xff1a;主键FOREIGN KEY&#xff1a;外键CHECK 表的设…...

爱剪辑如何将视频旋转90度,详细操作流程

爱剪辑是一款电脑端常用的视频剪辑类软件&#xff0c;基本上囊括了视频剪辑所需的所有功能&#xff0c;此处主要介绍&#xff0c;爱剪辑是如何对视频进行旋转操作的&#xff0c;水平旋转或者垂直旋转爱剪辑都是可以操作的&#xff0c;整体操作的详细过程将在下方为大家讲解。 …...

三国杀中的概率学问题3——王荣

前言 本文是三国杀中的概率学问题系列文章中的一篇&#xff0c;将详细讨论王荣吉占的期望摸牌数问题。并加上连续情形作为拓展。 值得说明的是&#xff0c;本文的思路受到了一篇文章的启发&#xff0c;在此特别鸣谢&#xff0c;这是文章的链接。 王荣吉占的期望摸牌数 王荣的…...

Linux - 实现一个简单的 shell

前言 之前我们对进程的替换&#xff0c;进程地址空间等等的概念进行了说明&#xff0c;本篇博客会基于这些知识点来 实现一个简单的 shell &#xff0c;如有疑问&#xff0c;可以参考下述博客&#xff1a;Linux - 进程程序替换 - C/C 如何实现与各个语言之间的相互调用 - 替换…...

不同优化器的应用

简单用用&#xff0c;优化器具体参考 深度学习中的优化器原理(SGD,SGDMomentum,Adagrad,RMSProp,Adam)_哔哩哔哩_bilibili 收藏版&#xff5c;史上最全机器学习优化器Optimizer汇总 - 知乎 (zhihu.com) import numpy as np import matplotlib.pyplot as plt import torch # …...

学习网络编程No.9【应用层协议之HTTPS】

引言&#xff1a; 北京时间&#xff1a;2023/10/29/7:34&#xff0c;好久没有在周末早起了&#xff0c;该有的困意一点不少。伴随着学习内容的深入&#xff0c;知识点越来越多&#xff0c;并且对于爱好刨根问底的我来说&#xff0c;需要了解的知识就像一座大山&#xff0c;压得…...

PSP - 蛋白质复合物结构预测 Template Pair 特征 Mask 可视化

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/134333419 在蛋白质复合物结构预测中&#xff0c;在 TemplatePairEmbedderMultimer 层中 &#xff0c;构建 Template Pair 特征的源码&#xff0c…...

RK3568开发笔记-amixer开机设置音量异常

目录 前言 一、amixer介绍 1. 显示音频设备信息 2. 显示音量信息...

STM32两轮平衡小车原理详解(开源)

一、引言 关于STM32两轮平衡车的设计&#xff0c;我想在读者阅读本文之前应该已经有所了解&#xff0c;所以本文的重点是代码的分享和分析。至于具体的原理&#xff0c;我觉得读者不必阅读长篇大论的文章&#xff0c;只需按照本文分享的代码自己亲手制作一辆平衡车&#xff0c…...

区间内的真素数问题(C#)

题目&#xff1a;区间内的真素数 找出正整数 M 和 N 之间&#xff08;N 不⼩于 M&#xff09;的所有真素数。真素数的定义&#xff1a;如果⼀个正整数P 为素数&#xff0c;且其反序也为素数&#xff0c;那么 P 就为真素数。例如&#xff0c;11&#xff0c;13 均为真素数&#…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

ui框架-文件列表展示

ui框架-文件列表展示 介绍 UI框架的文件列表展示组件&#xff0c;可以展示文件夹&#xff0c;支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项&#xff0c;适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...