MySQL学习笔记5: MySQL表的增删查改 (进阶)

目录

  • 前言
  • 1. 数据库约束
    • 1.1. 约束类型
      • not null 约束
      • unique 唯一约束
      • default 默认值约束
      • primary key 主键约束
      • foreign key 外键约束
  • 2. 表的设计
    • 2.1. 实体之间的关系
      • 一对一
      • 一对多
      • 多对多
  • 3. 新增
  • 4. 查询
    • 4.1. 聚合查询
      • 4.1.1. 聚合函数
      • 4.1.2. group by 子句
      • 4.1.3. having
    • 4.2. 联合查询 (多表查询)
      • 4.2.1. 内连接
      • 4.2.2. 外连接 (比较少用)
      • 4.2.3. 自连接 (比较少用)
      • 4.2.4. 子查询 (嵌套查询, 不推荐使用)
      • 4.2.5. 合并查询

前言

进阶内容主要是针对查询

新增,修改,删除基本没有进阶的内容了

1. 数据库约束

约束就是创建表的时候,给这个表指定的一些规则,后续插入/修改/删除时都要保证数据是能够遵守这些规则的

引入规则,是为了进行更强的数据检查/校验

1.1. 约束类型

如果后续插入/修改的数据不符合约束类型,就会报错

not null 约束

指示某列不能存储 NULL 值 (从选填项变成必填项)

在这里插入图片描述

此时创建了一个没有任何约束的表 student, 可以往里面插入空值,此时我们删除 student 表,重新创建一个有约束的 student 表

在这里插入图片描述

在这里插入图片描述

此时是对列 id 进行了 not null 约束,对 student 表的描述中, id 中不能为 NULL, 但 name 可以为 NULL

在这里插入图片描述

在这里插入图片描述

unique 唯一约束

保证某列的每行的值必须是唯一的, unique 可以指定多个列

在这里插入图片描述

如果我再插入 id 为 1 , name 为 张三 还是可以的,因为 此时 id 和 name 都没有 unique 约束

在这里插入图片描述

有时候我们会期望数据是唯一的,不要重复出现,就可以加上 unique 约束

在这里插入图片描述

UNI 就是 unique 的缩写,表示 id 这一列的每个数据都是唯一的

在这里插入图片描述

duplicate 重复的

加上 unique 约束之后,后续进行插入/修改的时候,都会先进行查询,看看当前这个值是否已经存在

在这里插入图片描述

default 默认值约束

规定没有给列赋值时的默认值

默认情况下的默认值就是 NULL

在这里插入图片描述

在这里插入图片描述

此时没有给列赋值时的默认值就是 NULL,我们可以用 default 调整默认值,这里我们删除这个表,重新创建一个有 default 约束的表

在这里插入图片描述

然后再进行指定列插入

在这里插入图片描述

很多时候,如果返回一个 null,是一个不太好的体验,尤其是不应该把 null 这样的字眼呈现到普通用户的眼前

primary key 主键约束

primary key 相当于 not null 约束 和 unique 约束 的结合

主键 是数据库中最重要的约束了

用来作为一个记录的身份标识 (就像身份证号)

注意: 一个表当中只能有一个 primary key

在这里插入图片描述

在这里插入图片描述

主键是不允许重复的,我们怎么保证我们输入的数据是不重复的呢? mysql 自身给我们提供了一种机制 - 自增主键

在这里插入图片描述

当前这个 id 就不需要用户自己指定了,可以交给数据库,让数据库自行进行分配,数据库会按照自增的方式来分配 1,2,3,4…(前提是自增的数据得是整型才能自增)

在这里插入图片描述

这里的 id 为什么可以插入 null,被主键约束不是不能为空吗? 插入 null 为了可以让数据库自行分配

这里的 id 手动指定也是可以的

在这里插入图片描述

当手动指定了之后,还是要确保,当前你插入的结果是不重复的

在这里插入图片描述

每次使用 null 的方式插入自增主键的时候,数据库会根据当前这一列的最大值 的基础上继续进行递增.而且这里的递增是不会重复利用之前的值的,除非手动插入一个 id 为 5 的数据 …

在这里插入图片描述

上述自增主键,只能在单个数据库下生效

如果数据库是由多个 mysql 服务器构成的集群,此时,自增主键就无法生效了

foreign key 外键约束

描述的是两个表之间的关联关系,为了方便举例,我们创建两个有关联的表 class 和 student

