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

mysql操作(进阶)

1.数据库约束

数据库自动对数据的合法性进行校验检查的一系列机制,目的是为了保证数据库中能够避免被插入或者修改一些非法数据。

(1)mysql中提供了以下的约束:

a.NOT NULL:指定某列不能为null

b.UNIQUE:该列不能重复的值(唯一)

通过UNIQUE这个约束,会让后续插入,修改数据时都会先进行一次查询,通过该次查询看数据是否存在,从而这个操作就会影响执行效率(Mysql数据库是比较吃资源的,是一个比较慢的系统(相对其他数据库而言))。

c.PRIMARY KEY:主键,是NOT NULL和UNIQUE的结合,代表某列既不能为null,且是唯一的

一张表中只有一个主键。主键一般会搭配auto_increment(自增)来进行使用,在进行插入数据的时候,就不需要手动去赋值,mysql会根据当前主键的值自动分配一个值(从1开始),用来表示主键的唯一性。

使用auto_increment(主键一般是int/bigint类型)时需要注意:

如果此时里面已经有1,2,3,4这几个主键,此时插入一个主键:9,此时后续在进行插入数据时,会从9开始往后加,中间主键没用到的地方,只能通过手动插入的方式来进行设置。

eg:现有一张表student(create table student values(id int primary key auto_increment,name varchar(20)); ),里面有id(主键)和name属性,此时插入数据(insert into student values(null,"lisi"),(null,"zhangsan");),可以看到这里的主键在添加auto_increment对id传null表示交给mysql去处理,给我们自动分配一个值,而不是表示null值;如果没有这个auto_increment的话就会报错,主键不能为null。

d.FOREIGN KEY:外键,保证一个表中的数据匹配另一个表中的值的参照完整性

ps:

外部约束的那一列必须是主键/UNIQUE(唯一),被外部约束的键放在前面,外部进行约束的键放在最后。两张表此时相当于建立了一个父子关系。如果外键创建成功,那么每一次插入/修改数据的时候,都会先去父表中查询一下是否存在,这个过程也会一定程度上影响执行效率。

eg:class表(父):create table class values(classid int primary key, classname varchar(20);)

student表(子):create table student values(id int,name varchar(20), foreign key(id) references class(classid);)

如果class中classid不是主键,创建student表时不会创建成功。如果创建成功,student表中id属性将会被class中classid属性给约束,id属性进行插入时,只能插入classid中有的值,没有的插入不成功(父类约束子类);如果想对class中的classid属性进行修改,如果在student中被用了,此时修改不会成功(子类在一定程度上也会约束父类)。

不能直接删除父表,如果要删除需要先删除子表,然后再进行删除父表。

e.CHECK:保证列中的值符合指定条件,对于Mysql数据库,忽略CHECK字句

f.DEFAULT:某列在没有赋值的时候的默认值,没有进行修改这个dafault就默认为null

以上约束都是在表创建时所加的约束,一旦表已经创建好了,就不可在进行约束的更改,除非删表重新创建表。

2.查询(进阶)

(1)查询搭配插入使用

eg:insert into s1 select * from s2;  将s2中的所有数据插入到s1中,前提:两个表中的数据类型,个数,顺序要一致。  

(2)聚合查询

前面的表达式查询是针对列与列之间的查询,而聚合查询是针对行与行之间的查询。

a.count 

eg:select count(*) from s1; ( 假如s1表中有8条数据,其中有一条为null)

select count(distinct english) from s1;( s1表中有个english属性,english属性中一条null记录,两条重复的记录) 

此时得到的结果为8(count(*)这个操作会包含null这条记录,且不会进行去重),但单单用count计算某一列的数量(如果没加distinct的话,此时也是计算的总行数,加了去重的话就不一定了),不会将null计算进去(在这里得到的结果也就是7),

b.sum

数字类型求和:

eg:select sum(english) from s1; (计算s1表中所有english加起来的成绩)

字符窜类型求和:

eg:select sum(name) from s1;(这个操作,mysql会尝试把字符串转化成double类型的数据,如果转化失败,会报错;否则可以正常进行运算)结果为0,并且会报警告(可以通过show warnings; 操作进行警告的查看)

如果有这样的规则,那么插入数据:insert into s1 values("006",95);(以"数字"的这种形式) ,此时对name进行求和就可以得到6;

表达式求和:

eg:select sum(english+chinese) from s1;(s1表中还有个chinese属性,此时结果为整个表中chinese和english的总和)

其他使用方式大多相似,不一一进行列举,参考上述两种方式。

(3)group by

主要有两种用法:

加where:分组之前的的条件,在group by 之前

加having:分组之后的条件,在group by 之后

eg:现有一张工资表(一个公司各个职位的工资)s(有name,role,salary属性),现要查询除了张三以外所有员工(分职位)的平均工资,应该执行的操作为:select name avg(salary) from s where name != "张三" group by role; 很明显这个条件应该是在分组之前被执行,所以用where。现还要查询每个岗位的工资,除了工资超过2w的岗位,应该执行的操作为:select name,avg(salary) group by role having avg(salary) < 20000; 

