python:mysql全局大览(保姆级教程)

本文目录:

  • 一、关于数据库**
  • 二、sql语言分类**
  • 三、数据库增删改查操作**
  • 四、库中表增删改查操作**
  • 五、表中记录插入**
  • 六、表约束**
  • 七、单表查询**
  • 八、多表查询**
    • (一)外键约束**
    • (二)连结查询**
      • 1.交叉连接(笛卡尔积)**
      • 2.内连接**
      • 3.左外连接**
      • 4.右外连接**
      • 5.全外连接****
      • 6、自连接**
  • 九、子查询**
  • 十、开窗函数**(mysql8.0版本以上才有此功能)
  • 特别分享1:排名函数**
  • 特别分享2:CTE(公用表表达式)**

** MySQL是最好的 RDMS (Relational Database Management System,关系数据库管理系统) 应用软件,目前属于 Oracle 旗下产品,MySQL 是最流行的关系型数据库管理系统中的一个。**

使用mysql前,需要先下载安装mysql(通过小皮面板最方便,连接时默认用户和密码都是root),然后运行方式可以是通过datagrip,也可以是通过pycharm连接运行(连接时默认用户是root)。
mysql访问官网下载页面:https://dev.mysql.com/downloads/mysql/
*

一、关于数据库**

数据库是存储数据的仓库,分为关系型数据库和非关系型数据库,关系型数据库遵循sql规范(一整套结构化查询语言),非关系型数据库又叫做nosql(not only sql),不需要遵循sql规范。

**

二、sql语言分类**

数据定义语言:简称DDL(Data Definition Language)
作用: 用来定义数据库对象:数据库,表,列/字段等。
关键字: create,drop,alter等

数据操作语言:简称DML(Data Manipulation Language)
作用:用来对数据库中表的记录进行更新。
关键字: insert,delete,update等

数据查询语言:简称DQL(Data Query Language)
作用:用来查询数据库中表的记录。
关键字: select,from,where等

数据控制语言:简称DCL(Data Control Language)
用来定义数据库的访问权限和安全级别,及创建用户。

**

三、数据库增删改查操作**

首先注意:1.每一条sql语句都要用英文分号(;)结尾;2.windows系统里,mysql不区分大小写。

创建数据库: create database [if not exists] 数据库名; 注意: 默认字符集就是utf8

删除数据库:** drop database [if exists] 数据库名**;

使用/切换数据库: use 数据库名;

查看所有的数据库名:** show databases**;

查看当前使用的数据库: select database();

查看指定库的建库语句: show create database 数据库名;

例:
create database database1;#创建database1(数据库名)
use database1;                #使用database1(使用后才可以建表)
drop database database1;   #删除database1

**

四、库中表增删改查操作**

创建表: create table [if not exists] 表名(字段1名 字段1类型 [字段1约束] , 字段2名 字段2类型 [字段2约束] …);

删除表:** drop table [if exists] 表名**;

修改表名: rename table 旧表名 to 新表名;
注意: 修改表中字段本质都是修改表,咱们后面演示此处略

查看所有表: show tables;

查看指定表的建表语句: show create table 表名;

添加表字段: alter table 表名 add [column] 字段名 字段类型 [字段约束];

删除表字段: alter table 表名 drop [column] 字段名;

修改表字段名和字段类型: ** alter table 表名 change [column] 旧字段名 新字段名 字段类型 [字段约束]**;

modify只修改字段类型: alter table 表名 modify [column] 字段名 字段类型 [字段约束];

查看字段信息: desc 表名;

备注:中括号内容代表可以要也可以不要,后续代码里中括号均如此功能。

create table student(        #创建student(表名)id int,name varchar(100),weight double,height double,   
);
show tables;        #查看目前所有的表
desc student;      #  查看student表结构
#添加gender字段
alter table  student   add   gender  varchar(100);
#修改gender字段为sex字段
alter table  student   change   gender   sex  varchar(100);
#修改sex字段类型为int
alter table  student   modify  sex  int;#删除student
drop table student;     

**

五、表中记录插入**

