数据库学习路线与核心知识地图:从SQL到索引、事务与同步

数据库学习路线SQLJOIN 本内容遵循CC 4.0 BY-SA版权协议
诗语情柔 诗语情柔 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要

1. 先搞清楚方向:数据库学习最容易被带偏的三个误区

我知道很多人学数据库是从“背SQL”开始的——建表、查数据、改数据,一套操作背得滚瓜烂熟,可一碰到“为什么这个查询这么慢”“为什么两个事务会死锁”“课程设计该建几张表”,立刻卡壳。数据库这门课和编程语言不一样,它的知识体系是分层的:最上面是SQL操作,中间是数据建模与索引优化,底层是存储引擎、事务与并发控制。如果只停留在最表层,后面所有问题都会变成“玄学”。

FGMT00是我给这套系列教程定的代号,第一部的定位就是“先把地图摊开,再把路走通”。这篇学习大纲不是按教材目录抄出来的,而是根据我在实际项目、面试辅导和课程设计指导里反复被问到的问题倒推出来的:为什么JOIN会查错数据?为什么两个事务能互相卡死?为什么导出的身份证号变成了科学计数法?这些问题背后,其实都指向同一套核心知识。我会先把数据库学习最常见的三个误区讲清楚,再给一版可以直接照着推进的学习路线,最后把高频痛点逐个拆开讲。

1.1 误区一:把“背SQL”当成学数据库

SQL写得多不等于懂数据库。我见过很多人能熟练写出带五个JOIN的查询,但问他“为什么这个查询要全表扫描”“索引为什么没生效”,答不上来。SQL只是数据库的“接口层”,就像你会上车启动不代表懂汽车原理。学习时一定要在每一个SQL操作背后追问一句:数据库底层是怎么完成这个操作的?

比如一条简单的SELECT * FROM orders WHERE customer_id = 10248,表面上是“查一条数据”,实际上数据库要决定走全表扫描还是通过索引检索。这个决定涉及索引结构、统计信息、查询优化器等多个环节。如果你只背SQL语法,就永远没法回答“为什么加了索引还慢”这种问题。所以这套教程第一部会刻意把“SQL操作”和“底层原理”放在一起讲,而不是分开讲。

1.2 误区二:只学一个数据库产品,不学通用原理

很多人一上来就死磕MySQL,或者只学Oracle,学到后面换了个环境就傻了。其实数据库的核心原理——关系模型、事务ACID、并发控制、索引结构——是跨产品通用的。MySQL、Oracle、达梦、PostgreSQL,差异主要在SQL方言、存储引擎和管理工具上。把原理学扎实,换数据库只是换个语法的问题。

举个最直观的例子:Oracle里有NVL函数,MySQL里有IFNULL,达梦里也有兼容Oracle的写法,但思维模型都是“空值处理”。如果你只记住了IFNULL这个函数名,换个数据库就抓瞎;如果你理解了“数据库里NULL是一个特殊值,任何运算遇到NULL都可能返回NULL”,那不管用什么数据库,你都知道要主动处理空值。这个“以原理带语法”的思路,在整条学习路线里会反复出现。

1.3 误区三:忽略数据建模,一上来就写代码

数据库设计中常说“库表结构决定系统上限”,但很多初学者最不爱学的就是这部分。理由也很统一:“建表谁不会,CREATE TABLE不就完了”。结果一到课程设计阶段就原形毕露:订单表里没有订单明细表、商品价格直接写死在订单里、用户表和订单表之间没有外键……整改起来比重做还痛苦。

以经典的北风数据库(Northwind)为例,它包含了Categories、Suppliers、Products、Customers、Orders、Order Details等表,表与表之间靠主外键形成清晰的业务链路。这个数据库能流传二十多年,就是因为它是一个能让你反复拆解数据建模的好样本。第一部教程里,我会以它为主线,带你把“一张订单涉及哪些表”“为什么订单明细要单独建表”这类设计逻辑讲透。

2. 把知识地图摊开:数据库核心版块到底有哪些