在这里插入图片描述

创建3个班级

在这里插入图片描述

创建3个学生

在这里插入图片描述

像王五这个同学,不在班级表中存在,因此王五同学就是一个不太科学的非法数据

引入外键约束,就是为了解决这样的问题

希望学生表中的 classId 都要在班级表中存在

就可以使用外键约束进行校验

在这里插入图片描述

外键约束与其他约束的写法不同;

其他约束都是那一列需要约束,就创建到那一列的后面,

外键约束,则是写到最后的,把所有前面的列都定义好了之后,在最后面通过 foreign key 创建外键约束

格式是: foreign key (指定本表哪个列) references 其他表名(其他表名中的列)

此时就要求: 本表中这个列的数据必须要在引用的外面的表的对应列中存在

这个例子的意思就是每一个同学的 classId 得在班级表中的 classId 里存在

这个情况下,也可以认为: 班级表约束了学生表

把班级表这种约束别人的表,称为 ‘父表’ (parent table)

把学生表这种被别人约束的表,称为 ‘子表’ (child table)

这个被引用的列 classId ,得带有索引,才能被子表引用,因为 class 表里有了主键约束之后,就会自动创建出索引,能够加快查询速度,要求父表要有主键约束才能引用

在这里插入图片描述

constraint 约束

由于此时班级表是空着的,1 这个 classId 一定不在班级表中存在

在这里插入图片描述

引入外键约束之后,新增一个记录,就会先在对应的父表中查询,看看是否存在,如果不存在,就会报错

添加或修改不满足约束的数据都会报错

表面上是父表约束子表,实际上是双向约束,如果尝试删除父表中的数据,就可能有问题

在这里插入图片描述

想要删除父表中的数据,就必须先删除子表中的对应的数据,确保子表中没有数据引用父表里的数据,才能真正执行删除

2. 表的设计

数据库设计就是根据需求,来把你需要的表给创建出来 (有几个表, 每个表里都有是什么…)

设计原则:

  1. 先根据需求,找到实体 (像是面向对象,一般每个实体都得安排一个表)
  2. 梳理清楚实体之间的关系

2.1. 实体之间的关系

实体之间的关系有4种:

  • 一对一
  • 一对多
  • 多对多
  • 没关系(两个实体毫不相干)

一对一

模版:

一个学生,可以有一个学生账户

一个学生账户,也只能给一个学生使用

一对多

模版:

一个班级,可以包含多个学生

一个学生,只能从属于一个班级

多对多

模版:

一个学生,可以选择多门课程

一个课程,也可以被多个学生选择

多对多可以再搞个第三个表将两个表联系起来,可以实现多对多的关系

3. 新增

其实是把插入语句和查询语句结合到一起

这里是以查询的结果,来作为插入的值,比如下面的 insert into 表名 select …, 这里的select 代替了 values… ,表示将查询到的结果直接插入到这个表中

在这里插入图片描述

这里需要注意查询出来的结果集合,列数和类型需要互相匹配,列名不相同没关系

4. 查询

4.1. 聚合查询

4.1.1. 聚合函数

在之前的基础查询当中有说过表达式查询的例子: select name, chinese + math + english from …

这里的 chinese + math + english 是列与列之间进行运算.

而聚合查询是行与行之间进行运算,此处行之间的运算有一定的限制,不像表达式查询写的那么自由

聚合查询只能通过 SQL 提供的一些聚合函数 (库函数) 来进行操作

下面列举一些最常用的聚合函数:

  • count(表达式)
  • sum(表达式)
  • avg(表达式)
  • max(表达式)
  • min(表达式)

sum,avg,max,min中的表达式得是数字才有意义

接着还是举个例子来展示聚合函数的使用效果:

举例用的数据源码:

-- 创建考试成绩表
DROP TABLE IF EXISTS exam_result;
CREATE TABLE exam_result (id INT,name VARCHAR(20),chinese DECIMAL(3,1),math DECIMAL(3,1),english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES(1,'唐三藏', 67, 98, 56),(2,'孙悟空', 87.5, 78, 77),(3,'猪悟能', 88, 98.5, 90),(4,'曹孟德', 82, 84, 67),(5,'刘玄德', 55.5, 85, 45),(6,'孙权', 70, 73, 78.5),(7,'宋公明', 75, 65, 30);

在这里插入图片描述

在这里插入图片描述

count() 聚合函数操作就相当于:

  1. 执行 select * from exam_result
  2. 再使用 count 来计算结果的行数

注意: 如果查询结果带有 null 值,此时 null 值的记录是不会计入计数的,但在使用 count(*) 的时候,如果有全是 null 的行,也会记录起来

在这里插入图片描述

在这里插入图片描述

sum会把这一列的值全部在一起进行相加,但是这个过程中,会把 null 给忽略掉

在这里插入图片描述

在这里插入图片描述

avg, max, min 的用法和 sum 基本类似的

在这里插入图片描述

如果我想查询整个表里,语文成绩最低的同学…

在这里插入图片描述

大部分情况,聚合的列和非聚合的列,不能在一起配合使用,有一种情况除外 (group by)

一种比较简单直观的写法:

在这里插入图片描述

4.1.2. group by 子句

刚才的聚合,是把整个表的所有行,都聚合在一处了

但是有时候,也可以把所有的行,分成若干组,每个组都能分别进行聚合

格式: … group by 列名

效果就是把这个指定的列,把值相同的记录都划分到一组,针对这些组就可以分别进行聚合查询了

分组操作,往往就是和 聚合 配合使用的

在这里插入图片描述

这里创建了一个员工表当做例子, 其中 role 列里有些人的岗位都是一样的,有时候就需要通过岗位进行一些查询或者统计相关的工作,这就可以使用 group by 了

比如查询每个岗位的平均薪资是多少

在这里插入图片描述

这个 role 是 没有使用聚合函数的列,本来是不能够和 聚合函数 一起使用的,但是 role 被 group by 了

按照 role 来 group by ,所以写 select 列名的时候,可以写 role ,每个组里的 role 都是相同的 ,但是不能写 id / name

在这里插入图片描述

4.1.3. having

针对上面的分组查询,也是可以使用条件的

针对的查询结果进行条件筛选:

  1. 分组之前的条件,使用 where 来表示
  2. 分组之后的条件,使用 having 来表示

having 和 where 的用法是一样的

比如:

  1. 统计除了张三之外的人, 每个岗位的平均薪资 , 这里是在分组之前,先把张三除去了,这个条件不必分组就能得到,这个时候就用 where
    在这里插入图片描述

  2. 统计每个岗位的平均薪资,刨除平均薪资 >= 20000 的情况, 因为平均薪资必须要分组之后, 才能计算, 这个时候就用 having

    在这里插入图片描述

  3. 查询每个岗位的平均薪资,除去 张三,也除去 平均薪资 >= 20000 的情况, 这个时候 where 和 having 就得同时使用了

    在这里插入图片描述

4.2. 联合查询 (多表查询)

前面的查询,都是针对一张表的

多表查询,就要比单表查询更复杂一些

多表查询是对多张表的数据取笛卡尔积

笛卡尔积的列数,就是之前两个表的列数之和

笛卡尔积的行数,就是之前两个表的行数之积

如果表更多,就可以两两进行笛卡尔积

多表联合查询的核心操作就是进行笛卡尔积

比如使用两个表进行联合查询,就是先把这两个表计算笛卡尔积,然后再指定一些条件,来实现需求中的一些查询结果

实际开发中,笛卡尔积(多表查询) 一定要慎重使用,使用之前一定要评估好笛卡尔积的规模,如果基于两个很大的表进行笛卡尔积,可能就会产生大量的运算和 IO,可能就会把数据库给搞挂了…

下面通过创建两个表来演示:

在这里插入图片描述

SQL 中只需使用 select …from 多个表名 就能进行笛卡尔积

在笛卡尔积的基础上, 使用 where 条件表示出来, 得到的结果,就全都是有意义的数据了

在这里插入图片描述

像 student.classId = class.classId 这种条件就叫做连接条件,笛卡尔积就相当于把多个表给连接到一起了

在进行多表查询的时候,往往就是:

  1. 计算笛卡尔积
  2. 指定连接条件
  3. 根据需求指定其他条件
  4. 针对列进行精简/使用聚合函数

为了方便举例多表查询, 这里重新构造4张表:

举例用的题目数据源码:

drop table if exists classes;
drop table if exists student;
drop table if exists course;
drop table if exists score;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_mail 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_mail, 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);

在这里插入图片描述

在这里插入图片描述

下面在创建 classes 表的时候, desc需要加上反引号,因为在 SQL 中, desc 是降序的关键字
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这四个表分别是学生, 班级, 课程, 分数