插入数据记录: insert into 表名 (字段名1,字段名2…) values (值1.1,值2.1…) , (值1.2,值2.2…);
注意1: 具体值要和前面的字段名以及顺序一一对应上
注意2: 如果要插入的是所有字段,那么字段名可以省略(默认代表所有列都要插入数据)
注意3: 如果要插入多条记录,values后多条数据使用 逗号 分隔

修改数据记录: update 表名 set 字段名=值 [where 条件];
注意: 如果没有加条件就是修改对应字段的所有数据

删除数据记录:** delete from 表名 [where 条件]**;
注意: 如果没有加条件就是删除所有数据

#插入数据到student
insert into student values(1,'john',50.6,1.78),(2,'july',51,1.67),(3,'huahua',53.7,1.89);   #改student数据
update student set name='alice' where name='huahua'; 3]  
update student set name='alice' where id=3;    

清空所有数据:
方式1: delete from 表名; 注意:此方式有警告
方式2: truncate [table] 表名; 注意: 此方式没有警告

#删除了student单列数据
delete from student where id=3;
delete from student where name='july';#删除了student所有数据
delete from student;  
#另一种删除所有数据方法:truncate
truncate student;    

备注:delete from与truncate两者区别在于:1.delete from可以删除单列数据,但truncate不可以;2.delete from不会重置表主键自增,truncate会重置表主键自增。

**

六、表约束**

主键约束(key primary):每个表只设置一个主键,设置后:值非空且唯一。主键约束可设置主键自增;(auto_increment),设置后不输入值时、或者输入0或者输入null时将直接引起主键自增(即主键自己按顺序增长);

唯一约束(unique):设置后值唯一,不可重复;

非空约束(not null):设置后值非空,必须有;

外键约束【construct [约束名] foreign key (字段名) references 主表(主键名)】:用于关联两个表,关联表叫子表,被关联表叫主表;

默认约束(default):设置默认值,不输入值时默认;

注意:1.约束建议都是在建表时添加,简单方便;2.主键约束每个表只有一个,其它约束可以有多个。

例:
use database1;                #使用数据库
create table student(        #创建student(表名)id int primary key auto_increment,  #主键自增name varchar(100)  not null,     #非空约束weight double   unique,       #唯一约束height double    default 1.9      #默认约束
);

**

七、单表查询**

基础查询:select */字段名 from 表名

条件查询:where (比较/逻辑/范围/模糊/非空判断)

分组/聚合/统计函数:sum()、avg()、count()、max()、min()

分组查询:select 分组字段名,聚合函数(字段名)from 表名 group by 分组字段名1,分组字段名2。。。

排序查询:select 字段名 from 表名 order by 排序字段名1 (asc:升序;desc:降序),排序字段名2(asc:升序;desc:降序)。。。

Limit查询:select 字段名 from 表名 limit x,y(x为起始索引,y为一次查询数量)。

备注:被查询的字段名都可以通过as 起别名(as也可省略,字段名后面可以直接跟别名),但应避免是中文名。

#单表查询#(1)单表查询之基础查询
select * from student;
select distinct * from student;
select distinct name as n,weight as w from student;#as可省略;#(2)单表查询之条件查询
select * from student where name like 'j%';
select * from student where name like '%j%';#查询name带有j的
select * from student where name like 'ju__';
select * from student where weight <>51 and weight <>55;#查询weight不为51也不为55的数据
select * from student where weight not in(51,55);#查询weight不为51也不为55的数据
select * from student where weight!=51 and weight!=55;#查询weight不为51也不为55的数据
select * from student where weight not between 51 and 55;#查询weight不在51和55之间的数据
select * from student where weight  is not null;#查询有weight的数据
select count(*) from student where weight  is not null;#个数查询,推荐
#个数查询,利用其自动忽略none值,推荐
select count(weight) from student;#(3)聚合函数查询
select count(weight) c,max(weight) ma,min(weight)  mi,
round(avg(weight),2) av,sum(weight)  s  from student;#(4)分组查询(分组字段名height必须跟在select后面,可多个分组字段)
select height,count(*) from student  group by height ;#(5)排序查询(可多个字段排序)
select  height,name  from student  order by weight,height ;#(6)limit 查询
select   height,name    from   student   limit  0,2;

查询注意事项:
1.书写顺序:select-distinct-聚合函数-from-where-group by-having-order by-limit x,y;
特别地,Having也能跟聚合条件,但不建议,会造成效率低下;