在学习之前,先要知道“数据库”这四个字到底覆盖多大范围。根据我这些年接触到的教材、课程设计和面试题,数据库知识大致可以分成六个版块。这六块不是平行的,而是像盖楼一样层层往上叠。

2.1 SQL语言能力:增删改查是起点,JOIN才是分水岭

第一个版块是SQL语言能力,也就是最常见的“增删改查”(INSERT、SELECT、UPDATE、DELETE)。这部分是基础中的基础,但不代表它简单。真正把初学者分开的,是JOIN、子查询、聚合函数和窗口函数。尤其是JOIN,无数人在“INNER JOIN和LEFT JOIN有什么区别”上栽过跟头,后面我会专门用一个章节来拆。

我建议学习SQL时不要只对着练习题敲,而是找一份真实一点的数据集,自己给自己出题。比如对着北风数据库问:“每个品类的商品总销售额是多少?”“哪些客户今年没有下过单?”这些题目会逼着你组合多种SQL语法,练出来的能力才是活的。

2.2 数据库设计:ER模型与范式,决定上限的设计能力

第二个版块是数据库设计,核心是ER模型(实体-关系模型)和范式理论。实体就是业务里的对象,比如“客户”“商品”“订单”;关系描述对象之间的联系,比如“一个客户可以下多个订单”。设计时先画ER图,再转成关系表,这是正规的开发流程。

范式理论常把人绕晕,尤其“第二范式”“第三范式”这种名词。我的理解方式很简单:

  • 第一范式:字段不能再拆,比如“地址”别存成一整个字符串,要拆成省、市、区。
  • 第二范式:表要有一个主键,而且没主键的字段都得完全依赖这个主键。
  • 第三范式:字段之间不能有传递依赖,比如订单表里别直接存“客户公司名”,应该只存客户ID,公司名去客户表里查。

理解范式不是为了考试,而是为了在“多建几张表”和“冗余几个字段”之间做权衡。过度规范化会让查询要JOIN很多张表,过度冗余又会有数据不一致的风险。这个平衡感,就是数据库设计经验的核心。

2.3 索引与查询优化:查询慢不是机器差,是索引没用好

第三个版块是索引。索引相当于书的目录,能让你不用翻完整本书就找到目标内容。数据库里最常用的是B+树索引,它能在海量数据里快速定位到目标行。但索引不是越多越好,因为每次增删改都要同步维护索引,索引建多了写入会变慢。

查询优化里最经典两个的知识点,一个是什么时候索引会失效(比如对索引列做函数运算、隐式类型转换),一个是执行计划怎么看。MySQL里可以用EXPLAIN看到查询走了哪种访问路径,这是所有数据库从业者必须掌握的技能。

2.4 事务、并发与锁:数据库为什么不会“乱套”

第四个版块是事务、并发与锁。事务保证一批操作要么全部成功、要么全部失败,核心特性是ACID(原子性、一致性、隔离性、持久性)。并发控制解决的是多个用户同时读写同一份数据时如何保证正确性,锁就是最核心的手段。

“数据库死锁”是这里面的高频考点,也是实战中非常头痛的问题。两个事务各自持有一部分资源,又互相等待对方释放资源,就造成了死锁。理解死锁的成因和处理方式,是数据库从“会用”到“会调优”的分水岭。这部分我会在第五章重点讲。

2.5 数据库管理:同步、备份、恢复与迁移

第五个版块是数据库管理,包括备份恢复、主从同步、数据迁移、权限管理等。很多人觉得这是DBA的活,其实开发者也躲不开——面试会问主从复制的原理,工作中要处理“Excel导入数据库”、数据库同步到数据仓库、环境迁移等任务。

主从复制是最常见的数据库同步思路:主库负责写,从库负责读,通过日志(如MySQL的binlog)把变更同步到从库,实现读写分离和容灾。近年比较火的“数据库同步工具”,核心也是把变更日志或数据文件同步到另一个库。理解了这条主线,不管是MySQL主从,还是专门的同步工具,你都能很快上手。

2.6 生态与扩展:从关系型到向量数据库

