MySQL基础- 多表查询 和 事务

news2024/11/20 20:27:09

目录

  • 多表查询
    • 多表关系
    • 多表查询概述
    • 多表查询的分类
      • 内连接
      • 外连接
      • 自连接
      • 联合查询union,union all
      • 子查询
        • 标量子查询
        • 列子查询
        • 行子查询
        • 表子查询
    • 综合练习
    • 小结
  • 事务
    • 事务简介
    • 事务的操作
    • 四大特性ACID
    • 并发事务问题
    • 事务的隔离级别
    • 小结

多表查询

之前的SQL语句里的DQL只能进行单表查询,不能多表查询

多表关系

项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,表与表之间的关系大致有以下几种:

  1. 一对多(或多对一)
  2. 多对多
  3. 多对一
  • 一对多(多对一)

    在一对多(多对一)的关联关系中,比较典型的就是例如:部门与员工之间的关系

    关系:一个部门对应多个员工,一个员工对应一个部门

    实现:在多的一方建立外键,指向单个的一方的主键

    例如:在员工的一方建立外键,指向部门的主键
    在这里插入图片描述

  • 多对多

    在多对多的关联关系中,比较典型的就是例如:学生与课程的关系

    关系:一个学生可以选修多个课程,一门课程也可以供多个学生选择

    实现:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键

    例如:在学生表和课程表之间创建一个中间表(学生课程关系表),这个中间表有两个外键,分别对应学生表的主键和课程表的主键
    在这里插入图片描述

use onesql;
create table student(
    id int primary key auto_increment comment 'ID',
    name varchar(10) not null comment '姓名',
    no varchar(10) comment '学号'
)comment '学生表';

create table course(
    id int primary key auto_increment comment 'ID',
    name varchar(10) comment '课程'
)comment '课程表';

create table stu_cou(
    id int primary key auto_increment comment 'ID',
    stu_id int comment '学生id',
    cou_id int comment '课程号'
)comment '学生课程关系表';

insert into course(name)values ('java'),('高数'),('大物'),('c++');
insert into student(name,no)values ('jack',001),('tom',002),
('rose',003),('jams',004);
insert into stu_cou(stu_id, cou_id) values (1,1),(1,2),(2,1),(2,3),
(3,3),(3,4),(4,1),(4,3);

alter table stu_cou add constraint stuId foreign key (stu_id)
references student(id);
alter table stu_cou add constraint couId foreign key (cou_id)
references course(id);

datagrip的图形化界面
在中间表打开图
在这里插入图片描述

在这里插入图片描述

  • 一对一

    在一对一的关联关系中,比较典型的就是例如:用户和用户的详细信息

    关系:一对一关系多用于单表的拆分,将一张表的基础字段放在一张表中,其他的详情字段放在另一张表中,以提升操作效率

    实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE–unique)

    例如:下图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

create table tb_user(
    id int primary key auto_increment comment 'ID',
    name varchar(10) comment '姓名',
    age int comment '年龄',
    gender char(1) comment '1:nan 2:nv',
    phone char(11) comment '手机号'
)comment '基本信息';

create table tb_user_edu(
    id int primary key auto_increment comment 'ID',
    degree varchar(20) comment '学历',
    major varchar(50) comment '专业',
    school1 varchar(50) comment '小学',
    school2 varchar(50) comment '中学',
    school3 varchar(50) comment '大学',
    userid int unique comment '用户id',
    constraint fk_userid foreign key (userid)references tb_user(id)
)comment '基本信息';

-- 下面原本还应该有插入数据,但是太繁琐,所以没写

多表查询概述

指从多张表中查询数据
语法:

-- 直接这样查询就会使表1.表2的数据全部相乘
-- 例如,表1为员工表,有10个员工(10条数据),表2为部门表,有6个部门(6条数据),
-- 那么直接使用下面的方式查询出的结果就会有60条数据,也就是所谓的笛卡尔积
select 字段列表 from1,表2...;