2.执行顺序:from(从硬盘中扫描真实表文件加载到内存形成伪表)—where—group by(分组,切成运算区)—聚合函数—having—select distinct—order by—limit

**

八、多表查询**

本质是多个表通过主外键关联关系连接(join)合并成一个大表,再去查询。

(一)外键约束**

建表时添加外键约束: … CONSTRAINT [外键约束名] FOREIGN KEY (外键名) REFERENCES 主表名 (主表主键)

建表后添加外键约束: alter table 从表名 add CONSTRAINT [外键约束名] FOREIGN KEY (外键名) REFERENCES 主表名 (主表主键)

删除外键约束: alter table 从表名 drop FOREIGN KEY 外键约束名;

注意:如果要删除有外键约束的主从表,先删除从表,再删除主表。

例:
# 创建分类表(主表)
create  table  category1
(
cid   varchar(32) primary  key, # 分类id,设置主键
cname varchar(100)             # 分类名称
);# 商品表(从表)
create teble  products1
(
pid         varchar(32) primary  key,  #设置主键
pname       varchar(40),
price       double,
category_id   varchar(32),
CONSTRAINT FOREIGN KEY (category_id) REFERENCES category1 (cid)   #添加外键约束
);

注意:只有innodb存储引擎支持外键约束和事务!!!小皮面板里如果要修改数据库属性为innodb,需要先关闭掉mysql服务后再修改!!!修改存储引擎后,只对后面新建的表有效!!!**

外键约束作用:

限制从表插入数据: 从表插入数据的时候如果外键值是主表主键中不存在的,就插入失败
限制主表删除数据: 主表删除数据的时候如果主键值已经被从表外键的引用,就删除失败

外键约束好处: 保证数据的准确性和完整性。

**

(二)连结查询**

在这里插入图片描述
**

1.交叉连接(笛卡尔积)**

显式交叉连接格式: select * from 左表 cross join 右表;

隐式交叉连接格式: select * from 左表,右表。

**注意:**笛卡尔积本身是一个错误,工作中慎用。

例:
# 隐式交叉连接格式: select 字段名 from 左表,右表;
select *  from   products, category;
# 显式交叉连接格式: select 字段名 from 左表 cross join右表;
select  *  from  products  cross join  category;

2.内连接**

显式内连接格式: select * from 左表 [ inner] join 右表 on 关联条件;

隐式内连接格式: select * from 左表 , 右表 where 关联条件;

注意:inner可以省略。

例:
# 隐式内连接格式: select 字段名 from 左表,右表 where 条件;
selectc.id   cid,c.name cname,p.id   pid,p.name pname
fromproducts p,category c
wherep.category_id = c.id;
# 显式内连接格式: select 字段名 from 左表 cross join右表;
selectc.id   cid,c.name cname,p.id   pid,p.name pname
fromproducts pinner  join  category c   on   p.category_id = c.id;

3.左外连接**

左连接关键字: left [outer] join … on

左外连接格式: select * from 左表 left [outer] join 右表 on 关联条件;

注意: 1.左表和右表没有特殊含义,只是在前面是左表,在后面的是右表;2.outer可以省略。

例:
-- 为了方便演示插入一条数据
insert  intoproducts(name, price, category_id)
values('百草味紫皮腰果', 9, 5);-- 需求: 分别使用左右连接查询每个分类下的所有商品,即使没有商品的分类要展示
-- 分析: 必须以分类表为主
-- 左外连接: left outer join
selectc.id   cid,c.name cname,p.id   pid,p.name pname
fromcategory cleft  outer join products p  on  p.category_id = c.id;

4.右外连接**

右连接关键字: right [outer] join … on

右外连接格式: select * from 左表 right [outer] join 右表 on 关联条件;

注意: 1.左表和右表没有特殊含义,只是在前面是左表,在后面的是右表;2.outer可以省略。

-- 右外连接: right outer join
selectc.id   cid,c.name cname,p.id   pid,p.name pname
fromproducts pright  outer  join  category c on  p.category_id = c.id;

5.全外连接****

注意**: mysql中没有full outer join on这个关键字,所以不能用它来完成全外连接!所以只能先查询左外连接和右外连接的结果,然后用union或者union all来实现!!!

  • union : 默认去重
  • union all: 不去重
