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.数据库约束 数据库自动对数据的合法性进行校验检查的一系列机制,目的是为了保证数据库中能够避免被插入或者修改一些非法数据。 (1)mysql中提供了以下的约束: a.NOT NULL:指定某列不能为null b.UNIQUE࿱…...

[000-01-025].第07节:WorkBench
我的后端学习大纲 我的Drools学习大纲 8. WorkBench 8.1 WorkBench简介: 1.WorkBench是KIE组件中的元素,也称为KIE-WB,是Drools-WB与JBPM-WB的结合体。它是一个可视化的规则编辑器。WorkBench其实就是一个war包,安装到tomcat中就可以运行。…...
JavaScript - 变量声明(let、const 和其他)
目录 一、引言 1. let 的作用 2. const 的作用 3. let 与 const 的选择 4. let 和 const 的性能 5. var, let, const 的对比 6. 常见误区 二、其他变量定义 1. var 关键字 2. 全局对象属性 3. 使用 IIFE(立即调用函数表达式) 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款免费录屏软件,你的电脑桌面上缺哪一个?
现在,不管是上网课、在家工作,还是拍视频,录屏软件都变得越来越重要了。想做个教学视频、录个操作指南,或者录个游戏的高光时刻,好的录屏软件都能帮你轻松搞定。这篇文章就是要聊聊免费录屏软件一般都有啥功能…...

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

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

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

多云应用安全平台RegData利用MongoDB简化数据控制和合规流程
在高度规范化市场中,为了保障数据安全,企业可能需要部署一系列繁琐且成本高昂的IT基础设施系统。随着各项数据安全保护措施的出台,企业需要遵守的法规数量越多,尤其是跨越多个地域的企业,其IT基础设施就会越复杂。如今…...

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

C++ 80行 极简扫雷
一共5346个字符,MinGW编译通过(强烈不建议写这种代码!!!) 压行规则:一行不超过80个字符 代码: #include<windows.h> #include<stdio.h> #include<time.h> #def…...

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

Electron 使用Electron-build 进行打包
看完下面两篇就可以完成! 基于vue3vite的web项目改为Electron桌面应用(一)_vue3转electron-CSDN博客 将web项目打包成electron桌面端教程(二)vue3vitets_vue3 打包桌面端-CSDN博客 打包报错 1. 首先确定依赖包 npm …...
Springboot+Websocket+Security+Vue 实现弹幕推送功能
后端部分 (Spring Boot) 1. 创建一个 Spring Boot 项目 创建一个新的 Spring Boot 项目并添加以下依赖: <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId…...

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

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

[环境配置]Pycharm:Failed to start [PowerShell.exe]
解决方法,点Local旁边的 号,点击Command Prompt,即可在Pycharm中呼出控制台。 如果要修改Command Prompt的启动时访问的cmd.exe的路径,可以去Settings→Tools→Terminal中,修改Shell Path实现,改为cmd.exe…...

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

北京青蓝智慧科技ITSS服务经理:长安链ChainBridge“链桥”问世 加速国家级区块链网络互联互通
8月5日,据国家区块链技术创新中心消息,我国首个完全自主控制的区块链软硬件技术系统——长安链,正式推出了全场景技术平台ChainBridge“链桥”。 此平台能够支持所有异构和同构的区块链进行协作,满足跨领域、跨地域、跨行业及跨层…...

音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现
音视频入门基础:WAV专题系列文章: 音视频入门基础:WAV专题(1)——使用FFmpeg命令生成WAV音频文件 音视频入门基础:WAV专题(2)——WAV格式简介 音视频入门基础:WAV专题…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...