班级和学生是一对多的关系, 学生和课程是多对多的关系

分数表就是课程和同学之间的关联表

4.2.1. 内连接

内连接和外连接的区别在本文章的 4.2.2. 外连接中有说明

以下3个例题都是内连接

例题1: 查询’许仙’同学的成绩

分析: 学生名字在学生表中, 成绩在成绩表中,需要将学生表和成绩表进行联合查询

第一种写法: select * from 表1,表2 where 条件…;

  1. 笛卡尔积: select * from student, score;

  2. 指定连接条件: select * from student, score where student.id = score.student_id;

  3. 根据需求指定其他条件: select * from student, score where student.id = score.student_id and student.name = ‘许仙’;

  4. 针对列进行精简 / 表达式 / 使用聚合函数: select student.name, score.score from student, score where student.id = score.student_id and student.name = ‘许仙’;

    在这里插入图片描述

第二种写法: select * from 表1 join 表2 on 条件…;

  1. 计算笛卡尔积: select * from student join score;
  2. 指定连接条件: select * from student join score on student.id = score.student_id;
  3. 根据需求指定其他条件: select * from student join score on student.id = score.student_id and student.name = ‘许仙’;
  4. 针对列进行精简 / 表达式 / 使用聚合函数: select student.name, score.score from student join score on student.id = score.student_id and student.name = ‘许仙’;在这里插入图片描述

例题2: 查询每个同学的总成绩,以及同学的个人信息

分析:

  • 此时成绩是按照 行 的方式排列,要想加和,就需要使用聚合查询了

  • 需要每个同学的总成绩,就要按照 同学 的 id 进行 group by (名字可能重名)

解题:

  1. 计算笛卡尔积: select * from student, score;

  2. 指定连接条件: select * from student, score where student.id = score.student_id;

  3. 根据需求指定其他条件: 由于此处是需要所有同学的总成绩,不需要对同学进行进一步的筛选,所以没有此步骤

  4. 针对列进行精简 / 表达式 / 使用聚合函数: select student.id, student.name, sum(score.score) as total from student, score where student.id = score.student_id group by student.id;

    在这里插入图片描述

例题3: 查询所有同学的成绩,以及同学的个人信息

分析: 需要 student表, course表, score表 这三张表的连接,要两个连接条件, 观察这三个表发现: score表可以将 student表 和 course 表联系起来

解题:

  1. 计算笛卡尔积: select * from student, course, score;

  2. 指定连接条件: select * from student, course, score where student.id = score.student_id and course.id = score.course_id;

  3. 根据需求指定其他条件: 我们已经通过第二步就可以得到所有的有效信息,这一步省略

  4. 针对列进行精简 / 表达式 / 使用聚合函数: select student.name as studentName, course.name as courseName, score.score from student, course, score where course.id = score.course_id and student.id = score.student_id;在这里插入图片描述

    在这里插入图片描述

4.2.2. 外连接 (比较少用)

外连接的实际应用很少

外连接也是 多表查询 的一种体现形式

多数情况下,内连接和外连接,查询结果没啥区别,只有一些特殊情况下,查询结果才会存在差异

这里再创建两个表举例:

在这里插入图片描述

student 表 和 score 表 的数据是一一对应的

学生表中的任何一个记录都能在分数表中体现出来

反之,分数表中的每个记录,也能在学生表中体现出来

此时,内连接和外连接的结果都是一样的

内连接的两种写法:

在这里插入图片描述

join 前面还可以加上 inner ,inner join 就表示内连接, inner 可以省略

外连接 , 分成 左外连接 (left) 和 右外连接 (right)

在这里插入图片描述

在当前数据的情况下,内连接和外连接的结果是一样的

如果对这两个表的数据进行修改,让这两个表的记录不再一一对应,此时内连接和外连接的结果就不同了

在这里插入图片描述

此时学生表中的王五没有在成绩表中对应,成绩表中的 4 号学生 id 也没有在学生表中对应 (这种情况属实是不太常见的情况)

内连接的结果: 对于内连接来说,得到的结果,必须是同时在两个表中都存在的数据

在这里插入图片描述

外连接的结果:

  • 左外连接, 就是以左表为主, 保证左侧的表中的每个记录都体现在最终结果里,如果这个记录在右表中没有匹配,就把对应的列填成 NULL
  • 右外连接以右表为主,会保证右表中的每个记录都存在,如果对应的数据在左表中没有,就会填成 NULL