例(全外连接):
# union : 默认去重
select *
fromproducts pleft join category c on p.category_id = c.id
union
select *
fromproducts pright join category c on p.category_id = c.id;# union all: 不去重
select  *
fromproducts pleft  join  category c on p.category_id = c.id
union all
select  *
fromproducts pright join category c on  p.category_id = c.id;

6、自连接**

解释: 两个表进行关联时,如果左表和右边是同一张表,这就是自关联。

注意: 自连接必须起别名!

例:
-- 自连接查询
-- 查询'江苏省'下所有城市
selectshi.id,shi.title,sheng.id,sheng.title
fromareas shengjoin areas shi on shi.pid = sheng.id
wheresheng.title = '江苏省';-- 查询'宿迁市'下所有的区县
selectquxian.id,quxian.title,shi.id,shi.title
fromareas shijoin areas quxian on quxian.pid = shi.id
whereshi.title = '宿迁市';-- 查询'安徽省'下所有的市,以及市下面的区县信息
selectquxian.id,quxian.title,shi.id,shi.title,sheng.id,sheng.title
fromareas shengjoin areas shi on shi.pid = sheng.idjoin areas quxian on quxian.pid = shi.id
wheresheng.title = '江苏省';-- 自连接的妙用
-- 需求1: 求每个月和上月的差额
selectc.month,c.revenue,c.revenue-u.revenue as diff
fromsales cjoin sales u on c.month = u.month + 1;-- 需求2: 求截止到当月累计销售额
selectc.month,SUM(u.revenue)
fromsales cjoin sales u on c.month >= u.month
group  byc.month;

**

九、子查询**

在一个 SELECT 语句中,嵌入了另外一个 SELECT 语句,那么被嵌入的 SELECT 语句称之为子查询语句,外部那个SELECT 语句则称为主查询。

作用: 子查询是辅助主查询的,它可以充当主查询的条件、数据源(临时表)、查询字段。

例:
--  查询'河北省'下所有城市
select * from areas where pid = (select id from areas where title = '河北省');
--  查询'邯郸市'下所有区县
select * from areas where pid = (select id from areas where title = '邯郸市');-- **注意:子查询作为表使用必须加括号,同时起别名!!!**

**

十、开窗函数**(mysql8.0版本以上才有此功能)

开窗函数over():设置每行数据关联的窗口数据范围,over()时,每行关联的数据范围都是整张表的数据。
over函数一般跟在查询字段COUNT、SUM、AVG、MAX、MIN、ROW_NUMBER、RANK、DENSE_RANK等后面。

(例)格式:count(字段名) over()

over()里面也可以加入partition by 字段名(分组)、order by 字段名等。

(例)格式1:sum(score) over(partition by gender order by id )
备注:score、gender、id均是字段名。
(例)格式2:rank() over(partition by gender order by id)
备注:gender、id均是字段名。

例:
针对 students 表的数据,计算每个同学的Score分数和整体平均分数的差值
-- 数据准备
create table `students`     #建表,反引号用来识别
(
`id`     int(11)     not null  auto_increment,
`name`   varchar(24)  not  null,
`gender`  varchar(8)  not  null,
`score`  decimal(5, 2)  not  null,
primary key (`id`)
);insert   into  `students`  values
(1, 'smart', 'Male', 90.00),
(2, 'linda', 'Female', 81.00),
(3, 'lucy', 'Female', 83.00),
(4, 'david', 'Male', 94.00),
(5, 'Tom', 'Male', 92.00),
(6, 'Jack', 'Male', 88.00);
-- 查询
select   *,avg(score)   over()         as `avg`,
score - avg(score)   over (partiton by gender)   as  `difference`
from      students;分享:
-- partition  by 和 group  by的区别
-- 使用场景不同
-- partiton by用在窗口函数中,结果是:一进一出
-- group by用在分组聚合中,结果是:多进一出

特别分享1:排名函数**

RANK():产生的排名序号 ,有并列的情况出现时序号不连续,如1224;
DENSE_RANK() :产生的排序序号是连续的,有并列的情况出现时序号会重复,如1223;
ROW_NUMBER() :返回连续唯一的行号,排名序号不会重复,如1234。