第六个版块是生态与扩展。关系型数据库(MySQL、Oracle、PostgreSQL)统治了大部分业务场景,但有些场景它并不擅长。比如全文搜索、图关系查询、AI场景里的相似向量检索,分别衍生出了搜索引擎、图数据库和向量数据库。

向量数据库(比如Qdrant、Milvus)是这两年的热门方向,核心是给文本、图像等数据生成向量,然后做相似度检索。它和传统数据库的建模思路完全不同,但底层的存储、索引、查询框架是相通的。第一部教程不会深入向量数据库的实现细节,但会帮你理解它解决什么问题、和关系型数据库是什么关系。

3. 分阶段推进:四步走的学习路线与时间安排

知识版图铺开了,接下来最难的就是“怎么安排先后顺序”。我给大部分初学者推荐的是“四步走”路线,每一步都有明确的目标和产出。时间安排按每周投入10到15小时来设计,对应在校生或在职转行者的节奏。

3.1 第一阶段:把SQL写到条件反射(约2周)

第一阶段目标只有一个:离开教程也能独立写出正确的SQL。不要贪多,把单表查询、多表JOIN、分组聚合、子查询练熟就够。这个阶段的关键是“练”,不是“看”。

我建议准备两样东西:一套MySQL或SQLite环境,一份北风数据库脚本。每天给自己出五道题,用SQL实现并检查结果。练到“看到需求脑子里能立刻浮现出表结构”就算过关。这个阶段不需要碰索引和事务,免得信息过载。

3.2 第二阶段:围绕一个业务场景做完整库表设计(约2周)

第二阶段进入数据库设计。找一个小业务场景,比如“图书管理系统”“学生选课系统”,自己画ER图、设计表结构、确定主外键、写建表语句。做完后用第一阶段写的SQL去验证:最常用的几个查询,能不能靠现在这张表结构查出来?如果每查一个数据都要JOIN六张表,就要考虑是不是设计得过于碎片化了。

完成标准是:你的表结构能支撑十个以上真实业务问题,而且数据不冗余、不矛盾。这一步做扎实,后续学索引和优化会快得多。

3.3 第三阶段:深入原理与故障排查(约3周)

第三阶段回到原理。重点理解三件事:索引怎么加快查询、事务隔离级别怎么控制并发、死锁怎么形成和排查。学习方式以“现象驱动”为主——故意造出一个慢查询,再分析执行计划,再建索引,再看效果;故意开两个事务制造死锁,再观察数据库怎么处理。只有亲手踩过坑,原理才会变成你自己的东西。

3.4 第四阶段:扩展视野,接触多个数据库与前沿方向

第四阶段属于拔高。把MySQL里学到的东西迁移到其他数据库上,比如看看Oracle的ROWNUM和FETCH FIRST分页写法,看看达梦的兼容性设计,接触一下MongoDB这种文档数据库,再了解一下向量数据库的基本概念。这一步不要求精通,只要建立“换库不慌”的底气。

4. 工具链与练习数据:把学习环境一次配齐

工欲善其事必先利其器。数据库学习的工具链不需要很复杂,但选对了能省掉大量折腾时间。这里我把常用工具和选择思路整理一下。

4.1 选对客户端工具:DBeaver、Navicat与命令行的取舍

很多初学者直接用命令行敲SQL,感觉很“专业”,实际上学习成本被无谓拉高了。命令行适合生产环境排查,不适合学习阶段——你连表结构都看不清,怎么理解数据关系?我更推荐用图形化客户端工具。

我用过的几款工具对比大概是这样的:

工具 优点 缺点 适合场景
DBeaver(社区版) 免费、支持几乎所有数据库、自带ER图查看 部分高级功能需付费版 学习、开发主力推荐
Navicat 界面友好、功能完善、导入导出方便 收费,价格不便宜 工作中常见,公司采购后很香
数据库自带命令行 任何环境通用、脚本化方便 不直观、学习曲线陡 生产环境操作、面试考察

我的建议是:学习期用DBeaver,工作后看团队用哪个就用哪个。重要的是通过图形界面把表结构、索引、执行计划这些抽象概念“看”明白,而不是纠结工具本身。