笛卡尔积:笛卡尔乘积是指在数学中,两个集合A和B的所有组合情况,
在这里插入图片描述

所以,在进行多表查询时需要消除无效的笛卡尔积,实际的消除方法就使用where条件,使多表中关联的外键进行联系。

例如:还是表1为员工表,有10个员工(10条数据),表2为部门表,有6个部门(6条数据),在表1中有一个外键字段dept_id与部门表的主键(id)相关联,在进行多表查询时,就可以在where条件中加上 dept_id与部门表的主键(id)相等这一条件,这样就可以消除多余的笛卡尔积;

select * from1,表2 where1.dept_id=2.id;

这样执行后就不会有多余的笛卡尔积

多表查询的分类

  • 多表查询主要分为两类:

    连接查询子查询

  • 连接查询
    连接查询又分为内连接,外连接和自连接

    内连接:相当于查询A,B交集部分的数据
    外连接:

      左外连接:查询左表所有数据,以及两张表交集部分数据
      右外连接:查询右表所有数据,以及两张表交集部分数据
    

    自连接:当前表与自身的连接查询,自连接必须使用表别名
    在这里插入图片描述

内连接

内连接查询的是两张表交集部分的数据

  • 内连接查询语法:

    隐式内连接:

    SELECT 字段列表 FROM1,表2 WHERE 条件...;
    select 字段列表 from1,表2 where 条件...;
    

    显式内连接:

    SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件...;
    select 字段列表 from1 [inner] join2 on 连接条件...;
    

演示:

create table department(
    id int primary key auto_increment comment 'ID',
    dept_name varchar(8) comment '部门'
)comment '部门表';
insert into department(dept_name)values ('主管部'),('营销部'),('软件部'),('硬件部'),('财政部');

alter table emp add constraint fk_deptTwo_id foreign key (dept_id)references department(id);


drop table emp;
create table emp(
    id int comment '编号',
    workno varchar(10) comment '工号',
    name varchar(10) comment '姓名',
    gender char(1) comment '性别',
    age tinyint comment '年龄',
    idCard char(18) comment '身份证号',
    workAddress varchar(50) comment '工作地址',
    entryDate date comment '入职日期',
    dept_id int comment '部门号',
    constraint fk_dp_id foreign key (dept_id)references department(id)
)comment '员工信息表';
insert into emp values 
(1,'1','张三','男',20,'12345678901234567','北京','2000-01-01',1),
(2,'2','张四','女',25,'12345678901234567','北京南','2000-02-01',3),
(3,'3','李四','女',35,'12345678901234567','北京北','2000-03-01',5),
(4,'4','李1','女',32,'12345678901234567','北京','2000-04-01',2),
(5,'5','李92','男',21,'12345678901234567','北北','2000-05-01',1),
(6,'6','李3','女',22,'12345678901234567','京北','2000-06-01',4),
(7,'7','李4s','男',23,'12345678901234567','北','2000-07-01',4),
(8,'8','李5','女',35,'12345678901234567','北京北','2000-08-01',5),
(9,'9','李61','男',37,'12345678901234567','北京1北','2000-09-01',1),
(10,'10','李67','女',35,'12345678901234567','北2京北','2000-10-01',2),
(11,'11','李7','男',37,'12345678901234567','北京北','2000-11-01',2),
(12,'12','李12','女',25,'12345678901234567','北京是北','2000-09-01',3),
(13,'13','李21','男',15,'12345678901234567','北是京北','2000-03-01',4),
(14,'14','李123','女',25,'12345678901234567','北上述京北','2000-01-01',3),
(15,'15','李32','男',88,'12345678901234567','北京北说','2000-02-03',1),
(16,'16','李19','男',95,null,'北京北2','2000-09-12',2);

//隐式内连接
select *from emp,department where department.id=emp.dept_id;
//显式内连接
select *from emp inner join department on department.id=emp.dept_id;

外连接

外连接分为左外连接和右外连接

