7月31日MySQL学习笔记
今日内容: mysql: 行列转换 数据类型 函数 触发器 存储过程 事务 索引(还没讲) 三范式 JDBC连接数据库的6个步骤 三握四挥
行列转换
第一步 新建要转换的列
select name,
1 as '语文',
1 as '数学',
1 as '英语'
from t_score GROUP BY name
第二步 对每一列填入值,没有对应值填null/0
select *,
CASE subject
when '语文' then fraction
else 0
end
,
CASE subject
when '数学' then fraction
else 0
end,
CASE subject
when '英语' then fraction
else 0
endfrom t_score
第三步 将多行数据分组合并
-- 求和或最大值
select name,
sum(CASE subject
when '语文' then fraction
else 0
end) as '语文',
sum(CASE subject
when '数学' then fraction
else 0
end) as '数学',
sum(CASE subject
when '英语' then fraction
else 0
end) as '英语'
from t_score GROUP BY name
或者使用if函数
select name,
avg(if(subject='语文',Fraction,null)) as '语文',
sum(if(subject='数学',Fraction,null)) as '数学',
sum(if(subject='英语',Fraction,null)) as '英语'
from t_score GROUP BY name
if函数
三元运算表达式 也可以实现行列转换
面试常问:行列转换能不能使用avg函数:配合if函数可以实现
-- if函数 三元运算表达式 也可以实现行列转换
select * ,if(subject='语文',Fraction,0) from t_score-- if返回null就可以用avg
select * ,if(subject='语文',Fraction,null) from t_score
数据类型
整数类型
tinyint 1字节 smallint 2字节 mediumint 3字节 int 4字节 bigint 8字节
浮点型
double(总长度,小数位数) float(总长度,小数位数) decimal(总长度,小数位数)
字符串
char varchar() text longtext
-- char 最大长度是255字符长度;
-- varchar 能够存储的字节数是65535,varchar最大长度是计算出来的,不能说是65535
-- 1.结构varchar类型的第一个字节不存储数据
-- 2.varchar前两个字节存储数据长度
-- 3.有效位就(mb3:/3;mb4:/4;余数不是有效位)剩下65532
-- 4.编码格式决定能够存储多少个字符
-- 5.每一行总占用的字节长度不能超过65535,所以要求varchar最大占用字节不能超过65535,如果要存储长文本要使用text类型
-- char和varchar区别(常见面试题)
-- 1.总长度
-- 2.char是定长 varchar是变长
-- char(20)存abc 还是占20个字符位
-- varchar(20)存abc 占3个字符位
-- 3.char性能更优异,varchar要计算字符数,所以差一些
-- 4.存储固定长度时使用char,例如:身份证号码、手机号、学号、订单号
-- 可变长度使用varchar,例如:姓名、地址、店名
-- text 长文本 不需要记录长度 不记录在每行的data文件中,没有65535的限制
日期
Date 年月日 time 时分秒毫秒 Datetime 年月日时分秒
视图
视图 view 是一个已经编译好的sql语句,sql语句要先编译然后执行,视图就是编译完但没有执行。
-- 创建视图
create view v_student_score as
select a.sname, c.cname, b.score from student as a
join sc as b on a.sid=b.sid
join course as c on b.cid=c.cid;-- 使用 视图中不存储数据,使用视图就是使用编译完的子查询 可以加快减速效率
SELECT * from v_student_score-- 删除
drop view if EXISTS v_student_score
使用视图的优点
简化和重用:简化复杂的查询并且可以实现sql语句重用。
安全性:视图可以限制用户对某些数据的访问,只展示他们需要看到的数据,从而保护敏感信息。
提高性能:视图是已经编译好的sql语句,使用视图可以加快检索效率,并且在某些情况下,如果视图被频繁使用,数据库可以对视图的查询进行优化,提高查询性能。
函数
自定义函数
要先设置权限
set global log_bin_trust_function_creators=TRUE;
-- 判断score数值 >60合格 否则不及格
create function method(score int) returns varchar(20)
begin -- 定义一个局部变量记录返回结果 default '' 默认值declare result varchar(20) default '';if score>=60 then -- 对变量赋值 set set result = '及格';else set result = '不及格';end if;return result;
end;-- 删除
drop function method;
-- 使用
select method(80);
select * ,method(score) as 水平 from sc
内部函数
包括数值函数和字符串函数
注意点:char_length 字符长度 length 字节长度
参考博主总结:http://t.csdnimg.cn/bqWLh
-- char_length 字符长度 length 字节长度
select char_length('大'), length('大')
-- 截取前/后 n个
select left('123456',3),right('123456',3)
select CONCAT(left('19555005777',3),'****',right('19555005777',4))-- trim 使用方式特别多,查
select trim(' 123 ')select replace('123123123','1','a')select SUBSTR('1234',2,3);
select SUBSTR('1234' from 2 for 3);
select SUBSTR('1234' from 2)
select SUBSTRING('1234',2,3)-- 日期函数
-- 差不多
select NOW(),SYSDATE()
log-- 格式化日期
select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%S')
触发器 trigger
相对于一个事件,一旦表中发生了指定的事件,该触发器就会自动运行
只对增删改起作用
触发时机 before after
尽量不用触发器 会影响正常业务逻辑 由java逻辑去完成触发器工作
-- for each row 每有一行变动就触发一次
create trigger if not EXISTS tgg_i_a_student after insert on student for each row
begin -- 普通增删改sql语句update log set val=(select count(*) from student) where `key`='studentcount';
end ;create TRIGGER tgg_u_b_student before update on student for each row
begin
-- old.列名 获取原数据
-- new.列名 新的数据update log set val=concat(concat('{',old.sid,',',old.sname,'}'), '->',concat('{',new.sid,',',new.sname,'}')) where `key`='lastupdate';
end;
存储过程PROCEDUR
要使用循环语句loop,loop是个死循环,要用标签起别名aa:loop,使用 eave aa跳出
create procedure pro_insert_student_log(in num int )
BEGIN-- 循环语句 loop 死循环 leave跳出 DECLARE i int DEFAULT 0;DECLARE stuname varchar(20);DECLARE randomS int ;aa:loop -- 获取学生的名称 生成随机成绩-- into和set差不多select sname into stuname from student limit i,1;set randomS=FLOOR(RAND()*100);-- 插入log表insert into log value(stuname,randomS);set i=i+1;if i>=num THENLEAVE aa;end if;end loop aa;
END-- 使用
call pro_insert_student_log(8)
事务
事务是数据库管理系统中执行的逻辑单位,它是一系列操作,这些操作要么全部完成,要么全部不完成,以保证数据库状态的一致性。事务是数据库操作的原子性保证。
事务的四大特性(ACID)
- 原子性:事务中的所有操作要么全部完成,要么全部不执行,不会结束在中间某个点。
- 一致性:事务必须保证数据库从一个一致的状态转移到另一个一致的状态。
- 隔离性:并发执行的事务之间不会互相影响。
- 持久性:一旦事务提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失。
并发问题
- 脏读:一个事务读取了另一个事务未提交的数据。
- 不可重复读:在一个事务中,由于其他事务的更新,导致多次读取同一数据集合时结果不一致。
- 幻读:一个事务在读取某个范围内的记录时,由于其他事务的插入,导致再次读取该范围时出现之前不存在的记录。
- 丢失更新:两个或多个事务更新同一数据项,但只有一个事务的更新被提交,导致其他事务的更新丢失。
事务隔离级别
- 读未提交:最低级别的隔离,允许读取未提交的数据,可能会导致脏读。
- 读已提交/不可重复度:只允许读取已提交的数据,可以避免脏读,但可能会出现不可重复读。
- 可重复读(MySQL默认):使用行锁,保证在同一个事务中多次读取同一数据的结果是一致的,可以避免不可重复读,但不保证整个查询范围,可能会出现幻读。
- 串行化:最高级别的隔离,事务将依次顺序执行,可以避免脏读、不可重复读和幻读,但性能较低。
三范式
第一范式:每一列的数据是不可分割的(不可以再分割)
第二范式:每一列的数据要完全依赖主键(不可以部分依赖)
第三范式:不可以传递依赖
JDBC
jdbc连接数据库的六个步骤:1.加载驱动;2.创建连接;3.获取执行对象;4.执行sql语句;5.处理结果集;6.关闭连接;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBC {public static void main(String[] args) {//1.jdbc连接数据库的六个步骤String url="jdbc:mysql://localhost:3306/easydata";String username="root";String password="tcwjy2021";//从Java 6和JDBC 4.0开始,JDBC驱动可以自动被加载,无需调用 Class.forName()。String driverClassName="com.mysql.cj.jdbc.Driver";//1.加载驱动try {Class.forName(driverClassName);} catch (ClassNotFoundException e) {e.printStackTrace();}Connection con=null;Statement sta=null;try {//2.创建链接con=DriverManager.getConnection(url,username,password);//3.获取执行对象sta=con.createStatement();//4.执行sql语句 写 executeUpdate 读int rowCount=sta.executeUpdate("delete from student where sid=14");//5.处理结果集if(rowCount>0) {System.out.println("成功删除了"+rowCount+"条数据");}else {System.out.println("删除失败");}} catch (SQLException e) {e.printStackTrace();} finally {//关闭连接if(sta!=null) {try {sta.close();} catch (SQLException e) {e.printStackTrace();}}if(con!=null) {try {con.close();} catch (SQLException e) {e.printStackTrace();}}} }
}
TCP三次握手和四次挥手
TCP三次握手建立连接:
1. 客户端发送SYN:请求建立连接。
2. 服务器回送SYN-ACK:同意建立连接。
3. 客户端发送ACK:确认连接建立。
TCP四次挥手断开连接:
1. 主动方发送FIN:请求关闭连接。
2. 被动方回送ACK:确认请求。
3. 被动方发送FIN:请求关闭另一端连接。
4. 主动方回送ACK:确认关闭连接。
重点:
三次握手:确保连接建立,使用SYN和ACK标志位。
四次挥手:确保连接完全关闭,使用FIN和ACK标志位。
状态转换是关键,确保每一步骤都得到确认。
相关文章:

7月31日MySQL学习笔记
今日内容: mysql: 行列转换 数据类型 函数 触发器 存储过程 事务 索引(还没讲) 三范式 JDBC连接数据库的6个步骤 三握四挥 行列转换 第一步 新建要转换的列 select name, 1 as 语文, 1 as 数学, 1 as 英语 from t_score GROUP BY name 第二步 对每一列填入值…...

什么是容器查询?分享 1 段优质 CSS 代码片段!
本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿! 大家好,我是大澈! 本文约 700 字,整篇阅读约需 1 分钟。 今天分享一段优质 CSS 代码片段,使用容器查询…...

【linux深入剖析】初识线程---线程概念
🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1. Linux线程概念什么是线…...

【MySQL】索引——索引的引入、认识磁盘、磁盘的组成、扇区、磁盘访问、磁盘和MySQL交互、索引的概念
文章目录 MySQL1. 索引的引入2. 认识磁盘2.1 磁盘的组成2.2 扇区2.3 磁盘访问 3. 磁盘和MySQL交互4. 索引的概念4.1 索引测试4.2 Page4.3 单页和多页情况 MySQL 1. 索引的引入 海量表在进行普通查询的时候,效率会非常的慢,但是索引可以解决这个问题。 -…...
python部署flask项目
python部署flask项目 1. 准备服务器2. 设置服务器环境3. 创建虚拟环境并安装项目依赖4. 配置Gunicorn5. 配置Nginx6. 设置Supervisor(可选)7. 测试部署 将Flask项目部署到服务器的流程大致如下: 1. 准备服务器 首先,需要准备一台…...

数据建模标准-基于事实建模
前情提要 数据模型定义 DAMA数据治理体系中将数据模型定义为一种文档形式,数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介; 作用 记录数据需求和建模过程中产生的数据定义&…...

量产部落SM2258XT开卡软件,SM2258XT主控128G SSD固态卡死修复
故障现象:连接此固态硬盘后电脑就会卡死,拔掉重新连接概率性显示盘符,显示了之后也不能正常操作,一点击打开,电脑就立马卡死。 解决过程:下载了很多款量产工具,都不能开卡成功,点击…...

《零散知识点 · 自定义 HandleMapping》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
谈谈我对微服务的理解2.0
文章目录 一、引出问题二、微服务2-1、微服务的技术2-2、微服务的目的 三、微服务的拆分四、不连表查询五、微服务的好处六、微服务的坏处七、应付当下 这篇文章原本叫《如何做到不连表查询》,因为我对这个事一直耿耿于怀。在上家公司我经常被连表折磨(连…...

ECCV 2024前沿科技速递:GLARE-基于生成潜在特征的码本检索点亮低光世界,低光环境也能拍出明亮大片!
在计算机视觉与图像处理领域,低光照条件下的图像增强一直是一个极具挑战性的难题。暗淡的光线不仅限制了图像的细节表现,还常常引入噪声和失真,极大地影响了图像的质量和可用性。然而,随着ECCV 2024(欧洲计算机视觉会议…...

前端低代码必备:FrontendBlocks 4.0版本重磅发布,助力Uniapp-X原生APP开发
项目介绍 本软件是一款强大的所见即所得前端页面设计器,是低代码开发领域的基础设施,生成的代码不依赖于任何框架,实测可以将前端布局工作的耗时减少80%以上,最关键的是,它实现了人人都可以写前端页面的梦想。 不用写…...

如何将PyCharm 中使用 PDM 管理的 Django 项目迁移到 VS Code 并确保一切正常工作?
嗨,我是兰若姐姐,相信很多小伙伴都遇到过这种情况,使用pycharm用习惯了,想换个编辑器,比如换成vscode,今天就告诉大家,如果轻松切换到vscode 步骤 1:在 VS Code 中打开项目 打开 V…...
认识Android Handler
“Android Handler” 通常指的是 Android 开发中的 Handler 类,它是 Android SDK 的一部分,用于管理消息队列和线程之间的通信。它在 Android 开发中非常有用,特别是在计划消息和可运行对象(Runnables)在未来某个时间点…...
如何在 Ubuntu VPS 上安装 Cassandra 并运行单节点集群
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 介绍 Cassandra,或者说 Apache Cassandra,是一个高度可扩展的开源数据库系统,在多节点设置上能够实…...

Golang | Leetcode Golang题解之第316题去除重复字母
题目: 题解: func removeDuplicateLetters(s string) string {left : [26]int{}for _, ch : range s {left[ch-a]}stack : []byte{}inStack : [26]bool{}for i : range s {ch : s[i]if !inStack[ch-a] {for len(stack) > 0 && ch < stack…...

pxe的实验
首先搭好实验环境、 如果没有安装好图形,则需要用yum groups list找到有“GUI”的然后用yum groups " " 把含有GUI的复制到双引号里安装 然后再执行init 5 打开图形 Kickstart 如果dnf用不了改成yum 然后在用yum install httpd -y 安装好http的软件 之后…...
复杂智能软件系统开发
软件开发技术总是伴随着计算技术的时代问题向前发展,随着智能计算时代的到来,软件界需要回应智能软件开发的问题。 大型机时代,软件开发的主要问题是软件开发的效率和质量问题,用机器指令或汇编语言编写软件,效率低、质量差。随着高级程序设计语言的出现及其自动编译技术…...

kickstart自动安装脚本
当安装Linux操作系统时,安装过程会需要回答很多关于设定的问题 这些问题必须手动选择,否则无法进行安装。当只安装1台Linux系统,手动选择设定工作量比较轻松,当安装多台Linux,这些设定需要重复多次,这些重复…...
linux运维一天一个shell命令之grep详解
一、概念 grep 是 Linux 和 Unix 系统中一个非常常用的命令行工具,用于搜索文本文件中的特定模式。它支持正则表达式,并能在文件中快速查找匹配的行 二、正则表达式 1.概念 正则表达式(Regular Expressions,简称 regex 或 reg…...

COMSOL金属氢化物-放氢过程
在此记录下放氢过程的软件设置思路 1、采用的是"达西定律""层流" 物理场,其中"层流"物理场选择了”弱可压缩流动“,这里主要是选择”可压缩流动“的话,算出来的瞬时流量值跟实测差距太大了。 2、设置"达西…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...
Cursor AI 账号纯净度维护与高效注册指南
Cursor AI 账号纯净度维护与高效注册指南:解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后,许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...
用 FFmpeg 实现 RTMP 推流直播
RTMP(Real-Time Messaging Protocol) 是直播行业中常用的传输协议。 一般来说,直播服务商会给你: ✅ 一个 RTMP 推流地址(你推视频上去) ✅ 一个 HLS 或 FLV 拉流地址(观众观看用)…...

VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...