(4)联合查询

前面的查询都是针对一个表进行查询,而在实际开发过程中,经常可能会对多个表进行查询,此时就需要用到联合查询。

关键思路:笛卡尔积。笛卡尔积是简单无脑的排列组合,把所有情况都列举了一遍,需要通过连接条件来筛选出有意义的数据。笛卡尔积的行数是多个表的行数相乘,列数是多个表的列数相加。

a.内连接

语法:select 列名 from 表1 as 别名1,表2 as 别名2 where 连接条件 and 连接条件;

select 列名 from 表1 as 别名1 [inner] join 表2 as 别名2 on 连接条件 and 连接条件;

b.外连接

分为左外连接和右外连接。左侧的表(表1)完全显示出来就是左外连接,右侧的表(表2)完全显示出来就是有外连接,另一侧表不存在的用null/default填充。

语法:select 列名 from 表1 as 别名1 left join 表2 as 别名2 on 连接条件 and 连接条件;

select 列名 from 表1 as 别名1 rightjoin 表2 as 别名2 on 连接条件 and 连接条件; 

内连接和外连接的关系:

如果两张表中的数据是一一对应的,则内连接与外连接没有区别;

如果不是一一对应的,则内外连接所查询到的结果不同。

(5)自连接

一张表,自己与自己进行笛卡尔积,通过此方式可以实现一张表中行与行之间的比较。mysql本身只能进行列与列之间的比较。

(6)子查询

本质是套娃,会把多个简单的sql语句变成一个复杂的sql语句,违背了编程设计的一贯原则,在实际开发中不建议使用,但是还是需要了解一下。

eg:现在有stutdent表(里面有name,classid等属性),现在要查询“张三”(假设张三所在班编号为1)的同班同学,应该执行的操作:select classid from student where name = “张三”; select name,classid from student where classid = 1 and name != "张三";  而用子查询的话sql语句:select name,classid from student where classid = (select classid from student where name = “张三”) and name != "张三";

(7)合并查询

使用union关键字,把多个sql查询的结果集合,合并在一起。合并的前提是两个表的列属性参数类型,个数和顺序(列名可以不同)要相同。

相关文章:

mysql操作(进阶)

1.数据库约束 数据库自动对数据的合法性进行校验检查的一系列机制&#xff0c;目的是为了保证数据库中能够避免被插入或者修改一些非法数据。 &#xff08;1&#xff09;mysql中提供了以下的约束&#xff1a; a.NOT NULL&#xff1a;指定某列不能为null b.UNIQUE&#xff1…...

[000-01-025].第07节:WorkBench

我的后端学习大纲 我的Drools学习大纲 8. WorkBench 8.1 WorkBench简介: 1.WorkBench是KIE组件中的元素&#xff0c;也称为KIE-WB&#xff0c;是Drools-WB与JBPM-WB的结合体。它是一个可视化的规则编辑器。WorkBench其实就是一个war包&#xff0c;安装到tomcat中就可以运行。…...

JavaScript - 变量声明(let、const 和其他)

目录 一、引言 1. let 的作用 2. const 的作用 3. let 与 const 的选择 4. let 和 const 的性能 5. var, let, const 的对比 6. 常见误区 二、其他变量定义 1. var 关键字 2. 全局对象属性 3. 使用 IIFE&#xff08;立即调用函数表达式&#xff09; 4. ES6 模块 总结 …...

AC800PEC PC D231 3BHE025541R0101控制模块面价

AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块面价 AC800PEC PC D231 3BHE025541R0101控制模块引脚线 AC800PEC PC D231 3BHE025541R0101控制模块说明书 AC800PEC PC D231 3BHE0…...

2024年3款免费录屏软件,你的电脑桌面上缺哪一个?

现在&#xff0c;不管是上网课、在家工作&#xff0c;还是拍视频&#xff0c;录屏软件都变得越来越重要了。想做个教学视频、录个操作指南&#xff0c;或者录个游戏的高光时刻&#xff0c;好的录屏软件都能帮你轻松搞定。这篇文章就是要聊聊免费录屏软件一般都有啥功能&#xf…...

Python爬虫新手指南及简单实战

网络爬虫是自动化获取网络信息的高效工具&#xff0c;Python因其强大的库支持和简洁的语法成为编写网络爬虫的首选语言。本教程将通过一个具体的案例&#xff08;基于Microsoft Edge浏览器的简单爬取&#xff09;&#xff0c;指导你使用Python实现一个完整的网络爬虫&#xff0…...

如何有效开展产业链招商?

产业链招商是一种以产业大数据为依托、以产业链图谱为基础、以产业链分析为核心、以完善产业链结构为目标的招商引资方式。相比于传统招商模式&#xff0c;产业链招商比拼的并不是土地、政策优惠&#xff0c;而是以产业链分析为核心&#xff0c;诊断区域产业链结构及长短板&…...