这里on后面的条件是外键和主键之间的条件,如果是筛选的条件的话,还需要再写在where后面

  • 左外连接
    查询表1的所有数据,包括表1和表2交集的数据(这里的交集就是相关联的数据,像是外键那样)
SELECT 字段列表 FROM1 LEFT [OUTER] JOIN2 ON 条件...WHERE...;
select 字段列表 from1 left [outer] join2 on 条件...where...;
  • 右外连接
    查询表2的所有数据,包括表1和表2交集的数据(这里的交集就是相关联的数据,像是外键那样)
SELECT 字段列表 FROM1 RIGHT [OUTER] JOIN2 ON 条件...WHERE...;
select 字段列表 from1 right [outer] join2 on 条件...where...;

例子:

-- 查询emp表的所有数据,和对应的部门信息(左外连接)
select * from emp left join department d on emp.dept_id = d.id;
-- 查询department表的所有数据,和对应的员工信息(右外连接)
select d.*,e.* from emp e right join department d on e.dept_id = d.id;

自连接

语法:

SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件...;
select 字段列表 from 表A 别名A join 表A 别名B on 条件...;

自连接查询,可以是内连接查,也可以是外连接查
即自连接也可以使用左外或右外的形式

SELECT 字段列表 FROM 表A 别名A LEFT/RIGHT JOIN 表A 别名B ON 条件...;
select 字段列表 from 表A 别名A left/right join 表A 别名B on 条件...;

自连接中表必须起别名

自连接的作用主要是作用于一张表上的关系,查询同一张表上的不同行的信息,例如,一张员工表上有两个字段,第一个字段是id,第二个字段是领导id,使用自连接就可以将领导id与对应的id连接起来
在这里插入图片描述

联合查询union,union all

对于联合查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

语法:

SELECT 字段列表 FROM 表A ...
UNION[ALL]
SELECT 字段列表 FROM 表B...;
-- 这段程序会将上面对表A的查询结果和对表B的查询结果合并起来,形成一个新的查询结果集

案例:

-- 1.将workno小于等于10的员工和年龄大于30的员工全部查询出来
select * from emp where workno<=10
union
select *from emp where age>=30;
-- union后不跟all,重复的数据就不会显示,如果加上all,重复的数据就会显示

注意:联合查询时,多张表的列数需要保持一致,所以要求查询的字段列表是一致的。

子查询

概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询
语法:

SELECT * FROM t1 WHERE column1=(SELECT column1 FROM t2);
select *from t1 where column1 =(select column1 from t2);
-- 括号内部的语句就成为子查询语句,
-- 子查询外部的语句,即=左边的语句,可以是SQL语句的任意形式
-- 例如 INSERT/UPDATE/DELETE/SELECT的任何一个
  • 根据子查询的结果不同,可以将子查询分为:
    1.标量子查询(子查询结果为单个值)

    2.列子查询(子查询结果为一列)

    3.行子查询(子查询结果为一行)

    4.表子查询(子查询结果为多行多列)

根据子查询出现的位置,可以将子查询分为:WHERE(where)之后,FROM(from)之后,SELECT(select)之后的子查询

标量子查询

概念:
标量子查询返回的结果是单个值(数字,字符串,日期等),最简单的子查询形式

  • 标量子查询常用的操作符:
    = ,<> ,>,>=,<,<=

练习:

-- 1.查询软件部的所有员工信息
-- 拆解成两步,先查询软件部的部门id,再通过部门id查询详细的员工信息
select id from department where dept_name='软件部';-- 3
select * from emp where dept_id=3;
-- 合并成一步就是
-- 这里子查询的结果是3,只有一条记录,所以是标量子查询
select *from emp where dept_id=(select id from department where dept_name='软件部');

列子查询

列子查询返回的结果是一列(可以是多行);

  • 列子查询常用的操作符
    IN(in),NOT IN(not in),ANY(any),SOME(some),ALL(all)

  • 操作符的作用:
    在这里插入图片描述
    案例:

-- 1.查询营销部和硬件部的所有员工信息
-- 还是分成两步,第一步就是查询'硬件部','营销部'对应的部门id,通过部门id去寻找相应的员工
-- 由于这里子查询的结果是一列数据,所以是列子查询
select *from emp where dept_id in 
(select id from department where dept_name in('硬件部','营销部'));

-- 查询大于所有财政部年龄的员工的信息
select *from emp where age>all(select age from emp where dept_id=(select id from department where dept_name='财政部'));


select *from emp where age>any(select age from emp where dept_id=(select id from department where dept_name='主管部'));

行子查询

行子查询返回的结果是一行(可以是多列)

语法:

select 字段列表 from 表名 where(条件字段1,条件字段2,。。。)=(子查询)
  • 行子查询常用的操作符:
    =,<,>,IN(in),NOT IN(not in)
-- 查询与张三年龄和住址相同的员工信息
select *from emp where 
(age,workAddress)=(select age,workAddress from emp where name='张三');

表子查询

表子查询返回的结果是多行多列

  • 常用的操作符
    IN(in)

案例:

-- 查询与张三和李四年龄和住址相同的员工信息
select *from emp where 
(age,workAddress)
in
(select age,workAddress from emp where name ='张三'or name='李四');

综合练习

在这里插入图片描述

-- 1.
select name,age,d.dept_name from emp e,department d where e.dept_id=d.id;
-- 2.
select name,age,d.dept_name from emp e,department d where  (e.dept_id=d.id)and e.age<30;
-- 3.(内连接)
select distinct d.id,d.dept_name from emp e,department d where e.dept_id =d.id;
-- 4.
select e.*,d.dept_name from emp e left join department d on e.dept_id=d.id where age>30;
-- 5.
select e.name,s.grade from salgrade s,emp e where e.gongzi>=s.low and e.gongzi<s.highest;
-- 6.
select e.*,s.grade from salgrade s,emp e
                   where e.dept_id=(select id from department where dept_name='研发部')
                                                        and(e.gongzi>=s.low and e.gongzi<s.highest);
-- 7.
select avg(e.gongzi) from salgrade s,emp e
                   where e.dept_id=(select id from department where dept_name='研发部')
                                                        and(e.gongzi>=s.low and e.gongzi<s.highest);
-- 8.
select *from emp where gongzi>(select gongzi from emp where name='李7');
-- 9.
select *from emp where gongzi>(select avg(gongzi) from emp);
-- 10.
select *from emp e2 where e2.gongzi<(select avg(e1.gongzi)from emp e1 where e2.dept_id=e1.dept_id);
-- 11.
select d.id,d.dept_name,(select count(*)from emp e where d.id=e.dept_id) '数量' from department d;

小结

在这里插入图片描述

事务

事务简介

  • 事务:

    是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

    例如:银行的转账,中间不能有任何异常出现,一旦出现异常就必须要赊销之前的所有操作
    在这里插入图片描述
    在MySQL中的事务是自动提交的,也就是说,当执行一条sql语句,MySQL会立即隐式的提交事务,不用自已手动提交

事务的操作

修改事务的提交方式

  • 查看/设置事务的提交方式

    -- 查看事务的自动提交方式。如果为1,就是自动提交,如果为0,就是手动提	交
    SELECT @@autocommit;
    -- 可以通过set将系统的自动提交方式改为手动
    SET @@autocommit=0;-- 
    
    select @@autocommit;
    set @@autocommit=0;
    
  • 提交事务

    COMMIT;
    
    commit;
    
  • 回滚事务(将事务返回到初始状态)

    ROLLBACK;
    
    rollback;
    

    如果设置为手动提交,当sql语句执行完成后,数据库里的数据不会改变,必须手动执行提交指令(commit)后才会改变;

    当sql语句出现异常时,就不用执行提交事务的指令了,而是执行回滚指令(rollback),这样数据就不会丢失了

    案例:

    create table account(
    id int auto_increment primary key comment 'ID',
    name varchar(10) comment '姓名',
    money int comment '储蓄'
    )comment '账户表';
    insert into account (name, money) values ('zhangsan',1000),('lisi',2000);
    -- 恢复数据
    update account set money=2000 where name='zhangsan' or name='lisi';
    
    -- 转账
    -- 1.查询zhangsan余额
    -- 2.将zhangsan余额-1000
    -- 3.给lisi余额+1000
    
    set @@autocommit=0;
    
    -- 现在下面的三条sql语句分别是三条单独的事务
    select money from account where name='zhangsan';
    update account set money  =money-1000 where name='zhangsan';
    update account set money  =money+1000 where name='lisi';
    commit ;
    rollback ;
    