“DBeaver怎么创建数据库”这类问题,其实就是连接上数据库后,右键连接名,选择“新建数据库”,填个名字和字符集就行。但这里有个细节:很多初学者在DBeaver里找不到创建数据库的入口,是因为连接的是“库”而不是“服务器”。回到DBeaver主界面,你连接的是MySQL服务器实例,建库建表都要在服务器连接下操作,而不是在某个已经存在的数据库下面。

4.2 练手数据:北风数据库与其他经典示例库

练手一定要用真实感强的数据,不要自己造三五行数据就完事。北风数据库是最经典的选择,它模拟了一家贸易公司的销售业务,包含客户、供应商、商品、订单、订单明细、员工、运货商等表,数据量不大但业务逻辑非常完整。

它的经典之处在于:你能拿它练JOIN,也能练聚合统计,还能练数据库设计分析——比如“为什么Order Details表要同时存放商品ID和单价快照”?这个问题背后是“订单价格应该随商品价格变动吗”的业务决策。一份好的练习数据,能让你在写SQL之外,顺便思考数据建模的合理性。

4.3 本地环境搭建:MySQL、Oracle、达梦、SQLite如何选

环境搭建是很多人入门的第一道坎。我的建议是分步骤来:

  • 第一步:装SQLite,零配置、单文件就能跑,适合第一次接触数据库语法。
  • 第二步:装MySQL或者直接Docker拉一个MySQL容器。这里提一句,如果本机装MySQL报各种依赖错误,用Docker是最快的。
  • 第三步:碰到Oracle安装教程时不用害怕,Oracle环境重是真的重,但用Docker镜像也能跑起来。
  • 第四步:想了解达梦数据库,可以先看它的官方文档,了解它和Oracle的语法兼容点,等有实际需求再装。

Excel导入数据库这个需求也可以顺手解决:图形化工具自带导入向导,把Excel另存为CSV,再用导入功能映射一下字段就能入库。这一步虽然简单,但能帮你理解“外部数据入库”的通用流程。

5. 高频痛点逐个拆:JOIN、死锁、并发与那些坑

在这一章,我挑几个热搜榜上反复出现、也是实际学习中最容易卡住的知识点,逐个拆开讲。这些点单独看好像都是零散问题,实际上背后都对应着明确的知识板块。

5.1 JOIN:数据库面试绕不开的“组合艺术”

“MySQL数据库JOIN含义”是搜索榜上经久不衰的热词。JOIN就是把两张表按某个条件组合起来,最常用的有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN。

我讲JOIN喜欢拿订单场景举例。有一张customers表:

customer_id name
1 张三
2 李四

有一张orders表:

order_id customer_id amount
100 1 50
101 1 30
102 3 80

注意,订单表里的customer_id出现了3,但客户表里没有这个客户,这就是数据不一致或“有订单没有客户信息”的情况。

INNER JOIN只返回两边都匹配的行:

SQL
SELECT c.name, o.order_id, o.amount
FROM customers c
INNER JOIN orders o ON c.customer_id = o.customer_id;

结果只有张三的两条订单,李四没下过单、客户3在客户表不存在,都不会出现在结果里。

LEFT JOIN以左表为主,左表所有行都保留,右表没有匹配的填NULL:

SQL
SELECT c.name, o.order_id, o.amount
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id;

结果里张三两条订单、李四一条订单但订单列都是NULL。这里我要强调一个高频错误:很多人以为LEFT JOIN结果行数一定不多于左表,其实如果右表有多条匹配,行数反而会变多。这就是“一对多JOIN导致结果翻倍”问题,面试和工作里都特别常见。

5.2 死锁与并发锁:两个会话抢数据引发的血案

“数据库死锁”“数据库并发锁”也是热度很高的搜索词。死锁听起来很高深,其实用生活场景类比很简单:两个人面对面过独木桥,互相堵住,谁也没法往前走,除非有一个人主动退回去。

数据库里最常见的死锁案例是“两个事务以相反顺序更新两条记录”。事务A先更新表X、再更新表Y;事务B先更新表Y、再更新表X。当A持有X的锁等待Y,B持有Y的锁等待X时,死锁就形成了。