**

特别分享2:CTE(公用表表达式)**

CTE(公用表表达式):Common Table Expresssion,类似于子查询,相当于一张临时表,可以在 CTE 结果的基础上,进行进一步的查询操作。

基础语法
with tmp1 as (查询语句), tmp2 as (查询语句), tmp3 as (查询语句) select 字段名 from 表名;

例:
-- 需求:获取每个科目,排名第二的学生信息
-- 查询结果字段:
--  name、course、score#代码:
with   temp  as   #基础式(select   *,dense_rank()   over (partition by course order by  score desc)   as  dr
from  tb_score)
select  *   from    temp    where      dr = 2;

今天的分享到此为止。

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

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

相关文章

Android framework 问题记录

一、休眠唤醒&#xff0c;很快熄屏 1.1 问题描述 机器休眠唤醒后&#xff0c;没有按照约定的熄屏timeout 进行熄屏&#xff0c;很快就熄屏&#xff08;约2s~3s左右&#xff09; 1.2 原因分析&#xff1a; 抓取相关log&#xff0c;打印休眠背光 相关调用栈 //具体打印调用栈…

怎么利用JS根据坐标判断构成单个多边形是否合法

怎么利用JS根据坐标判断构成单个多边形是否合法 引言 在GIS(地理信息系统)、游戏开发、计算机图形学等领域,判断一组坐标点能否构成合法的简单多边形(Simple Polygon)是一个常见需求。合法多边形需要满足几何学上的基本规则,本文将详细介绍如何使用JavaScript实现这一判…

sqlite的拼接字段的方法(sqlite没有convert函数)

我在sqlserver 操作方式&#xff1a; /// <summary>///获取当前门店工资列表/// </summary>/// <param name"wheres">其他条件</param>/// <param name"ThisMendian">当前门店</param>/// <param name"IsNotU…

构建高效移动端网页调试流程:以 WebDebugX 为核心的工具、技巧与实战经验

现代前端开发早已不仅仅局限于桌面浏览器。随着 Hybrid 应用、小程序、移动 Web 的广泛应用&#xff0c;开发者日常面临的一个关键挑战是&#xff1a;如何在移动设备上快速定位并解决问题&#xff1f; 这不再是“打开 DevTools 查查 Console”的问题&#xff0c;而是一个关于设…

新兴技术与安全挑战