爬虫中使用多进程、多线程的混合方式遇到的数据丢失问题

项目场景&#xff1a; 网络爬虫项目&#xff0c;主要实现多进程、多线程方式快速缓存网页资源到MongoDB&#xff0c;并解析网页数据&#xff0c;将信息写入到csv文件中。 问题描述 在单独使用多线程的过程中&#xff0c;是没有问题的&#xff0c;比如这个爬虫示例是爬取豆瓣电…...

多云应用安全平台RegData利用MongoDB简化数据控制和合规流程

在高度规范化市场中&#xff0c;为了保障数据安全&#xff0c;企业可能需要部署一系列繁琐且成本高昂的IT基础设施系统。随着各项数据安全保护措施的出台&#xff0c;企业需要遵守的法规数量越多&#xff0c;尤其是跨越多个地域的企业&#xff0c;其IT基础设施就会越复杂。如今…...

VUE实现TAB切换不同页面

VUE实现TAB切换不同页面 实现效果 资源准备 ReceiveOrderList, TodoListMulti, SignList 这三个页面就是需要切换的页面 首页代码 <template><div><el-tabs v-model"activeTab" type"card" tab-click"handleTabClick"><…...

C++ 80行 极简扫雷

一共5346个字符&#xff0c;MinGW编译通过&#xff08;强烈不建议写这种代码&#xff01;&#xff01;&#xff01;&#xff09; 压行规则&#xff1a;一行不超过80个字符 代码&#xff1a; #include<windows.h> #include<stdio.h> #include<time.h> #def…...

常见VPS服务器附加组件一览

网络主机行业竞争非常激烈&#xff0c;因此主机服务提供商竭尽全力为客户提供完整的解决方案&#xff0c;其中包含构建和管理在线项目所需的一切。但客户通常有特定需求&#xff0c;因此需要不同的附加组件。在管理自己的网络服务器时尤其如此。 今天&#xff0c;我们将介绍您…...

Electron 使用Electron-build 进行打包

看完下面两篇就可以完成&#xff01; 基于vue3vite的web项目改为Electron桌面应用&#xff08;一&#xff09;_vue3转electron-CSDN博客 将web项目打包成electron桌面端教程&#xff08;二&#xff09;vue3vitets_vue3 打包桌面端-CSDN博客 打包报错 1. 首先确定依赖包 npm …...

Springboot+Websocket+Security+Vue 实现弹幕推送功能

后端部分 (Spring Boot) 1. 创建一个 Spring Boot 项目 创建一个新的 Spring Boot 项目并添加以下依赖&#xff1a; <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId…...

LangChain之网络爬虫

网络爬虫 概述 网络爬虫是LangChain中的一项关键功能&#xff0c;允许用户自动从互联网上收集信息。这项功能对于研究和数据收集尤其有价值&#xff0c;因为它可以大幅减少手动搜索和信息整理的工作量。 从网络收集内容有几个主要组件&#xff1a; Search搜索&#xff1a;使用…...

VueRouter 相关信息

VueRouter 是Vue.js官方路由插件&#xff0c;与Vue.js深度集成&#xff0c;用于构建单页面应用。构建的单页面是基于路由和组件&#xff0c;路由设定访问路径&#xff0c;将路径与组件进行映射。VueRouter有两中模式 &#xff1a;hash 和 history &#xff0c;默认是hash模式。…...

[环境配置]Pycharm:Failed to start [PowerShell.exe]

解决方法&#xff0c;点Local旁边的 号&#xff0c;点击Command Prompt&#xff0c;即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径&#xff0c;可以去Settings→Tools→Terminal中&#xff0c;修改Shell Path实现&#xff0c;改为cmd.exe…...

搜狗爬虫(www.sogou.com)IP及UA,真实采集数据

一、数据来源&#xff1a; 1、这批搜狗爬虫&#xff08;www.sogou.com&#xff09;IP来源于尚贤达猎头网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“www.sogou.com”和IP核实…...

北京青蓝智慧科技ITSS服务经理:长安链ChainBridge“链桥”问世 加速国家级区块链网络互联互通

8月5日&#xff0c;据国家区块链技术创新中心消息&#xff0c;我国首个完全自主控制的区块链软硬件技术系统——长安链&#xff0c;正式推出了全场景技术平台ChainBridge“链桥”。 此平台能够支持所有异构和同构的区块链进行协作&#xff0c;满足跨领域、跨地域、跨行业及跨层…...

音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现

音视频入门基础&#xff1a;WAV专题系列文章&#xff1a; 音视频入门基础&#xff1a;WAV专题&#xff08;1&#xff09;——使用FFmpeg命令生成WAV音频文件 音视频入门基础&#xff1a;WAV专题&#xff08;2&#xff09;——WAV格式简介 音视频入门基础&#xff1a;WAV专题…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式&#xff0c;给定一个隐函数关系&#xff1a; F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 &#x1f9e0; 目标&#xff1a; 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...