MySQL会自动检测死锁并牺牲其中一个事务,让它回滚,另一个事务继续执行。但如果你的业务代码没有处理“重试被牺牲事务”的逻辑,用户就会看到莫名的报错。解决死锁最经典的方法是:所有事务都按固定顺序更新数据,比如统一先更新表X再更新表Y,就不会形成环状等待。

排查死锁时不要只盯着SQL本身,要结合日志看事务持有哪些锁、等待哪把锁、事务执行顺序是什么。很多数据库提供了死锁日志和状态查询命令,这是实战排查的主战场。

5.3 数据类型与显示问题:Oracle导出身份证号为何变成科学计数法

“Oracle数据库SQL导出的身份证信息是科学计数法,怎么正确显示身份信息”这个话题极具代表性。很多人把身份证号存成NUMBER类型或者直接在Excel里打开导出的数据,结果看到一串类似1.10012E+17的东西。

这个问题的根源只有一个:身份证号长度超过了15位,超出数字类型和Excel的精确表示范围。数字类型存身份证号是建模失误,正确做法是存成VARCHAR2或CHAR。如果数据已经存在,修复起来要分两步走:

  1. 用TO_CHAR函数把数字转成字符,比如TO_CHAR(id_card)。
  2. 如果数据已经被科学计数法破坏,比如精度丢失,那就不是格式化能解决的了,必须回源数据修正。

这个案例的价值不在于“身份证号怎么存”,而在于提醒你:数据库里每个字段的类型选择,都必须结合业务数据的真实形态来定,而不是“看着像一个数字就建数字类型”。

5.4 数据库同步:主从复制与同步工具都是什么思路

“数据库同步软件”“数据库同步工具”在热词里出现频率很高。先说结论:数据库同步的核心思路就是“把变更记录下来,然后在另一个地方重放”。

最底层的同步是主从复制。MySQL主库把数据变更写进binlog,从库拉取binlog并在本地重放,从而实现数据一致。这个机制衍生出了读写分离、故障切换、灾备等方案。另一类是逻辑同步工具,比如基于日志解析的CDC工具,他们不依赖数据库原生的复制协议,而是解析binlog或者Redo Log,把变更转成结构化事件再发给其他系统,常用于数据同步到数据仓库或消息队列。

学习数据库同步时,建议分三层理解:

  • 第一层:日志是怎么产生的,binlog和redo log有什么区别。
  • 第二层:从库怎么拉日志、怎么重放、怎么保证不丢。
  • 第三层:同步延迟怎么产生,怎么监控和处理。

有了这三层认知,不管遇到什么同步工具,你都能快速定位它在链路中的位置。

5.5 向量数据库:AI时代的数据存储新成员

“向量数据库”“向量数据库qdrant下载安装”频繁上热搜,说明很多人正在接触AI应用开发。传统数据库存的是结构化的行和列,向量数据库存的是“向量”——一个物体的数学表示,比如一句话、一张图被模型转成几百维的浮点数数组。

向量数据库解决的核心问题是“相似性检索”,也就是“哪条记录和我这段文本/这张图最像”。典型应用是知识库问答、图片搜索、推荐系统。以Qdrant为例,你可以自己下载安装,把文档切片后通过Embedding模型转成向量,存进Qdrant,然后查询时用同样的模型把问题转成向量,在库里做最近邻搜索。

学习向量数据库不需要上来就啃源码,先理解它和关系型数据库的定位差异,再用Python客户端跑通一个“文本存储-相似搜索”的Demo,基本就有感觉了。这部分我会放在系列教程靠后的章节细讲,第一部只需要了解它是什么。

6. 从课程设计到面试题:如何用实战把知识串起来

学数据库最怕的是每个知识点都懂一点,但连不成线。连成线最好的方式,是同时做两件事:完成一个完整的数据库课程设计,以及按面试题的标准复盘一遍知识体系。这两件事其实可以互相成就。

6.1 数据库课程设计:拿什么题目练手最有含金量

