01-数据库基础架构:从零理解关系型数据库与MySQL三层架构
发布时间:2026/8/19 7:04:52 作者:尧图编辑部 阅读量:1,286

数据库基础架构从零理解关系型数据库与MySQL三层架构作者黒漂技术佬适用读者零基础入门数据库的同学关联场景无人售货柜、智慧农业、工控系统一、数据库到底是什么为什么不用Excel先说个真实场景你开了一家无人售货柜运营公司柜子里放着饮料、零食用户扫码开门、拿货、自动扣款。每天产生几千条订单数据。你用Excel记着——第一天没问题第一个月勉强能扛但当你有100台售货柜、每天上万条订单时Excel直接寄了多人同时编辑就冲突查上个月哪个商品卖得最好要等半天断电了数据可能丢没有权限控制实习生一不小心把表删了数据库就是专门解决这些问题的软件系统。它能安全地存储大量数据、支持多人并发访问、提供高效查询、保证数据不丢失、还能控制谁能看谁能改。一句话总结Excel是单车数据库是高铁。二、关系型数据库RDBMS核心概念市面上数据库分两大阵营关系型和非关系型NoSQL。MySQL是关系型数据库的代表。2.1 表、行、列——其实就是表格关系型数据库的核心思想特别朴素用二维表来组织数据。以无人售货柜的商品表为例product_idproduct_namepricestockcategory1001可口可乐3.5048饮料1002乐事薯片7.9023零食1003红牛6.0015饮料表Table一张二维表就是一个实体集合比如商品表、订单表列Column/Field表的一列代表一个属性比如价格、库存行Row/Record表的一行代表一条具体记录比如可口可乐3.5元关系Relation表与表之间通过外键关联比如订单表通过product_id关联到商品表2.2 关系型 vs 非关系型对比维度关系型MySQL非关系型Redis/MongoDB数据组织二维表结构固定键值对/文档灵活查询语言SQL标准化各家不同事务支持强ACID弱或不支持适用场景订单、账务、库存等强一致性场景缓存、日志、热门商品排行简单记钱相关的数据订单、扣款、库存必须用关系型数据库因为不能算错一分钱。三、MySQL整体架构三层架构解析这是本篇的核心。理解了MySQL的架构后面学SQL优化、索引原理就轻松了。MySQL从上到下分三层客户端JDBC / 命令行 / Navicat │ ┌────▼────┐ │ 连接层 │ ← 管理连接、鉴权 ├─────────┤ │ SQL层 │ ← 解析、优化、执行 ├─────────┤ │存储引擎层│ ← 数据真正存取的地方 └─────────┘ │ 磁盘文件3.1 连接层Connection Layer你用Navicat连MySQL时输入的账号密码就是在这一层验证的。连接层负责连接管理维护客户端连接每个连接对应一个线程权限验证检查账号密码、检查该用户有没有权限执行某个SQL连接池复用连接避免反复创建/销毁线程的开销实际开发中应用服务如售货柜后端通过连接池如HikariCP连MySQL而不是每次查询都新建连接就是因为新建连接很贵。3.2 SQL层Server层这是MySQL的大脑所有SQL语句都在这里被处理。包含几个核心组件① 查询缓存Query CacheMySQL 8.0已移除查询缓存。早期版本中如果SQL完全一样且表数据没变直接返回缓存结果。但实际命中率很低因为只要表有一条数据变化整张表的缓存就失效了所以官方砍掉了。② 解析器Parser把SQL文本翻译成MySQL能理解的内部数据结构解析树。这一步做两件事词法分析把SQL拆成一个个单词比如SELECT、FROM、WHERE语法分析检查SQL语法对不对比如你写了SELEC * FROM t少了个T解析器直接报语法错误③ 优化器Optimizer这是最聪明的部分。同一条SQL可以有多种执行方式优化器负责选一个它认为最高效的。比如SELECT*FROMordersWHEREproduct_id1001ANDstatuspaid;优化器要决定先按product_id过滤还是先按status过滤用哪个索引这些决策直接影响执行速度。注意优化器不是万能的有时候它选的执行计划不是最优的比如统计信息过期这时候需要我们手动优化后面的文章会详细讲。④ 执行器Executor按照优化器选好的执行计划调用存储引擎的接口真正去读/写数据。3.3 存储引擎层Storage Engine Layer这是MySQL区别于其他数据库的最大特色——存储引擎是可插拔的。你可以为每张表选择不同的存储引擎它们决定了数据怎么存、怎么读、支不支持事务。查看当前MySQL支持哪些存储引擎SHOWENGINES;最常用的两个是InnoDB和MyISAM。四、InnoDB vs MyISAM到底用哪个特性InnoDBMyISAM事务支持✅ 支持❌ 不支持锁粒度行锁并发好表锁并发差外键✅ 支持❌ 不支持崩溃恢复✅ 支持redo log❌ 容易损坏全文索引✅5.6支持✅适用场景大多数业务订单、账务只读为主、统计报表结论MySQL 5.5之后默认存储引擎就是InnoDB绝大多数场景都用它。除非你的表是纯只读的统计表比如售货柜的历史销售统计才考虑MyISAM。实际项目中验证当前表的引擎-- 查看所有表的引擎SELECTtable_name,engineFROMinformation_schema.tablesWHEREtable_schemayour_database;建表时指定引擎不指定则用默认的InnoDBCREATETABLEcabinet_info(cabinet_idINTPRIMARYKEY,locationVARCHAR(100),statusTINYINTDEFAULT1)ENGINEInnoDBDEFAULTCHARSETutf8mb4;五、结合场景无人售货柜的数据该长什么样假设我们运营100台无人售货柜核心表大概长这样-- 售货柜信息表CREATETABLEcabinet(cabinet_idINTPRIMARYKEY,locationVARCHAR(100)NOTNULLCOMMENT投放位置,statusTINYINTDEFAULT1COMMENT1在线 0离线,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP)ENGINEInnoDB;-- 商品表CREATETABLEproduct(product_idINTPRIMARYKEY,product_nameVARCHAR(50)NOTNULL,priceDECIMAL(8,2)NOTNULL,categoryVARCHAR(20))ENGINEInnoDB;-- 订单表CREATETABLEorders(order_idBIGINTPRIMARYKEY,cabinet_idINTNOTNULL,product_idINTNOTNULL,quantityINTDEFAULT1,amountDECIMAL(10,2),statusVARCHAR(20)DEFAULTunpaid,created_atDATETIMEDEFAULTCURRENT_TIMESTAMP)ENGINEInnoDB;注意三点金额用DECIMAL不用FLOAT——浮点数有精度丢失算钱不能马虎时间用DATETIME DEFAULT CURRENT_TIMESTAMP让MySQL自动填入所有表用InnoDB——订单涉及扣款扣库存必须有事务支持总结这篇我们理清了数据库是专业数据管理软件解决并发、查询、安全、持久化问题关系型数据库用二维表组织数据表与表之间通过外键建立关系MySQL三层架构连接层管连接→ SQL层解析优化执行→ 存储引擎层存取数据InnoDB是默认引擎支持事务和行锁绝大多数业务都该用它理解了架构下一步就是学习怎么用SQL操作数据了。