当前位置:网站首页>mysql学习总结 & 索引
mysql学习总结 & 索引
2022-08-02 14:10:00 【鱼子酱:P】
目录
一:数据库基础概念
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。存放数据的仓库。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。是位于用户与操作系统之间的一层数据管理软件。
SQL:结构化查询语言,专门用来与数据库通信的语言。
二:Database
1.显示当前数据库
show databases;
2.创建数据库
create database if not exists DB_01 character set utf8mb4 collate utf8_bin;
CHARACTER SET: 指定数据库采用的字符集(MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是 使用utf8mb4,建议大家都使用utf8mb4)
COLLATE: 指定数据库字符集的校验规则。(utf8_bin:区分大小写 utf8_general_ci:不区分大小写)
说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则:utf8_ general_ ci
3.删除数据库
DROP DATABASE [IF EXISTS] db_name;
三:Table
需要操作数据库中的表时,需要先使用该数据库:
use db_test;
1.查看表结构
desc 表名;
2.创建表
create table stu_test (
id int,
name varchar(20) comment '姓名',
password varchar(50) comment '密码',
age int,
sex varchar(1),
birthday datetime,
amout decimal(13,2),
resume text
);
3.删除表
-- 删除 stu_test 表
drop table stu_test;
-- 如果存在 stu_test 表,则删除 stu_test 表
drop table if exists stu_test;
四:数据类型
标注出来的是最常用的
五:CRUD
1.添加(Create)
1)单行数据+全列输入
INSERT INTO tb1 VALUES (1,'小余','女');
2)多行数据+指定列输入
INSERT INTO tb1(id,NAME,sex) VALUES
(2,'小张','男'),
(3,'花花','女');
2.查询(Retrieve)
- 全列查询
- 指定列查询
- 查询字段为表达式
- 别名
SELECT * FROM tb1;
SELECT id,NAME FROM tb1;
SELECT id,10,NAME FROM tb1; -- 显示一列都会为10
SELECT id AS '序号',NAME '姓名' FROM tb1;
- 去重 distinct
- 升序 order by...asc(或者不写)
- 降序 order by...desc
-- 查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result
ORDER BY chinese + english + math DESC;
-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
SELECT name, math, english, chinese FROM exam_result
ORDER BY math DESC, english, chinese;
-- NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
- 条件查询where
-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;
-- AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权
- 分页查询limit
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
推导出了一个公式:limit 每页显示记录数 * (第几页-1),每页显示记录数
3.更新(Update)
update 表 set 字段1=value1, 字段2=value2... where 条件
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3;
4.删除(Delete)
delete from 表 where 条件
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = '孙悟空';
六:数据库约束
- NOT NULL 约束后该行必须有数据
- UNIQUE 保证某列的每行必须有唯一的值。
- DEFAULT 规定没有给列赋值时的默认值。
- PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY 外键用于定义主表和从表之间的关系,外键约束要定义在从表上,主表则必须有主键约束或unique约束
- CHECK 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。
主键指定方式有两种:
create table 表名(
id int(11) primary key,
);create table 表名(
id int(11);
prinmary key(id)
);
外键:
1.外键指向的字段必须primary key或unique
2.外键类型必须和主键类型一致,长度可以不同
3.外键字段的值必须在主键字段中出现过,或者为null(前提允许为空)
4.建立了主外键关系后,数据就不能随意删除了
-- 对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大
值+1。
-- 创建班级表,有使用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)
);
七:查询细节
1.聚合函数
max() '最大值'
min() '最小值'
sum() '求和'
avg() '平均'
count() '个数' 字段名可以使用 * 代替, 另外如果字段为空 会被忽略'
>where 后面不能使用聚合函数
>聚合函数经常与 SELECT 语句的 GROUP BY 子句一同使用。
>所有聚合函数都具有确定性。任何时候用一组给定的输入值调用它们时,都返回相同的值。
-- 统计班级共有多少同学
SELECT COUNT(*) FROM student;
-- 统计班级收集的 qq_mail 有多少个,qq_mail 为 NULL 的数据不会计入结果
SELECT COUNT(qq_mail) FROM student;
-- 统计数学成绩总分
SELECT SUM(math) FROM exam_result;
-- 返回 > 70 分以上的数学最低分
SELECT MIN(math) FROM exam_result WHERE math > 70;
2.Group by,Having子句
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。
select column1, sum(column2), .. from table group by column1,column3;
--显示各个部门的平均工资和部门号
select avg(sal),deptno from emp group by deptno;
GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING
-- 显示各个部门平均工资和部门号,保留平均工资小于2000的
select avg(sal),deptno from emp group by deptno having avg(sal)<2000;
3.多表查询
-- 显示各个员工的姓名,工资及工资的级别
分析:姓名,工资——emp表
工资级别——salgrade表
select ename,sal,grade
from emp,salgrade
where sal between losal and hisal;
4.内连接
语法1:select f1,f2,f3...
from table1 inner join table2
on 关联匹配条件
语法2: select f1,f2,f3...
from table1,table2,table3
where 关联匹配条件
1)自连接:是内连接查询中一种特殊的等值连接,所谓的自连接就是指表与其自己当前表进行连接。自己和自己做连接。
特点:
- 把一张表当两张表使用
- 需要给表起别名
- 列名不明确可以指定列的名字
-- 显示公司员工和他上级的名字
select worker.name as '职员名' , boss.ename as '上级名'
from emp woker,emp boss
where woker.mgr = boss.empno;
-- 另一种写法:inner join
select worker.name as '职员名' , boss.ename as '上级名'
from emp woker inner join emp boss
on woker.mgr = boss.empno;
2)多表-内连接
-- 学生表、成绩表、课程表3张表关联查询
SELECT
stu.id,stu.sn, stu.NAME, stu.qq_mail,
sco.score,sco.course_id,
cou.NAME
FROM
student stu inner join score sco
ON stu.id = sco.student_id
inner join course cou
ON sco.course_id = cou.id
ORDER BY
stu.id;
5.外连接
外连接可以分为左外连接和右外连接
- 左外连接: 包含左边表的全部行(不管右边的表中是否存在与它们匹配的行),以及右边表中全部匹配的行
- 右外连接: 包含右边表的全部行(不管左边的表中是否存在与它们匹配的行),以及左边表中全部匹配的行
-- 左外连接,表1完全显示
select 字段名 from 表名1 left join 表名2 on 连接条件;
-- 右外连接,表2完全显示
select 字段 from 表名1 right join 表名2 on 连接条件;
select * from student stu left join score sco on stu.id=sco.student_id;
-- 即使有同学没有成绩,也会显示他的名字
6.子连接
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询
- 单行子查询:返回一行记录的子查询
-- 查询与“不想毕业” 同学的同班同学:
select * from student where classes_id=(select classes_id from student where
name='不想毕业');
- 多行子查询:返回多行记录的子查询
-- in关键字
-- 查询“语文”或“英文”课程的成绩信息
select * from score where course_id in (select id from course where
name='语文' or name='英文');
--查找和部门10的工作相同的雇员的名字,岗位,工资和部门号,但是不含10号部门自己的雇员
1)查询10号部门有哪些工作
select distinct job from emp where deptno =10; !去重!!
2)把上面党的查询结果当做子查询来使用
select ename,job,sal,deptno
from emp
where job in (select distinct job from emp where deptno =10)
and deptno != 10;
-- 使用 EXISTS 关键字
select * from score sco where exists (select sco.id from course cou
where (name='语文' or name='英文') and cou.id = sco.course_id);
数据查询的小技巧,把一个子查询当做一个临时表使用。
-- 查询每个部门工资高于本部门平均工资的人的资料
1)先得到每个部门的部门号和对应的平均工资
select deptno, avg(sal) as avg_sal
from emp group by deptno;
2)把上面的结果当做子查询,和emp进行多表查询
select ename,sal,temp.avg_sal,emp.deptno
from emp,(select deptno, avg(sal) as avg(sal) from emp group by deptno)temp
where emp.deptno = temp.deptno
and emp.sal > temp.avg_sal;
-- 查询所有比“中文系2019级3班”平均分高的成绩信息
SELECT * FROM
score sco,(
SELECT avg( sco.score )score FROM score sco
JOIN student stu ON sco.student_id = stu.id
JOIN classes cls ON stu.classes_id = cls.id
WHERE cls.NAME = '中文系2019级3班'
) tmp
WHERE
sco.score > tmp.score;
7.合并查询
在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使用UNION 和UNION ALL时,前后查询的结果集中,字段需要一致。
- union:会自动去重
-- 查询id小于3,或者名字为“英文”的课程:
select * from course where id<3
union
select * from course where name='英文';
-- 或者使用or来实现
select * from course where id<3 or name='英文';
- union all 不会去重,只是简单合并
-- 查询id小于3,或者名字为“Java”的课程
-- 可以看到结果集中出现重复数据Java
select * from course where id<3
union all
select * from course where name='英文';
八:索引
概念 :索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现。
作用:索引所起的作用类似书籍目录,可用于快速定位、检索数据。索引对于提高数据库的性能有很大的帮助。
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
- 数据量较大,且经常对这些列进行条件查询。
- 唯一性太差的不适合单独创建索引
- 更新很频繁的不适合创建
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
索引的代价:
- 磁盘占用
- 会对dml语句(删除,更新,插入)效率影响。查询块,增删慢。
索引为什么那么快:因为索引保存的数据结构主要为B+树,及hash的方式
索引为什么会慢:因为会全表扫描
使用:
创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建 对应列的索引。
- 查看索引
-- 查看索引
show index from 表名;
-- 查看学生表的索引
show index from student;
- 创建索引
-- 对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名);
-- 创建班级表中,name字段的索引
create index idx_classes_name on classes(name);
- 删除索引
-- 删除索引
drop index 索引名 on 表名;
--删除班级表中name字段的索引
drop index idx_classes_name on classes;
(1)介绍
书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。
那换到数据库中,索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。
所谓的存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL 存储引擎有 MyISAM 、InnoDB、Memory,其中 InnoDB 是在 MySQL 5.5 之后成为默认的存储引擎。
数据库的索引和数据都是存储在硬盘的。
(2)分类
- 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引。
InnoDB 是在 MySQL 5.5 之后成为默认的 MySQL 存储引擎,B+Tree 索引类型也是 MySQL 存储引擎采用最多的索引类型。创建的主键索引和二级索引默认使用的是 B+Tree 索引。
#为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构?
① B+Tree 只在叶子节点存储数据,而 B 树 的非叶子节点也要存储数据,所以 B+Tree 的单个节点的数据量更小,在相同的磁盘 I/O 次数下,就能查询更多的节点。
② 随着数据量的增加,二叉树会越来越高,磁盘I/O次数也会更多,B+Tree在千万级别的数据量下,高度依然维持在3~4层左右,也就是说一次数据查询只需要做3~4次磁盘I/O操作就能查询到目标数据。
③Hash 在做等值查询的时候效率贼快,搜索复杂度为 O(1)。但是 Hash 表无法做范围查询。
- 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)。
主键索引和二级索引的区别?
① 主键索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;
② 二级索引的 B+Tree 的叶子节点存放的是主键值,而不是实际数据。
- 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引。
- 按「字段个数」分类:单列索引、联合索引。
索引缺点?
- 需要占用物理空间,数量越大,占用空间越大;
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增大;
- 会降低表的增删改的效率,因为每次增删改索引,B+ 树为了维护索引有序性,都需要进行动态维护。
什么时候适用索引?
- 字段有唯一性限制的,比如商品编码;
- 经常用于
WHERE
查询条件的字段。这样能够提高整个表的查询速度,如果查询条件不是一个字段,可以建立联合索引。 - 经常用于
GROUP BY
和ORDER BY
的字段。这样在查询的时候就不需要再去做一次排序了,因为我们都已经知道了建立索引之后在 B+Tree 中的记录都是排序好的。
什么时候不需要创建索引?
WHERE
条件,GROUP BY
,ORDER BY
里用不到的字段,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的,因为索引是会占用物理空间的。- 字段中存在大量重复数据,不需要创建索引,比如性别字段,只有男女,如果数据库表中,男女的记录分布均匀,那么无论搜索哪个值都可能得到一半的数据。在这些情况下,还不如不要索引,因为 MySQL 还有一个查询优化器,查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,进行全表扫描。
- 表数据太少的时候,不需要创建索引;
- 经常更新的字段不用创建索引,比如不要对电商项目的用户余额建立索引,因为索引字段频繁修改,由于要维护 B+Tree的有序性,那么就需要频繁的重建索引,这个过程是会影响数据库性能的。
有什么优化索引方法?
- 主键索引设置为自增的。如果我们使用自增主键,那么每次插入的新数据就会按顺序添加到当前索引节点的位置,不需要移动已有的数据,当页面写满,就会自动开辟一个新页面。因为每次插入一条新记录,都是追加操作,不需要重新移动数据,因此这种插入数据的方法效率非常高。
- 索引列要设置为 NOT NULL 约束。NULL 值是一个没意义的值,但是它会占用物理空间,所以会带来的存储空间的问题,会导致更多的存储空间占用
发生索引失效的情况?
- 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。
- 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。
- 当我们使用左或者左右模糊匹配的时候,也就是
like %xx
或者like %xx%
这两种方式都会造成索引失效;
2.事务
事务指逻辑上的一组操作看做一个整体,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。
使用:
(1)开启事务:start transaction;
(2)执行多条SQL语句 (3)回滚或提交:rollback/commit; 说明:rollback即是全部失败,commit即是全部成功。
start transaction;
-- 阿里巴巴账户减少2000
update accout set money=money-2000 where name = '阿里巴巴';
-- 四十大盗账户增加2000
update accout set money=money+2000 where name = '四十大盗';
commit;
# 事务有哪些特性?
事务是由 MySQL 的引擎来实现的,我们常见的 InnoDB 引擎它是支持事务的。
不过并不是所有的引擎都能支持事务,比如 MySQL 原生的 MyISAM 引擎就不支持事务,也正是这样,所以大多数 MySQL 的引擎都是用 InnoDB。
事务看起来感觉简单,但是要实现事务必须要遵守 4 个特性,分别如下:
- 原子性(Atomicity):一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节,而且事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样,就好比买一件商品,购买成功时,则给商家付了钱,商品到手;购买失败时,则商品在商家手中,消费者的钱也没花出去。
- 一致性(Consistency):是指事务操作前和操作后,数据满足完整性约束,数据库保持一致性状态。比如,用户 A 和用户 B 在银行分别有 800 元和 600 元,总共 1400 元,用户 A 给用户 B 转账 200 元,分为两个步骤,从 A 的账户扣除 200 元和对 B 的账户增加 200 元。一致性就是要求上述步骤操作后,最后的结果是用户 A 还有 600 元,用户 B 有 800 元,总共 1400 元,而不会出现用户 A 扣除了 200 元,但用户 B 未增加的情况(该情况,用户 A 和 B 均为 600 元,总共 1200 元)。
- 隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,因为多个事务同时使用相同的数据时,不会相互干扰,每个事务都有一个完整的数据空间,对其他并发事务是隔离的。也就是说,消费者购买商品这个事务,是不影响其他消费者购买的。
- 持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
# 并行事务会引发什么问题?
在同时处理多个事务的时候,就可能出现脏读(dirty read)、不可重复读(non-repeatable read)、幻读(phantom read)的问题。
- 脏读:读到其他事务未提交的数据;
- 不可重复读:前后读取的数据不一致;
- 幻读:前后读取的记录数量不一致。
# 事务的隔离级别有哪些?
- 读未提交(read uncommitted),指一个事务还没提交时,它做的变更就能被其他事务看到;
- 读提交(read committed),指一个事务提交之后,它做的变更才能被其他事务看到;
- 可重复读(repeatable read),指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;
- 串行化(serializable ),会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;
针对不同的隔离级别,并发事务时可能发生的现象也会不同。
- 在「读未提交」隔离级别下,可能发生脏读、不可重复读和幻读现象;
- 在「读提交」隔离级别下,可能发生不可重复读和幻读现象,但是不可能发生脏读现象;
- 在「可重复读」隔离级别下,可能发生幻读现象,但是不可能脏读和不可重复读现象;
- 在「串行化」隔离级别下,脏读、不可重复读和幻读现象都不可能会发生。
所以,要解决脏读现象,就要升级到「读提交」以上的隔离级别;要解决不可重复读现象,就要升级到「可重复读」的隔离级别。
不过,要解决幻读现象不建议将隔离级别升级到「串行化」,因为这样会导致数据库在并发事务时性能很差。InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它通过next-key lock 锁(行锁和间隙锁的组合)来锁住记录之间的“间隙”和记录本身,防止其他事务在这个记录之间插入新的记录,这样就避免了幻读现象。
# 这四种隔离级别具体是如何实现的呢?
- 对于「读未提交」隔离级别的事务来说,因为可以读到未提交事务修改的数据,所以直接读取最新的数据就好了;
- 对于「串行化」隔离级别的事务来说,通过加读写锁的方式来避免并行访问;
- 对于「读提交」和「可重复读」隔离级别的事务来说,它们是通过 Read View 来实现的,它们的区别在于创建 Read View 的时机不同,大家可以把 Read View 理解成一个数据快照,就像相机拍照那样,定格某一时刻的风景。「读提交」隔离级别是在「每个语句执行前」都会重新生成一个 Read View,而「可重复读」隔离级别是「启动事务时」生成一个 Read View,然后整个事务期间都在用这个 Read View,这样就保证了在事务期间读到的数据都是事务启动前的记录。
边栏推荐
- yolov5官方代码解读——前向传播
- 项目:数据库表的梳理
- Mysql之MVCC
- What is Win10 God Mode for?How to enable God Mode in Windows 10?
- Configure clangd for vscode
- 为vscode配置clangd
- 网络安全抓包
- Win10无法连接打印机怎么办?不能使用打印机的解决方法
- Win10 cannot directly use photo viewer to open the picture
- How to simulate 1/3 probability with coins, and arbitrary probability?
猜你喜欢
随机推荐
Codeforces Round #605 (Div. 3)
二叉树遍历之后序遍历(非递归、递归)入门详解
Installation and configuration of Spark and related ecological components - quick recall
为vscode配置clangd
General code for pytorch model to libtorch and onnx format
Letter combination of LeetCode2 phone number
Win11没有本地用户和组怎么解决
单端K总线收发器DP9637兼容L9637
推开机电的大门《电路》(一):电压,电流,参考方向
用U盘怎么重装Win7系统?如何使用u盘重装系统win7?
推开机电的大门《电路》(三):说说不一样的电阻与电导
2021-10-14
Open the door to electricity "Circuit" (3): Talk about different resistance and conductance
DP1332E刷卡芯片支持NFC内置mcu智能楼宇/终端poss机/智能门锁
系统线性、时不变、因果判断
word方框怎么打勾?
轻量化AlphaPose
casbin模型
奇技淫巧-位运算
将SSE指令转换为ARM NEON指令