“数据库课程设计”是很多大学生第一次真正独立完成一个数据库项目。选题建议不要选择过于花哨的“XX管理系统”空壳,而是选一个能体现数据关系的题目。比如“图书管理系统”,它天然需要两张核心表——图书表和借阅记录表,借阅记录要关联图书ID和读者ID,天然需要JOIN查询。

我做课程设计时的步骤是这样的:

  1. 先写需求描述:系统有哪些角色,要解决哪些问题。
  2. 画ER图:把实体、属性、关系标清楚。
  3. 转成表结构:确定每张表的主键、外键、字段类型和约束。
  4. 设计3到5个核心业务场景,比如“借书”“还书”“查逾期”“统计热门图书”。
  5. 为每个场景写SQL,验证表结构是否合理。
  6. 对最慢的查询做索引优化练习。

有了这个过程,数据库设计、SQL、索引、优化全部覆盖了,比死记硬背考点有用得多。很多学生把大量时间花在写前端页面上,反而忽视了数据库设计的核心地位,最后答辩被老师问几个表结构问题就露馅了。

6.2 面试高频知识点:从原理到场景题的答题思路

“数据库面试题”是热词里最值得长期关注的。把常见面试题分类,其实就能看出来一个公司考察的是什么层级:

  • 基础层:SQL语法、增删改查、聚合、JOIN。
  • 设计层:三大范式、表设计案例、主键外键策略。
  • 原理层:索引结构、事务隔离级别、MVCC、锁机制。
  • 实战层:慢SQL排查、死锁处理、主从延迟、数据迁移。

很多人准备面试时只刷“基础层”的题,觉得自己JOIN写得很溜就够了,结果一问“你们生产环境死锁怎么排查”就懵了。我建议准备面试时,每个知识点都准备一个真实场景案例,比如:

  • “你遇到过慢查询吗?怎么排查的?”用EXPLAIN分析执行计划、发现索引失效、改写SQL、验证效果。
  • “你了解数据库死锁吗?”深挖锁机制,描述一个实战死锁案例的排查过程。

这套“原理+场景+解决过程”的叙述结构,比单纯背书好用得多。

6.3 用一条“业务主线”把零散知识串成体系

系统性学习数据库,不要背书的根本方法是:找一条贯穿始终的业务主线,让每个知识点都挂在这条线上。

我喜欢用“订单系统”把所有知识点串起来:

  • 用户注册、商品上架 → 建表、设计字段类型
  • 用户下单 → 事务保证订单主表和明细表同时写入成功
  • 订单量上来了,查询变慢 → 建索引、看执行计划
  • 多个用户同时买同一件商品 → 行锁、乐观锁
  • 促销活动瞬间流量太大 → 读写分离、主从同步
  • 一张订单对应多个商品明细 → JOIN查询统计金额

当你能把一条主线上的所有环节都说清楚,数据库对你来说就不再是零散的知识点,而是一套可以应对实际问题的完整能力。这也是《数据库教程FGMT00-教程学习大纲与学习指南(第一部)》真正想帮你建立的东西。

7. 第一部学习计划表与我的实践体会

最后给一份可以直接照着执行的学习计划表。这份计划是按“在职/在校每周10到15小时”设计的,你可以根据自己的时间调整周期,但每阶段的顺序不建议打乱。

7.1 28天基础学习计划表(第一部版)

周次 学习主题 实操任务 验收标准
第1周 SQL基础:增删改查、过滤、排序、分组 安装DBeaver + MySQL,导入北风数据库 能独立完成20道单表和分组查询题
第2周 多表JOIN、子查询、视图 用北风数据库完成10道JOIN练习题 能画出订单相关表的ER关系图
第3周 数据库设计:ER图、范式、表结构 设计“图书管理系统”或“学生选课系统”表结构 表结构能支撑5个以上业务场景查询
第4周 索引、事务、隔离级别、锁与死锁 用EXPLAIN分析慢查询,模拟死锁场景 能解释每个SQL的索引使用情况

每周的建议是“三看三练”:看文档理解概念,看别人的SQL学写法,看报错学排错;练设计,练SQL,练讲解(把一个知识点用自己的话说出来)。

7.2 踩过的坑与忠实建议