7.1 云原生安全(K8s安全、Serverless防护) 核心风险与攻击面 Kubernetes配置错误: 风险:默认开放Dashboard未授权访问(如kubectl proxy未鉴权)。防御:启用RBAC,限制ServiceAccount权限。Serverless函数注入: 漏洞代码(AWS Lambda):def lambda_handler(event, cont…

《算法笔记》11.7小节——动态规划专题->背包问题 问题 C: 货币系统

题目描述 母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。 [In their own rebellious way],&#xff0c;他们对货币的数值感到好奇。 传统地&#xff0c;一个货币系统是由1,5,10,20 或 25,50, 和 100的单位面值组成的。 母牛想知道有多少种不同的方法来用货币…

SN生成流水号并且打乱

目前公司的产品会通过sn绑定账号&#xff0c;但是会出现一个问题&#xff0c;流水号会容易被人猜出来导致被他人在未授权的情况下使用&#xff0c;所以开发了一个生成流水号后打乱的python程序&#xff0c;比如输入sn的前11位后&#xff0c;后面的字符所有的排列组合有26^4方种…

msq基础

一、检索数据 SELECT语句 1.检索单个列 SELECT prod_name FROM products 上述语句用SELECT语句从products表中检索一个名prod_name的列&#xff0c;所需列名在SELECT关键字之后给出&#xff0c;FROM关键字指出从其中检索数据的表名 &#xff08;返回数据的顺序可能是数据…

【回溯 剪支 状态压缩】# P10419 [蓝桥杯 2023 国 A] 01 游戏|普及+

本文涉及知识点 C回溯 位运算、状态压缩、枚举子集汇总 P10419 [蓝桥杯 2023 国 A] 01 游戏 题目描述 小蓝最近玩上了 01 01 01 游戏&#xff0c;这是一款带有二进制思想的棋子游戏&#xff0c;具体来说游戏在一个大小为 N N N\times N NN 的棋盘上进行&#xff0c;棋盘…

2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现

华为OD全流程解析&#xff0c;备考攻略 快捷目录 华为OD全流程解析&#xff0c;备考攻略一、什么是华为OD&#xff1f;二、什么是华为OD机试&#xff1f;三、华为OD面试流程四、华为OD薪资待遇及职级体系五、ABCDE卷类型及特点六、题型与考点七、机试备考策略八、薪资与转正九、…

深入解析DICOM标准:文件结构、元数据、影像数据与应用

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

Visual Studio 2022 插件推荐

Visual Studio 2022 插件推荐 Visual Studio 2022 (简称 VS2022) 是一款强大的 IDE&#xff0c;适合各类系统组件、框架和应用的开发。插件是接入 VS2022 最重要的扩展方式之一&#xff0c;它们可以大幅提升开发效率、优化代码质量&#xff0c;并提供强大的调试和分析功能。 …

OBS Studio:windows免费开源的直播与录屏软件

OBS Studio是一款免费、开源且跨平台的直播与录屏软件。其支持 Windows、macOS 和 Linux。OBS适用于&#xff0c;有直播需求的人群或录屏需求的人群。 Stars 数64,323Forks 数8413 主要特点 推流&#xff1a;OBS Studio 支持将视频实时推流至多个平台&#xff0c;如 YouTube、…

SCAU--平衡树

3 平衡树 Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: G;GCC;VC;JAVA;PYTHON 描述 平衡树并不是平衡二叉排序树。 这里的平衡指的是左右子树的权值和差距尽可能的小。 给出n个结点二叉树的中序序列w[1],w[2],…,w[n]&#xff0c;请构造平衡树&#xff0c…

Docker容器镜像与容器常用操作指南

一、镜像基础操作 搜索镜像 docker search <镜像名>在Docker Hub中查找公开镜像&#xff0c;例如&#xff1a; docker search nginx拉取镜像 docker pull <镜像名>:<标签>从仓库拉取镜像到本地&#xff0c;标签默认为latest&#xff1a; docker pull nginx:a…

TDengine 更多安全策略

简介 上一节我们介绍了 TDengine 安全部署配置建议&#xff0c;除了传统的这些配置外&#xff0c;TDengine 还有其他的安全策略&#xff0c;例如 IP 白名单、审计日志、数据加密等&#xff0c;这些都是 TDengine Enterprise 特有功能&#xff0c;其中白名单功能在 3.2.0.0 版本…

小白入门:GitHub 远程仓库使用全攻略

一、Git 核心概念 1. 三个工作区域 工作区&#xff08;Working Directory&#xff09;&#xff1a;实际编辑文件的地方。 暂存区&#xff08;Staging Area&#xff09;&#xff1a;准备提交的文件集合&#xff08;使用git add操作&#xff09;。 本地仓库&#xff08;Local…

[创业之路-370]:企业战略管理案例分析-10-战略制定-差距分析的案例之小米

战略制定-差距分析的案例之小米 在战略制定过程中&#xff0c;小米通过差距分析明确自身与市场机会之间的差距&#xff0c;并制定针对性战略&#xff0c;实现快速发展。以下以小米在智能手机市场的机会差距分析为例&#xff0c;说明其战略制定过程。 一、市场机会识别与差距分…

Index-AniSora模型论文速读:基于人工反馈的动漫视频生成

Aligning Anime Video Generation with Human Feedback 一、引言 论文开头指出&#xff0c;尽管视频生成模型不断涌现&#xff0c;但动漫视频生成面临动漫数据稀缺和运动模式异常的挑战&#xff0c;导致生成视频存在运动失真和闪烁伪影等问题&#xff0c;难以满足人类偏好。现…

第 4 章:网络与总线——CAN / Ethernet / USB-OTG

本章目标: 深入理解三种关键通信总线(CAN、Ethernet、USB-OTG)的协议架构、硬件接口与软件驱动 掌握 STM32(或同类 MCU)中各总线的寄存器配置、中断/DMA 驱动框架 通过实战案例,实现基于 CAN 总线的节点通信、基于 Ethernet 的 TCP/IP 通信,以及基于 USB-OTG 的虚拟串口…