在这里插入图片描述

4.2.3. 自连接 (比较少用)

自连接: 同一张表自己和自己进行笛卡尔积

有的时候, 要想进行条件查询, 条件一定是列和列之间, 不能是行和行之间指定条件.

有时候就想针对 行 之间指定条件, 此时就可以通过自连接,把 行 关系 转成 列 关系…

例题: 显示所有 计算机原理的成绩 比 Java成绩 高的成绩信息

在这里插入图片描述

分析: 在这个例子中,要想完成不同科目的比较,就需要比较行之间的大小 (在 sql 中无法直接做到), 就只能把行转成列

解题: 先自己和自己进行笛卡尔积

查询的两个表名不能相同,解决办法: 给这个表起不同的别名 (alias)

在这里插入图片描述

然后指定条件: 此处要关注的是每个学生自己的两门课的成绩情况,所以就按照学生 id 作为连接条件

在这里插入图片描述

然后需要筛选出所有左表为 3 ,右表为 1 的记录 (等价于筛选左表为 1,右表为 3 的记录)

在这里插入图片描述

有修java和计算机原理的所有学生都筛选完毕,接下来就是分数的比较

在这里插入图片描述

如果要显示名字还要和学生表进行笛卡尔积

在这里插入图片描述

最后可以再对列进行精简

在这里插入图片描述

4.2.4. 子查询 (嵌套查询, 不推荐使用)

把多个简单的 sql, 合并成一个 复杂 sql

例题: 查询与 ‘‘不想毕业’’ 同学的同班同学

在这里插入图片描述

分析: 先找到 ‘‘不想毕业’’ 的班级 id, 再拿着这个 班级id 来进行查询其他同学

在这里插入图片描述

以上是正常的做法

因为 classes_id = 1 中的1是从 select classes_id from student where name = ‘不想毕业’; 这个 sql 语句得来的, 可以把这个语句看做一个整体, 替换到 1 这个位置上, 这两个 sql 合并成一个 sql 就是子查询

在这里插入图片描述

4.2.5. 合并查询

把两个查询的结果集合,合并成一个集合

使用 union 关键字来完成

格式比如: select 1 union select 2

要求两个 select 查询的结果集, 列数和类型要匹配, 列名不影响,最终的列名就是第一个 select 的列名

例题: 查询 id 小于 3, 或者名字为 ‘英文’ 的课程

在这里插入图片描述

如果都是查询同一个表,可以用 or 解决,但是 union 左右两侧 sql 可以查询两个不同的表, or 可不行

union 还会自动对查询结果进行去重

union all 不会去重


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨境知识分享:什么是动态IP?和静态IP有什么区别?

对于我们跨境人来说,清楚地了解IP地址、代理IP等这些基础知识,并学会正确地使用IP地址对于保障店铺的安全性和稳定性至关重要,尤其是理解动态IP和静态IP之间的区别,以及如何利用这些知识来防止账号关联,对于每个电商卖…

嵌入式学习33-网络通信