最后分享几个我在学习和带人过程中反复踩到的坑:

第一,不要贪多求快。有人一周就想学完MySQL全套,结果连事务都没理解就去看分布式数据库,最后什么都没学会。数据库是地基学科,慢就是快。

第二,不要只在教程环境里练。教程里的数据永远干干净净,现实里的数据又脏又乱。你至少要有一次“导入外部数据”的经历,比如把一个Excel表导入数据库,你才会理解为什么数据库要设计主键和约束。

第三,一定要养成看报错日志的习惯。很多人报错第一反应是复制错误去搜索,这没错,但更重要的是先看错误信息里的表名、字段名、行号。错误信息里每个词都值得读三遍。

第四,学会用“类比”来理解抽象概念。事务就像银行转账、锁就像更衣室钥匙、索引就像字典目录、死锁就像两个人互相让路让到僵持。这些类比虽然不精确,但在初学阶段能帮你快速建立直觉,等你有经验了再去纠正细节。

数据库的学习是一场“越深入越觉得自己差得远”的旅程,FGMT00系列教程第一部的目标,就是让你先把地图看清楚、把环境搭好、把核心知识版块过一遍。接下来每一部都会聚焦一个方向深入展开,比如索引优化专题、事务与并发专题、课程设计实战专题。如果你按着这份大纲走完前四周,再去回头看那些让你头疼的“数据库死锁”“数据库中JOIN含义”之类的搜索词,会发现那些概念已经不再陌生了。

相关推荐

基于Python+Open CV的手势识别算法设计

伴随着人工智能时代的到来,人机交互的领域也逐渐成为研究的一大方向;其中,手势识别是人机交互领域的一项关键技术,自此手势识别也迎来了一波高潮,近几年无论是在消费领域、电子领域、数码领域、家电领域甚至汽车领域上,都能或多或少的见到手势识别的身影。 手势识别在设计智能高效的人机界面方面具有至关重要的作用, 目前手势识别已应用到手语识别、智能监控、到虚拟现实等各个领域,手势识别的原理都是利用各种传感器(例如红外、摄像头等)对手部的形态进行捕捉并进行建模,形成一个模型信息的序列帧,而后将这些信息序列转换为机器能够识别的相对应指令(例如打开、切换菜单、移动等)来完成控制。 采用Python的集成开发环境Pycharm进行本次课程设计,在Pycharm中进行需要库(模块)的下载,调取电脑摄像头,按帧读取摄像头采集到的头像,形态学处理,图像旋转(由于摄像头采集到的图像是镜像,需要用cv2.flip将摄像头采集到的图像进行处理),选取图片中固定位置作为手势输入,用红线画出手势识别框,基于hsv的肤色检测,进行高斯滤波,找出轮廓,求出图像中手势的凹凸点,手指间角度求取。

努力学习前端的小陈

ROS-CV-ImageConverter:将ROS图像转换为OpenCV(cv :: Mat)类型的图像

ROS-CV图像转换器 依存关系 cv_bridge(ROS软件包)

Willis Wang

计算机视觉图像处理-CV2与图像插值算法

用最近邻插值与双线性插值原理完成图像缩放 最近邻插值,是指将目标图像中的点,对应到源图像中后,找到最相邻的整数点,作为插值后的输。缺点:使用最近邻插值算法处理图像放大时,在图象中可能出现明显的块状效应 双线性插值,在两个方向上做三次线性插值。使用双线性插值算法处理图像放大时,在图象中可能出现马赛克 代码 import cv2 img = cv2.imread(’./xiabang.jpg’, cv2.IMREAD_UNCHANGED) #缩放比例 scale_percent = 0.3 width = int(img.shape[1] * scale_percent) height = int

weixin_38697274

基于水平集CV模型的图像分割(Matlab代码)

基于水平集CV模型的图像分割(Matlab代码),全套代码

小宇QAQ

导向滤波(guide_filter)的python实现

导向滤波(guide_filter)的python实现,可以结合暗通道;理论实现比较好的图像去噪效果。

zachzhan_g
返回顶部
诗语情柔
博客等级 码龄10年 1,931粉丝 1,339原创