【MySQL】增删改查进阶
目录
一、数据库约束
约束类型
NULL约束:非空约束
UNIQUE:唯一约束
DEFAULT:默认值约束
PRIMARY KEY:主键约束
FOREIGN KEY:外键约束
二、表的设计
三、新增
四、查询
聚合查询
聚合函数
GROUP BY子句
HAVING
联合查询
内连接
外连接
自连接
子查询
合并查询
一、数据库约束
数据库中的数据是如此重要,因此我们希望数据库里的数据,不要存在一些 "错误的" 数据。数据库中的 "约束'',其实就是对于数据库存储的数据,做出一些 "限制" "要求”。负责插入数据的程序员,得确保插入的数据是靠谱的,而人是不靠谱的,机器靠谱,程序靠谱。约束,就是数据库这样的程序,对于保存的数据,进行合法性检查这样的机制,一旦发现问题,数据库程序就能及时给出反馈。
约束类型
● NOT NULL - 指示某列不能存储NULL值。
● UNIQUE - 保证某列的每行必须有唯一的值。
● DEFAULT - 规定没有给列赋值时的默认值。
● PRIMARY KEY-NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。
● FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
● CHECK - 保证列中的值符合指定的条件。对于 MySQL 数据库,对 CHECK 子句进行分析,但是忽略 CHECK 子句。
NULL约束:非空约束
创建表时,可以指定某列不为空:
--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
UNIQUE:唯一约束
指定 sn 列为唯一的、不重复的:
--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20),
qq_mail VARCHAR(20)
);
DEFAULT:默认值约束
指定插入数据时,name列为空,默认值unkown:
--重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
最初的默认值都是NULL
PRIMARY KEY:主键约束
指定 id 列为主键:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT NOT NULL PRIMARY KEY,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20)
);
对于整数类型的主键,常配搭自增长 auto_increment 来使用。插入数据对应字段不给值时,使用最大值+1。
-- 主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id INT PRIMARY KEY auto_increment
也能手动指定其他数值
接下来插入的时候,自动分配下一条记录是 5 ?还是 101 ?
在MySQL中,给每个表都记录了一个 "自增主键的最大值'',后续继续插入数据,无论之前的最大值是否仍然存在,都是根据之前保存的最大值继续往后分配的。
约定了这个表里某个列为 "身份标识"(非空且唯一)
不允许一个表中同时存在多个主键(多个身份标识)
FOREIGN KEY:外键约束
外键用于关联其他表的 主键 或 唯一键,语法:
foreign key (字段名) references 主表(列)
👁🗨案例
● 创建班级表 classes,id 为主键:
-- 创建班级表,有使用MySQL关键字作为字段时,需要使用``来标识
DROP TABLE IF EXISTS classes;
CREATE TABLE classes (
id INT PRIMARY KEY auto_increment,
name VARCHAR(20),
`desc` VARCHAR(100)
);
● 创建学生表 student,一个学生对应一个班级,一个班级对应多个学生。使用 id 为主键,classes_id 为外键,关联班级表 id:
-- 重新设置学生表结构
DROP TABLE IF EXISTS student;
CREATE TABLE student (
id INT PRIMARY KEY auto_increment,
sn INT UNIQUE,
name VARCHAR(20) DEFAULT 'unkown',
qq_mail VARCHAR(20),
classes_id int,
FOREIGN KEY (classes_id) REFERENCES classes(id)
);
涉及到两个表
没有指定约束之前
指定约束之后
此时,外键约束就出现了,往 student 表插入的时候会触发针对 class 表的查询,再次往 student中插入数据,就务必要确保插入的数据的 classld 的值,得在class表中存在。
如果父表中的某个记录,被子表引用了(classld=1),此时就不能删除/修改父表中的对应记录了,父表是约束了子表,子表也会对父表反向进行约束。学生表的 classld 列,引用自班级表的 classld 列,班级表中的数据,约束了/制约了学生表的数据。
删表的时候还需要确保先删除子表再删除父表
再创建表
为啥第一次能行,第二次就不行了?第一次和第二次,差别在哪里呢?指定外键的时候,后续往子表中插入数据,就需要查询父表,第二次没有给父表加主键。主键本身也是有 "唯一性要求的",频繁触发查询,此处数据库就会对主键约束,给出特殊的处理(数据库会针对主键列创建索引),加快查询速度。
如果不指定主键,是一个 unique,也能达成类似的效果,都是要自动建立索引,以便于后续的快速查询。
关于外键还有一个更复杂一点的情况.
二、表的设计
一对一
一对多
多对多
三、新增
插入查询结果
INSERT INTO table_name [(column [, column ...])] SELECT ...
👁🗨案例:创建一张用户表,设计有name姓名、email邮箱、sex性别、mobile手机号字段。需要把已有的学生数据复制进来,可以复制的字段为 name、qq_mail
-- 创建用户表
DROP TABLE IF EXISTS test_user;
CREATE TABLE test_user (
id INT primary key auto_increment,
name VARCHAR(20) comment '姓名',
age INT comment '年龄',
email VARCHAR(20) comment '邮箱',
sex varchar(1) comment '性别',
mobile varchar(20) comment '手机号'
);
-- 将学生表中的所有数据复制到用户表
insert into test_user(name, email) select name, qq_mail from student;
得到的结果集合,列数/类型/顺序要和 insert into 后面的表相匹配,列的名字是不要求相同的
发现顺序不匹配的话可以通过指定列方式插入
或者
四、查询
聚合查询
针对行和行之间进行 “聚合操作”
聚合函数
进行聚合查询需要搭配聚合函数
函数 | 说明 |
COUNT([DISTINCT] expr) | 返回查询到的数据的数量(行数) |
如果使用 count 等聚合函数的时候,cout 和()之间加上空格,此时就会使函数执行失败
如果数据中包含了 null,可能对上述 count 产生影响
在刚刚统计行数的时候虽然这个表里有一条记录,含有 null,但最终查询到的行数还是会把这个
记录算进去的
如果是以 select+列名 的方式,那么遇到空值,就不会进行计数
函数 | 说明 |
SUM([DISTINCT] expr) | 返回查询到的数据的总和,不是数字没有意义 |
可以针对某一列进行求和
需要确保进行求和的列是数字,如果是字符串,就会出现问题
这里只有 6 个警告,因为有一条的 name 为空。null 和其他数值进行各种运算,结果都是 null,但是在 sum 中比较特殊,遇到 null 会直接跳过,不参与运算
函数 | 说明 |
AVG([DISTINCT] expr) | 返回查询到的数据的平均值,不是数字没有意义 |
MAX([DISTINCT] expr) | 返回查询到的数据的最大值,不是数字没有意义 |
MIN([DISTINCT] expr) | 返回查询到的数据的最小值,不是数字没有意义 |
其实MySQL中还提供更复杂的聚合函数,还能算标准差,方差等…
GROUP BY子句
SELECT中使用GROUP BY子句可以对指定列进行分组查询。需要满足:使用GROUP BY进行分组查询时,SELECT指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT中则必须包含在聚合函数中。
针对上述分组结果,也是可以排序的
HAVING
GROUP BY子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用WHERE语句,而需要用HAVING
⚠️需要区分好条件是分组之前的(使用原始数据比较)还是分组之后的(使用统计数据比较)
👁🗨案例
(1)分组之前的条件
查询每个岗位的平均薪资但是去除张三这个人
(2)分组之后的条件
排除薪资低于 5000 的记录
(3)一个查询,可以同时包含,分组前的条件和分组后的条件
统计每个岗位平均薪资,排除张三,也排除平均值低于 5w 的结果
联合查询
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
进行多表查询的时候通常会通过一定的条件,把这里笛卡尔积中的 "合法数据” 筛选出来,这样的条件就称为 "连接条件”。如果拿两个表,这里不存在某个列,具有上述的对应关系,此时进行的笛卡尔积可以认为是 “无意义” 的。
初始化测试数据:
create table classes(id int primary key auto_increment,name varchar(20),`desc` varchar(100));create table student(id int primary key auto_increment,sn varchar(20),name varchar(20),qq_email varchar(20),classes_id int);create table course(id int primary key auto_increment,name varchar(20));create table score(score decimal(3,1),student_id int,course_id int);insert into classes(name, `desc`) values
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');insert into student(sn, name, qq_email, classes_id) values
('09982','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@qq.com',2);insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');insert into score(score, student_id, course_id) values
-- 黑旋风李逵
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 菩提老祖
(60, 2, 1),(59.5, 2, 5),
-- 白素贞
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 许仙
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 不想毕业
(81, 5, 1),(37, 5, 5),
-- 好好说话
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);
内连接
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
👁🗨案例
1️⃣明确要查询的信息来自于哪些表
2️⃣针对这些表进行笛卡尔积
3️⃣指定连接条件把有意义的数据筛选出来
4️⃣根据需要进一步指定条件对数据再筛选
5️⃣针对查询的列也去进行精简
(1)查询 “许仙” 同学的成绩
1️⃣学生表和分数表
2️⃣对这两个表进行笛卡尔积
3️⃣筛选掉无效的数据
4️⃣
5️⃣
还可以通过另外一个写法 join
select * from student join score;
select * from student join score on student.id = score.student_id;
select * from student join score on student.id = score.student_id and student.name = '许仙';
select name, score from student join score on student.id = score.student_id and student.name = '许仙';
相比于直接多个表 where 的方式来说,join on 的方式,还有更多的变化(支持的功能更多一些)实际开发中,这两个写法都很常用,都要能够掌握
(2)查询所有同学的总成绩,及同学的个人信息
1️⃣学生表和分数表
2️⃣
select * from student,score;
3️⃣
select * from student,score where student.id = score.student_id;
4️⃣针对上述数据进行分组聚合
5️⃣搭配聚合函数
(3)查询所有同学的成绩,及同学的个人信息:
列出同学名字、课程名字、课程分数
1️⃣student course score
2️⃣
select * from student,course,score;
3️⃣
select * from student,course,score where student.id = score.student_id and course.id = score.course_id;
4️⃣
select student.name as studentName,course.name as courseName,score.score from student,course,score where student.id =score.student_id and course.id = score.course_id;
也可以通过 join on 的方式来写,更能清楚地体现出联合查询的过程
3️⃣
select * from student join score on student.id = score.student_id;
select * from student join score on student.id = score.student_id join course on score.course_id = course.id;
4️⃣
select student.name as studentName,course.name as courseName,score.score from student
join score on student.id = score.student_id join course on score.course_id = course.id;
虽然上述的例子说明,计算笛卡尔积是可以拿任意个表进行的,但是由于笛卡尔积可能会产生出大量的 "中间结果",此时就会对于性能影响很大,甚至严重的,可能会把数据库给搞挂了。因此,多表联合查询,可以用,用的时候,要慎重,需要先对当前这样的多表查询,大慨会涉及到多少数据量进行操作,有一个 "预估"。
外连接
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完全显示我们就说是右外连接。
左外连接就是以左表为基准,能够确保左表中的每个记录都出现在最终结果里,如果左表中的记录,在右表中没有对应的记录,此时就会把右表中的相关字段,填成NULL。
右外连接,是以右表为基准,然后确保右表中的每个记录都出现在最终结果里,如果右表中的某个记录在左表里没有对应的相关字段,填成NULL。
create table student(id int,name varchar(20));
create table score(id int,score int);
insert into student values(1,'张三'),(2,'李四'),(3,'王五');
insert into score values(1,90),(2,80),(3,70);
这俩表的数据,是 "一一对应" 的,此时,针对这两个表,进行内连接和外连接,操作结果,完全相同(内连接和外连接就是等价的效果)。但是,一旦上述的数据,不再一一对应,此时,内连接和外连接,就会出现差别。
update score set id = 4 where score = 70;
内连接:查询结果只包含两个表中同时具备的数据
select name, score from student, score where student.id = score.id;
或者
select name, score from student inner join score on student.id = score.id;
inner 可以省略,在这表示内连接
外连接不支持 from 多个表这种写法,left join 表示左外连接,right join 表示右外连接
左外连接:
右外连接:
自连接
自连接是指在同一张表连接自身进行查询,即自己和自己进行笛卡尔积
SQL中进行的条件查询,是针对两个列进行比较的,不能比较两个行,自连接,本质上就能把行关系,转换成列关系
👁🗨案例 显示所有 “计算机原理” 成绩比 “Java” 成绩高的成绩信息
在自连接之前需要给表取不同的别名再进行连接
select * from score as s1, score as s2;
指定连接条件把无效数据干掉
select * from score as s1,score as s2 where s1.student_id = s2.student_id;
左侧的 score 列就是计算机原理的分数,右侧的 score 列就是 java 的分数,这里原来的行之间的关系就变成了列之间的关系了.
select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1;
这样的结果,就说明了上述 score 表中,只有三个同学同时具有计算机原理和 java 课程
select * from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1;
select s1.student_id,s1.score,s2.score from score as s1,score as s2 where s1.student_id = s2.student_id and s1.course_id = 3 and s2.course_id = 1 and s1.score > s2.score;
💡如果当前发现,要查询的条件,是针对两行,而不是两列,就可以考虑使用自连接,进行转换。当然自连接的时候,如果表非常大,此时的连接开销,也会非常庞大,容易就把数据库搞死了。
子查询
子查询是指嵌入在其他SQL语句中的 select 语句,也叫嵌套查询
🚫本来一个需求,需要通过多个SQL来完成的,但是现在就偏偏要把多个SQL合并成一个子查询。原则上不推荐大家使用的。
◾️单行子查询:返回一行记录的子查询
👁🗨案例 查询与 “不想毕业” 同学的同班同学
不使用子查询:
select classes_id from student where name = '不想毕业';
select name from student where classes_id = 1 and name != '不想毕业';
使用子查询:
select name from student where classes_id =(select classes_id from student where name = '不想毕业') and name != '不想毕业';
◾️多行子查询:返回多行记录的子查询
此时不能使用 = > <这样的运算符直接比较了,但是可以使用 in
👁🗨案例 查询 “语文” 或 “英文” 课程的成绩信息
1️⃣[NOT] IN关键字
不使用子查询:
select * from course where name = '语文';
select * from course where name = '英文';
select * from score where course_id in (4,6);
使用子查询:
select * from score where course_id in (select id from course where name = '语文' or name = '英文');
2️⃣[NOT] EXISTS关键字
更不推荐🚫因为 exists 非常消耗时间,背后会触发大量的硬盘IO操作,并且代码理解起来也比较复杂
合并查询
在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 union,union all。使用UNION和UNION ALL时,前后查询的结果集中,字段需要一致。
▪️union
该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。
▪️union all
该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
select * from student union all select * from student2;
📢要求合并的双方,类型、个数、顺序匹配,列名不要求(以左侧为准)
相关文章:
【MySQL】增删改查进阶
目录 一、数据库约束 约束类型 NULL约束:非空约束 UNIQUE:唯一约束 DEFAULT:默认值约束 PRIMARY KEY:主键约束 FOREIGN KEY:外键约束 二、表的设计 三、新增 四、查询 聚合查询 聚合函数 GROUP BY子句 HA…...
【Linux 指北】常用 Linux 指令汇总
第一章、常用基本指令 # 注意: # #表示管理员 # $表示普通用户 [rootlocalhost Practice]# 说明此处表示管理员01. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件…...
父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法
提示:父组件中循环生成多个子组件时,有且只有最后一个子组件的watch对象生效问题及解决办法 文章目录 [TOC](文章目录) 前言一、问题二、解决方法——使用function函数代替箭头函数()>{}总结 前言 问题:子组件用that解决watch无…...
stable Diffusion 中的 VAE是什么
在Stable Diffusion中,VAE(Variational Autoencoder,变分自编码器)是一个关键组件,用于生成高质量的图像。它通过将输入图像编码到潜在空间(latent space),并在该空间中进行操作&…...
麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程
1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题,为保障系统安全,需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4,以规避潜在风险,提升系统整体的安全性和稳定性。 1.1 本…...
图论·拓扑排序
拓扑排序 有向无环图的遍历 检查有向图是否连通/有环 核心操作 统计度数,对于度为0的点作为起始点,添加度为0的点作为遍历 如何验证有环?注意不建议直接模拟,如果出现环这起始点的度一定不为0,肯定会少遍历一些点&…...
Uniapp组件 Textarea 字数统计和限制
Uniapp Textarea 字数统计和限制 在 Uniapp 中,可以通过监听 textarea 的 input 事件来实现字数统计功能。以下是一个简单的示例,展示如何在 textarea 的右下角显示输入的字符数。 示例代码 首先,在模板中定义一个 textarea 元素ÿ…...
一文了解JVM的垃圾回收
Java堆内存结构 java堆内存是垃圾回收器管理的主要区域,也被称为GC堆。 为了方便垃圾回收,堆内存被分为新生代、老年代和永久代。 新创建的对象的内存会在新生代中分配,达到一定存活时长后会移入老年代,而永久代存储的是类的元数…...
Vector底层结构和源码分析(JDK1.8)
参考视频:韩顺平Java集合 Vector 类的定义说明: Vector 的底层也是一个对象数组,protected Object[] elementData;Vector 是线程同步的,即线程安全,Vectoe 类的操作方法带有 synchronized 关键字:public sy…...
uni-app+vue3学习随笔
目录相关 static文件 编译器会把static目录中的内容整体复制到最终编译包内, 非 static 目录下的文件(vue组件、js、css 等)只有被引用时,才会被打包编译。 css、less/scss 等资源不要放在 static 目录下,建议这些…...
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3+ 2025 版免费体验方案
JetBrains(全家桶: IDEA、WebStorm、GoLand、PyCharm) 2024.3 2025 版免费体验方案 前言 JetBrains IDE 是许多开发者的主力工具,但从 2024.02 版本起,JetBrains 调整了试用政策,新用户不再享有默认的 30 天免费试用…...
移远通信联合德壹发布全球首款搭载端侧大模型的AI具身理疗机器人
在汹涌澎湃的人工智能浪潮中,具身智能正从实验室构想迈向现实应用。移远通信凭借突破性的端侧AI整体解决方案,为AI机器人强势赋能,助力其实现跨行业拓展,从工业制造到服务接待,再到医疗康养,不断改写各行业…...
嵌入式硬件篇---手柄控制控制麦克纳姆轮子
文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值(psx_buf[7])4.2 右摇杆水平值(psx_buf[8])4.3 左摇杆水平值(psx_buf[5])4.4 左摇杆垂直值(psx_buf[6]&am…...
XML Schema 实例
XML Schema 实例 引言 XML(可扩展标记语言)是一种用于标记电子文件使其具有结构性的标记语言。XML Schema 是一种用于定义 XML 文档结构的机制,它定义了 XML 文档中允许的数据类型、元素和属性。本文将详细探讨 XML Schema 实例,包括其基本概念、结构、用途以及实例分析。…...
Datax-web部署文档(超详细)
Datax-web部署文档(超详细) Datax部署 # 参考官方文档 https://github.com/alibaba/DataX/blob/master/userGuid.md# 下载datax已经封装好的文件,不推荐源码自己编译 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202309/datax.…...
基于javaweb的SSM敬老院养老院管理系统(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...
专题地图的立体表达-基于QGIS和PPT的“千层饼”视图制作实践
目录 前言 一、QGIS准备基础数据 1、QGIS 相关插件 2、图层标绘操作 二、PPT中制作 1、调整图片的规格 2、设置旋转 3、添加文字 三、总结 前言 在信息爆炸的时代,数据的可视化呈现变得愈发关键,而专题地图作为传递地理空间信息的有力工具&#…...
DeepSeek-R1 论文阅读总结
1. QA问答(我的笔记) Q1: DeepSeek如何处理可读性问题? 通过构建冷启动数据(数千条长CoT数据)微调基础模型,结合多阶段训练流程(RL训练、拒绝采样生成SFT数据),并优化输…...
如何选择适合您智能家居解决方案的通信协议?
如何选择适合您智能家居解决方案的通信协议? 在开发智能家居产品时,选择合适的通信协议对于设备的高效运行及其在智能家居系统中的互操作性至关重要。市面上协议众多,了解它们的特性并在做决定前考虑各种因素是非常必要的。以下是一些帮助您…...
蓝桥杯备考:set容器用法(lower_bound)---营业额统计
如图所示,这道题的暴力解法就是枚举每天的营业额,让该营业额和前面的天的营业额依次相减取最小值这样的话我们的时间复杂度就是N平方,我们是很有可能超时的 所以我们选择用set容器的二分查找功能 我们每次遍历到一个数的时候,前…...
vue3 动态添加路由并生成左侧菜单栏
先说下思路,登录后跳转到基础页面, 每访问一个页面时,会进到路由守卫的方法 守卫进行身份验证,登录成功后才能跳转到静态路由外的页面,否则就重定向回login页面 登录后跳转到基础页面(因为基础页面包含了左…...
上下文微调(Contextual Fine-Tuning, CFT)提高大型语言模型(LLMs)在特定领域的学习和推理能力
大型语言模型(LLMs)在开放领域任务中表现出色,但在快速演变的专业领域(如医学、金融)中面临挑战: 知识更新难题:传统指令微调(Instruction Fine-Tuning, IFT)依赖显式指令,难以适应动态知识。灾难性遗忘:持续预训练(Continued Pretraining, CPT)可能导致模型遗忘已…...
L2-4 吉利矩阵
输入样例: 7 3输出样例: 666 这道题是暴力纯搜,但是很难想,我这个是看的别人的代码 #include "bits/stdc.h" using namespace std; int x[20][20]; int l, n; int cnt 0; int sumx[5], sumy[5]; void dfs(int x, in…...
⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance
Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。 定义 给定两个长度相同的字符串 A A A 和 B B B,它们的汉明距离 D ( A , B ) D(A,B) D(A,B)…...
数据可信、隐私可控:CESS 如何打造波卡生态数据新基建?
原文:https://messari.io/report/cess-network-a-deep-dive-into-programmable-data-value-infrastructure作者:Messari编译:OneBlock波卡生态一直以来以其跨链互操作性和灵活性吸引了众多创新项目,尤其是在 DePIN(去中…...
HCIA-11.以太网链路聚合与交换机堆叠、集群
链路聚合背景 拓扑组网时为了高可用,需要网络的冗余备份。但增加冗余容易后会出现环路,所以我们部署了STP协议来破除环路。 但是,根据实际业务的需要,为网络不停的增加冗余是现实需要的一部分。 那么,为了让网络冗余…...
网络安全之数据加密(DES、AES、RSA、MD5)
刚到公司时,我的工作就是为app端提供相应的接口。之前app使用的是PHP接口,对数据加密方面做得比较少。到使用java接口时,老大开始让我们使用DES加密,进行数据传输,但是后来觉得DES是对称加密,密钥存在客户端…...
Vim忍者速成秘卷:让你的键盘冒出残影の奥义
🎯 核心原理 通过 超低延迟配置 + 肌肉记忆优化 + 视觉欺骗技术,达成行云流水的操作体验。就像《火影忍者》结印般流畅! ⚡ 残影生成术(基础篇) " 🛩️ 贴地飞行模式(.vimrc 极速配置) set timeoutlen=300 " 快捷键响应时间压缩至300ms(武士刀级响应)…...
致远互联FE协作办公平台 存在SQL注入漏洞(DVB-2025-8942)
免责声明 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x01…...
通俗易懂动态表单自定义字段解决方案
动态表单自定义字段解决方案 1. 背景: 有些项目可能会有要求,客户可以自定义设计字段,并且字段还需要在后台设置可展示、可搜索。 2. 场景: 比如说报名场景,我们并不知道客户想让用户填哪些东西。下面我就举个例子&…...
CentOS7离线部署安装Dify
离线部署安装Dify 在安装 Dify 之前,请确保您的机器满足以下最低系统要求: CPU > 2 核 内存 > 4 GiB 1.安装docker和docker compose 启动 Dify 服务器最简单的方式是通过docker compose。因此现在服务器上安装好docker和docker compose…...
Dify后端结构与二次开发指南(一)
Dify 的后端基于 Python 编写,使用 Flask 作为 Web 框架,SQLAlchemy 作为 ORM(对象关系映射),Celery 作为任务队列,Flask-Login 处理用户认证和授权。以下是对 Dify 后端结构的详细介绍,以及如何…...
vscode arm拓展 keil acm5 到acm6迁移
目录 1. Arm Keil Studio Visual Studio 代码扩展用户指南(only support acm6 project)(能不迁移还是别迁移了,工程量太大啦,会出很多问题的) 1. Arm Keil Studio Visual Studio 代码扩展用户指南ÿ…...
软件工程概述、软件过程模型、逆向工程(高软45)
系列文章目录 软件工程概述、软件过程模型、逆向工程。 文章目录 系列文章目录前言一、软件工程概述二、能力成熟度模型1.能力成熟度模型CMM2.能力成熟度模型集成CMMI 三、软件过程模型1.瀑布模型SDLC2.原型化模型3.螺旋模型4.增量模型5.喷泉模型6.敏捷模型7.统一过程模型RUP 四…...
医药制造行业现状 医药制造行业内检实验室LIMS
在医药制造行业中,质量控制是确保产品安全性和有效性的关键环节。随着科技的进步和监管要求的日益严格,传统的实验室信息管理系统(LIMS)已经难以满足现代医药制造企业对高效、精准管理的需求。面对这一挑战,白码内检实…...
FX-std::list
std::list 是 C 标准库中的一个双向链表容器,定义在 <list> 头文件中。它支持在任意位置高效地插入和删除元素,但不支持随机访问。以下是 std::list 的基本用法和一些常见操作: 1. 包含头文件 #include <list> 2. 定义和初始化…...
配置安全网站
配置网站 确定是Debian系统 更新索引:apt update 安装包:apt upgrade -y 查看nginx状态:systemctl status nginx 安装:nginx:apt install nginx 启动:systemctl start nginx 在/var/www/里面创建一个…...
C/C++中对字符处理的常用函数
C语言中的 ctype.h 头文件提供了一系列字符分类和转换函数,用于高效处理字符相关操作。这些函数通过接受 int 类型参数(需为 unsigned char 或 EOF (-1)值),返回非零值表示条件正确,返回0表示错…...
深度学习分词器char-level实战详解
一、三种分词器基本介绍 word-level:将文本按照空格或者标点分割成单词,但是词典大小太大 subword-level:词根分词(主流) char-level:将文本按照字母级别分割成token 二、charlevel代码 导包࿱…...
根据开始和结束日期,获取每一天和每个月的开始和结束日期的list
获取开始日期与结束日期之间每天的list /*** 根据传入的开始时间和结束时间,筛选出所有的天的list;** param startTime* param endTime*/public Map<String, List<String>> fetchDayListBetweenStartAndEnd(String startTime, String endTime) {// 创建mapMap<…...
实时采集到的语音进行语音识别
要在.NET Framework 4.8中使用C#实现离线实时语音识别,可以使用开源库Vosk(支持离线ASR)配合音频处理库NAudio。 步骤 1:安装依赖库 1.1. 安装NuGet包: - Install-Package NAudio(处理音频输入)…...
《苍穹外卖》SpringBoot后端开发项目核心知识点与常见问题整理(DAY1 to DAY3)
目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功: 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具:Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…...
【从零开始学习计算机科学】数据库系统(十一)云数据库、NoSQL 与 NewSQL
【从零开始学习计算机科学】数据库系统(十一)云数据库、NoSQL 与 NewSQL 云数据库云服务器的服务云数据库和传统的分布式数据库的异同NoSQLNoSQL数据库的特点CAP定理NoSQL的特性NoSQL数据库的分类NoSQL的适用场景Nosql数据库实例-RedisRedis的优势MongoDBMongoDB的特点NewSQL…...
Linux入门 全面整理终端 Bash、Vim 基础命令速记
Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵?于是乎,这份手册就是为你准备的高效学习指南!我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式,让你快速学…...
LInux基础--apache部署网站
httpd的安装 yum -y install httpdhttpd的使用 启动httpd systemctl enable --now httpd使用enable --now 进行系统设置时,会将该服务设置为开机自启并且同时开启服务 访问httpd 创建虚拟主机 基于域名 在一台主机上配置两个服务server1和server2,其…...
重生之我在学Vue--第12天 Vue 3 性能优化实战指南
重生之我在学Vue–第12天 Vue 3 TypeScript 类型系统深度整合 文章目录 重生之我在学Vue--第12天 Vue 3 TypeScript 类型系统深度整合前言一、TypeScript与Vue3的集成1.1 项目初始化配置1.2 类型配置文件解析 二、类型声明实战2.1 Props类型约束2.2 Emit事件类型2.3 组合式AP…...
Go 语言封装 HTTP 请求的 Curl 工具包
文章目录 Go 语言封装 HTTP 请求的 Curl 工具包🏗️ 工具包结构简介核心结构体定义初始化函数 🌟 功能实现1. 设置请求头2. 构建请求3. 发送请求4. 发送 GET 请求5. 发送 POST 请求6. 发送 PUT 请求7. 发送 DELETE 请求8. 读取响应体 💡 实现…...
【Go】Go MongoDB 快速入门
1. MongoDB 简介 1.1 MongoDB 介绍 由于我们时常需要存储一些大文本数据(比如文章内容),存储到一些关系型数据库可能不是最好的选择,这个时候就需要引入一些 NoSQL(Not Only SQL),比如 MongoD…...
Java --- 根据身份证号计算年龄
介绍 根据身份证号计算年龄 Java代码 /*** 根据身份证号计算年龄* param birthDateStr* return*/public static int calculateAge(String birthDateStr) {try {birthDateStrbirthDateStr.substring(6,68);// 定义日期格式SimpleDateFormat sdf new SimpleDateFormat("…...
[LeetCode热门100题]|137,260,268,面试17.19
1、137 只出现一次数字|| 1、题目描述 137 只出现一次数字||https://leetcode.cn/problems/single-number-ii/description/ 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你…...