网络: 数据传输,数据共享 1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式(数据…

Day22 Linux高级编程 --- Makefile

Makefile简介: 1.工程管理工具 2.指定目录下编写Makefile文件或者makefile 3.在目录下输入make 4.调用对应目录下的makefile文件 5.根据文件设定的编译规则来编译代码 Makefile语法: 1.格式: 要生成的文件:依赖的文件 生成方式 …

【STM32+OPENMV】二维云台颜色识别及追踪

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容,详情见【STM32HAL】与OpenMV通信 有关七针OLED屏显示内容,详情见【STM32HAL】七针OLED(SSD1306)配置(SPI版) 二、所用工具 1、芯片:STM32F407ZGT6 2、CUBEMX配置软件 3、KEIL5 4…

GDOI2024游记

Day0 中午一点钟从学校出发去东莞,大概坐了一个多小时车,两点半多到酒店。住的八方精选酒店(ljh说他们住九方精选酒店,乐),说的是景区酒店,但打开外窗,近处是简陋的阳台&#xff0c…

上位机图像处理和嵌入式模块部署(qmacvisual入门)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 虽然我们前面学习了很多的知识点,比如说在windows这边,用qt写界面,用opencv写图像处理代码;在linux…

PHP语言常见面试题:PHP中的数据类型有哪些?请举例说明。

在PHP中,有几种基本的数据类型,它们包括: 字符串(String):字符串是字符的序列,由零个或多个字符组成。在PHP中,字符串可以包含任何字符,包括字母、数字、空格、标点符号、…

[unity] xLua 热更新 【个人复习笔记/有不足之处欢迎斧正/侵删】

lua解析器 void Start(){//Lua解析器 能够让我们在Unity中执行Lua//一般情况下 保持它的唯一性LuaEnv env new LuaEnv();//执行Lua语言env.DoString("print(你好世界)");//执行一个Lua脚本 Lua知识点 :多脚本执行 require//默认寻找脚本的路径 是在 Res…

cuda python torch 虚拟环境配置

以下是Pytorch和CUDA对应的版本 以下是Pytorch和Python对应的版本 检查cuda与Python版本是否匹配 import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.empty(3,4,devicecuda))cuda 删除cuda conda uninstall cudatoolkit --forceconda u…

MyBatis三个经典问题

1. Mybatis的执行流程 MyBatis 是一个流行的 Java 持久化框架,提供了对象关系映射 (ORM) 和 SQL 映射的功能,使开发者能够更加方便地与数据库交互。MyBatis 的执行流程大致如下: 配置阶段: 加载配置文件: MyBatis 通过读取配置文件&#xff…

蓝桥杯2013年-幸运数(C语言-链表模拟)

题目描述 幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的“筛法”生成 。 首先从1开始写出自然数1,2,3,4,5,6,.... 1 就是第一个幸运数。 我们从2这个数开始。把所有序号能被2整除的项删除,变为: 1 _ 3 _ 5 _ 7 _ 9 .... 把…

支付宝小程序模板开发,实现代小程序备案申请

大家好,我是小悟 支付宝小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。 服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一…

Docker入门——安装部署(openEuler)、镜像加速

安装 1)依赖的基础环境 64 位CPU Linux kernel(内核) 3.10 Linux kernel cgroups and namespaces 我用的是openEuler,所以直接yum安装(推荐,因为二进制安装,docker命令中补全操作要另外安装软件) [rootlocalhost ~]# yum -y…

【AIGC调研系列】DevOps过程中依靠AIGC提升效率的具体实例

在DevOps过程中利用AIGC提升效率的具体实例包括: 智能排查流水线错误:云效工程师们与阿里云通义大模型合作,通过基于AIGC的工具辅助流水线错误排查,提高了DevOps流水线运行的效率和准确性[5]。自动化编程提高研发效率&#xff1a…

「经验」在博途中 是否可以在 LAD与STL 语言之间进行切换

用惯了STEP7,准确来说是SIMATIC Manager进行编程开发的同学,在转战TIA portal后,通常会经历一段“晦涩”的过度期,包括指令库的微小变动、工作界面的大改等等。 又比如:“在博途中,怎么快速切换LAD与STL语…

NVMe管理命令为何不用SGL?-2

在IO数据传输中,是否选择SGL可以根据自身场景的需要。SGL提供的是一种高效且灵活的方式来描述非连续的内存区域,这对于现代高性能存储系统至关重要,尤其是在处理大数据块或者随机小I/O操作时具有明显优势: 高效的数据传输&#xf…

课题学习(二十)----阅读《近钻头井斜动态测量重力加速度信号提取方法研究》论文

摘要:利用加速度计进行近钻头井斜动态测量时, 钻具的高速旋转、 井下强振动、强冲击环境给重力加速度测量带来极大干扰,如何从干扰噪声中有效提取重力加速度信号对于提高井斜角和工具面角的测量精度至关重要。 根据重力加速度径向和切向分量为…

【代码随想录】day1 数组

因为学计算机语言是属于半路出家,在接触数据结构之前,我只了解数据的类型,从没有了解过不同数据类型的存储方式。数组、链表等等因为不同的存储方式,展现出不同的优缺点,以适应不同的用途。 代码随想录是属于把饭喂到嘴…

Altium Designer 22 性能优化

目录 AD22 使用起来很卡,完全受不了,卡到我的快捷鼠标宏都无法使用,来试着优化一下它。 每点完一步,都需要点击应用,否则不下心关掉了会很难受 打开右上角齿轮进入设置,取消勾选这几个勾: 接…

java spring 03 启动细节

spring启动类ClassPathXmlApplicationContext,读取xml文件并且创建bean public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, Nullable ApplicationContext parent)throws BeansException {super(parent);setConfigLocations(confi…