不修改事务的提交方式

  • 开启事务(在想要将一段sql语句缩成一个事务时,将开启事务放在这段sql语句的上面)

    START TRANSACTIONBEGIN;
    start transactionbegin;
    
  • 提交事务

    COMMIT;
    
    commit;
    
  • 回滚事务(将事务返回到初始状态)

    ROLLBACK;
    
    rollback;
    
    start transaction ;-- 开启事务,将开启事务与下面三条程序一起运行
    select money from account where name='zhangsan';
    update account set money  =money-1000 where name='zhangsan';
    update account set money  =money+1000 where name='lisi';
    -- 当上面开启事务后,如果不提交事务,数据库是不会有任何变动的
    commit ;
    rollback ;
    

四大特性ACID

  • 事务有四大特性:

    1.原子性(Atomicity)

    2.一致性(Consistency)

    3.隔离性(Isolation)

    4.持久性(Durability)

在这里插入图片描述

并发事务问题

并发事务问题指的是:A事务和B事务同时操作一个数据库或一张表的时候,所引发的一些问题

  • 常见的并发事务问题
    在这里插入图片描述
    脏读:一个事务读到另一个事务还没有提交的数据
    例如:在事务隔离级别不够的情况下,现在有两个并发的事务同时操作同一张表,B事务修改表的数据,在B事务还没有提交的时候,A事务又读取这个表,此时A事务就会读到被修改后的数据,就称之为脏读

    不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
    例如:在Read committed的事务隔离级别下,有两个并发的事务同时操作同一张表,A事务先读取数据1,此时数据1为1000,然后B事务修改数据1为0,在B事务提交后,A事务再次进行读取数据1,此时读取出来的数据1是0,事务A读取两次,两次的数据不同,这就是不可重复读

    幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。
    例如:在Repeatable Read的事务隔离级别下,有两个并发的事务同时操作同一张表,事务A先读取一个表中不存在的值(比如说id=3的一个数据),然后事务B执行插入SQL,将id=3的数据插入表中,B事务提交后,A事务再将插入id=3数据插入表中就会报错,显示数据在表中已经存在,此时事务A再进行读取id=3的数据,还是显示数据不存在,这就是幻读

事务的隔离级别

事务的隔离级别就是来解决事务的并发问题的

数据库中的事务隔离级别
在这里插入图片描述
四种事务隔离级别:(从上到下事务的隔离级别越来越高,性能越来越差)
1.Read uncommitted:在这个隔离级别下,上面三个并发的事务问题都有可能会出现(性能高,数据安全性差)

2.Read committed(oracle数据库的默认事务隔离级别):解决了脏读问题,但是不可重复读和幻读还是会出现

3.Repeatable Read(MySqL的默认的事务隔离级别):幻读问题会出现

4.Serializable:解决了所有的并发事务问题(性能低,数据安全性强)

  • 事务隔离级别的语法:
    -- 查看事务隔离级别
    SELECT @@TRANSACTION_ISOLATION;
    
    select @@transaction_isolation;
    
    -- 设置事务隔离级别
    SET [SESSION | GLOBAL]
     TRANSACTION ISOLATION LEVEL 
    {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
    
    set [session(只对当前客户端窗口有效) | global(对所有的客户端窗口有效)]
     transaction isolation level
    {read uncommitted | read committed | repeatable read | serializable}
    

练习:

-- 查看事务的隔离级别
select @@transaction_isolation;
-- 设置事务的隔离级别
set session transaction isolation level  read committed ;
set session transaction isolation level  repeatable read ;

注意:事务的隔离级别越高,数据越安全,但是数据库的性能越低

小结

在这里插入图片描述

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

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

相关文章

数字图像学笔记 —— 18. 图像抖动算法

文章目录 为什么需要图像抖动图像抖动算法实现的基本思路常见图像抖动算法实现Floyd-Steinberg 抖动算法Atkinson 抖动算法算法实现 为什么需要图像抖动 在数字图像中&#xff0c;为了表示数字图像的细节&#xff0c;像素的颜色深度信息最少也是8位&#xff0c;即 0 − 256 0…

Linux:centos:周期性计划任务管理《crontab》

crontab常用基础属性 -e 编辑计划任务 -l 查看计划任务 -r 删除计划任务 -u 指定用户的计划任务 首先创建一个名为test的用户名 crontab时间规定 格式&#xff1a;分钟 小时 日期 月份 星期 命令 分钟-- 0-59整数 小时 -- 0-23整数 日期 -- 1--31 整数 月份 -- 1-12 整数 星期…

C++ queue类成员介绍

目录 &#x1f914;queue模板介绍&#xff1a; &#x1f914;queue特点&#xff1a; &#x1f914;queue内存图解&#xff1a; &#x1f914; queue的成员函数 &#x1f50d;queue构造函数&#xff1a; &#x1f50d;queue赋值函数&#xff1a; &#x1f50d;queue判断函…

黑马Redis视频教程实战篇(三)

目录 一、优惠券秒杀 1.1 全局唯一ID 1.2 Redis实现全局唯一ID 1.3 添加优惠卷 1.4 实现秒杀下单 1.5 库存超卖问题分析 1.6 代码实现乐观锁解决超卖问题 1.7 优惠券秒杀-一人一单 1.8 集群环境下的并发问题 二、分布式锁 2.1 基本原理和实现方式对比 2.2 Redis分布…

js常见面试笔试题

一.js实现距离最近的回文数 给定一个整数 n &#xff0c;你需要找到与它最近的回文数&#xff08;不包括自身&#xff09;。 “最近的”定义为两个整数差的绝对值最小。 示例 1: 输入: "123" 输出: "121" function findNearestPalindrome…

Jenkins+Python自动化测试之持续集成详细教程

前言 今天呢笔者想和大家来聊聊JenkinsPython自动化测试持续集成&#xff0c;废话呢就不多说了哟咱们直接进入主题哟。 一、Jenkins安装 ​ Jenkins是一个开源的软件项目&#xff0c;是基于java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供…

I.MX RT1170加密启动详解(2):Authenticated HAB认证原理

文章目录 1 基础2 使能过程3 Boot flow 1 基础 HAB认证是基于RSA或ECDSA算法的公钥密码学&#xff0c;它用一系列的私钥对image进行加密&#xff0c;然后BootROM在上电后用对应的公钥验证加密的镜像是否被修改。这个密钥结构就是PKI(Public Key Infrastructure)树 (1)normal …

chatgpt赋能python:Python中画笔颜色的函数介绍

Python中画笔颜色的函数介绍 在Python中&#xff0c;我们可以使用turtle模块来绘制图形&#xff0c;其中画笔颜色是非常重要的一部分。画笔颜色可以决定图形的风格和色调&#xff0c;是图形表现的关键因素之一。Python中提供了几种方法来设置画笔颜色。 1. 设置画笔颜色的函数…

ENU、EPSG坐标系科普(三维重建)

ENU和EPSG实际上代表了两个不同的概念&#xff0c;这两者并不是直接对比的。 1. ENU坐标系&#xff1a;ENU坐标系是一种本地切面坐标系&#xff0c;用于表示与地理位置相关的空间数据。在ENU坐标系中&#xff0c;E代表东&#xff08;East&#xff09;&#xff0c;N代表北&…

RabbittMQ快速实战和集群架构

介绍对比: Kafka&#xff1a;topic不能太多&#xff0c;一个缺点&#xff0c;影响Kafka的吞吐量 集群搭建&#xff1a;【单个也是一个集群&#xff08;特殊&#xff09;】 集群搭建&#xff1a;https://blog.csdn.net/p393975269/article/details/129830252 1&#xff1a;默认…

【明解STM32】中断系统理论基础知识篇之中断寄存器功能原理

目录 一、前言 二、寄存器概述 三、NVIC寄存器组 四、SCB寄存器组 五、中断屏蔽寄存器组 六、总结 一、前言 在之前的STM32的中断系统理论基础知识之基本原理及NVIC中&#xff0c;分别中断的基本原理&#xff0c;中断的管理机制和中断的处理流程进行了较为详细的论述&…

SOLIDWORKS钣金成形工具

SOLIDWORKS钣金成形工具主要用来创建使用冲制或压印制作的钣金特征。成形工具的工作原理是&#xff1a;几何体代表冲制或压印形成的凹陷区域&#xff0c;停止面是指工具要被应用到的钣金面&#xff0c;也可以定义移除面&#xff0c;若定义了移除面&#xff0c;则该面会形成通孔…

模拟人生打开显示找不到msvcp120.dll如何修复?msvcp120.dll是什么呢?

如果您在打开模拟人生游戏时遇到了msvcp120.dll文件丢失的错误信息&#xff0c;这可能是由于缺少Microsoft Visual C Redistributable for Visual Studio 2013软件包导致的。遇到这个情况不需要着急&#xff0c;只需要修复一下就可以。msvcp120.dll如何修复&#xff1f;下面就把…

黑马Redis视频教程实战篇(二)

目录 一、什么是缓存&#xff1f; 1.1 为什么要使用缓存&#xff1f; 1.2 如何使用缓存&#xff1f; 二、添加商户缓存 2.1 缓存模型和思路 2.2 代码实现 三、缓存更新策略 2.1 数据库缓存不一致解决方案 2.2 数据库和缓存不一致采用什么方案 四、实现商铺和缓存与数…

SAP-MM发票校验过账到总账

一&#xff0e;概念 SAP的MIRO发票校验&#xff0c;通常是参照采购订单&#xff08;PO&#xff09;生成&#xff0c;但有时会收到无PO参考的发票&#xff0c;例如供应商的运费、质检费等&#xff0c;这些不想过帐到发票项目的物料或成本科目&#xff0c;那么可以过帐到某个总账…

kong网关启用jwt认证插件

认证流程&#xff1a; 1、创建一个用户 2、生成jwt的所需要的key和密钥 3、在https://jwt.io/的生成jwt token 4、启用jwt插件 5、发送请求的时候携带jwt的token信息 官方指导&#xff1a;https://docs.konghq.com/hub/kong-inc/jwt/configuration/examples/ 一、创建一个新的…

深蓝学院C++基础笔记 第 0 章 C++介绍

一、什么是C 1、c 是一门比较流行的编程语言 \qquad ●https://www.tiobe.com/tiobe-index/2、c是C 语言的扩展 ● 更加关注性能 \qquad ● 与底层硬件紧密结合 \qquad \qquad java和python等语相对来说更加关注易用性。 \qquad ● 对象生命周期的精确控制 \qquad \qqua…

冒泡排序小练习(接收键盘录入、拆分、转整、冒泡递减排序、输出)

接收键盘录入(含输入字符串排错)字符串&#xff0c;拆分、转整、冒泡排序(递减)输出。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址…

unity3d 中场景不显示了

应该是把Layers下面的Nothing打开了

Java学习路线(18)——File、递归、字符集和IO流(上)

一、文件 &#xff08;1&#xff09;概述 File类在java.io.File下&#xff0c;代表操作系统的文件对象&#xff08;文件、文件夹&#xff09;File类提供诸如&#xff1a;定位文件&#xff0c;获取文件信息&#xff0c;删除文件&#xff0c;创建文件等操作 &#xff08;2&…