当前位置: 首页 > article >正文

MySQL 8.0隐藏特性实战:隐藏列、隐藏索引与生成主键的应用与避坑

1. 项目概述深入挖掘MySQL 8.0的“隐身术”干了这么多年数据库运维和开发我见过太多因为表结构变更而引发的线上事故。开发同学在代码里写个SELECT *当时是省事了等到哪天要加个字段特别是往中间插一列好家伙整个服务直接挂掉排查起来那叫一个头疼。MySQL 8.0作为一次重大版本更新引入了不少提升开发韧性和运维灵活性的特性其中“隐藏”系列的功能——隐藏列、生成的隐藏主键和隐藏索引——就是一组非常精妙的工具。它们不像窗口函数、通用表表达式那样引人注目却能在关键时刻比如紧急修复、平滑升级或性能调优时发挥出“四两拨千斤”的效果。今天我就结合自己的实战经验把这几个“隐藏特性”掰开揉碎了讲清楚不仅告诉你怎么用更重点分析在什么场景下用、为什么要这么用以及背后那些容易踩坑的细节。2. 隐藏列表结构变更的“救火队长”2.1 核心概念与设计初衷隐藏列从MySQL 8.0.23版本开始引入。它的定义很直白就是一个普通的表字段有名字、有数据类型能正常读写更新但在绝大多数查询场景下它对应用程序是“不可见”的。除非你在SELECT语句里明确指定这个列的名字否则它就像不存在一样。这听起来有点反直觉对吧好端端的列为什么要藏起来这就要说到它的核心应用场景应对那些难以避免的、使用了SELECT *的遗留代码进行安全的表结构变更。我们都知道在应用程序里写SELECT *是一种坏味道。它把数据层的字段顺序和数量紧密耦合到了应用层。一旦表结构需要调整比如新增一个字段或者更糟糕——在现有字段中间插入一个新字段应用程序通过位置索引获取到的数据就会全部错位导致功能异常甚至崩溃。在庞大的、历史悠久的代码库中找出并修改所有SELECT *语句成本极高尤其是在需要紧急修复线上问题时。隐藏列就是为了这个“尴尬期”而生的。你可以把新增的列定义为INVISIBLE。这样原有的SELECT *查询会自动忽略它应用程序行为保持不变给了你宝贵的缓冲时间去逐步修复应用代码。等所有代码都适配完毕后再将这个列改为VISIBLE完成平滑过渡。2.2 实战演练从创建到切换我们来模拟一个经典的博客文章表场景。最初我们有一个简单的表CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT, ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, article TEXT, PRIMARY KEY(id) );插入一些测试数据后业务提出新需求需要在发布时间ts和文章内容article之间加入一个title标题字段。如果直接ALTER TABLE ADD COLUMN并且应用层有SELECT * FROM articles这样的查询那么返回的字段顺序会从(id, ts, article)变成(id, ts, title, article)导致article内容被错误地映射到title变量上。这时隐藏列就派上用场了。我们以隐藏的方式添加这个列ALTER TABLE articles ADD COLUMN title VARCHAR(200) INVISIBLE AFTER ts;执行后通过SHOW CREATE TABLE可以看到列定义后面有特殊的注释/*!80023 INVISIBLE */这说明该列的隐藏属性是受版本控制的。即使你用低版本的客户端连接只要服务器是8.0.23隐藏特性依然生效。现在我们为已有的数据更新这个隐藏列UPDATE articles SET title CONCAT(Title for article , id);此时如果你执行SELECT * FROM articles结果集里依然只有id, ts, article三列title列不会出现。应用程序完全感知不到变化继续正常运行。只有当你明确指定列名时才能访问它SELECT id, ts, title, article FROM articles WHERE id 1;当新的应用代码部署完成彻底移除了对SELECT *的依赖并明确处理了title列后我们就可以安全地将该列转为可见完成这次架构变更ALTER TABLE articles MODIFY COLUMN title VARCHAR(200) VISIBLE;2.3 关键细节与避坑指南元数据与复制隐藏列的INVISIBLE/VISIBLE属性会记录在information_schema.COLUMNS表的EXTRA字段中。更重要的是这个属性变更会写入二进制日志并在主从复制中完美同步。这意味着你在主库上做的隐藏/显示操作从库会一致地跟随确保了数据架构的一致性。并非真正的安全隔离隐藏列只是对SELECT *和那些不明确引用它的查询“隐身”。它仍然是一个完整的列参与行存储占用磁盘空间。如果你通过INSERT INTO table VALUES (...)不指定列名的方式插入数据必须为隐藏列提供值或依赖默认值否则会报错。例如INSERT INTO articles (article) VALUES (‘new’)可以成功因为title可为NULL但INSERT INTO articles VALUES (DEFAULT, DEFAULT, ‘new’)就会因为列数不匹配而失败。性能影响微乎其微将列设为隐藏不会改变其物理存储顺序也不会影响基于该列的索引如果有的话的效率。优化器在生成执行计划时完全知晓该列的存在。它的“隐藏”特性仅作用于结果集的生成阶段。使用建议务必将其视为短期过渡方案。长期使用隐藏列会掩盖设计问题使表结构变得难以理解。我的习惯是在添加隐藏列的同时就在项目的技术债务看板中创建一项任务明确责任人和时间点要求将相关查询重构为显式列名并最终将该列可见化。这个特性是“创可贴”而不是“治愈方案”。3. 生成的隐藏主键给“无主键表”的后悔药3.1 功能机制解析从MySQL 8.0.30开始InnoDB引擎支持一个名为“生成的隐藏主键”的特性。这其实是MySQL对你“忘记”定义主键的一种强制补救措施。我们都知道InnoDB表强烈建议甚至强制要求有一个显式的主键。如果没有定义InnoDB会自己创建一个隐藏的、6字节的ROW_ID作为聚簇索引的键。但这个内部ROW_ID对用户是完全不可见、不可用的你无法在查询中引用它这会导致很多问题比如基于主键的复制延迟优化、某些运维工具无法正常工作等。GIPK特性允许MySQL自动为你创建一个可用且后续可转为可见的隐藏主键。要启用这个功能需要设置一个会话级或全局级的系统变量SET sql_generate_invisible_primary_keyON; -- 或者持久化到配置SET PERSIST sql_generate_invisible_primary_keyON;开启后当你创建一个没有显式主键的InnoDB表时奇迹发生了CREATE TABLE customer (name VARCHAR(50), email VARCHAR(100));查看建表语句你会发现多了一个列SHOW CREATE TABLE customerG -- 输出 CREATE TABLE customer ( my_row_id bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */, name varchar(50) DEFAULT NULL, email varchar(100) DEFAULT NULL, PRIMARY KEY (my_row_id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;MySQL自动添加了一个名为my_row_id的列类型是BIGINT UNSIGNED AUTO_INCREMENT并将其设为主键同时这个主键列默认是隐藏的。3.2 核心规则与使用场景这个自动生成的列有几个铁打的规则名称固定列名永远是my_row_id。因此你不能在已经存在my_row_id列的表中启用此功能。类型固定永远是BIGINT UNSIGNED并且带AUTO_INCREMENT属性。这保证了主键值的唯一性和增长性。行为与隐藏列一致在SELECT *中不可见但可以显式查询和用于WHERE条件。-- 插入数据 INSERT INTO customer (name, email) VALUES (张三, zhangsanexample.com), (李四, lisiexample.com); -- SELECT * 看不到主键 SELECT * FROM customer; -- 输出只有 name, email -- 但可以显式使用 SELECT my_row_id, name FROM customer WHERE my_row_id 1; -- 可以用于更新或删除 UPDATE customer SET email ‘new_emailexample.com’ WHERE my_row_id 2;这个功能的最佳使用场景是什么我认为主要是以下两个教育和规范环境对于数据库初学者或习惯不佳的团队可以强制开启此全局设置。这样即使他们忘了建主键系统也会自动补上一个至少保证了表的基本性能有聚簇索引和可维护性有一个可引用的唯一键。遗留表改造接手一个没有主键的历史遗留表直接添加主键可能会因为数据重复或业务逻辑复杂而困难重重。你可以先利用这个特性如果版本支持让MySQL创建一个隐藏主键至少先让表有一个唯一的、可用的标识列。之后你可以基于业务逻辑逐步清理数据最终将这个my_row_id列显式化或者用它作为桥梁迁移到一个更合适的业务主键上。3.3 注意事项与局限性不是万能药GIPK创建的是一个代理主键Surrogate Key它与你的业务数据无关。对于需要业务逻辑关联、范围查询或基于业务字段的排序它可能不是最佳选择。最终目标仍应该是设计一个合理的业务主键或组合主键。转换与更名你可以随时将这个隐藏的主键列变为可见甚至修改它的名字虽然修改列名在大型系统中需谨慎ALTER TABLE customer MODIFY my_row_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT VISIBLE; -- 或者同时改名 ALTER TABLE customer CHANGE my_row_id id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT VISIBLE;性能考量BIGINT类型的主键在存储空间和索引效率上通常比InnoDB内部那个6字节的ROW_ID要稍大一些。但这换来的是“可用性”在需要根据主键进行点查、关联或复制时这个代价是值得的。4. 隐藏索引性能调优的“安全沙箱”4.1 索引管理的新思路隐藏索引是这三个特性中最早出现的从MySQL 8.0.0就开始支持。它的作用非常聚焦让一个索引对查询优化器“不可见”但物理上依然存在并维护。为什么需要这个功能在数据库性能优化中我们经常需要评估一个索引的有效性。通常的做法是先DROP INDEX观察一段时间内系统或特定查询的性能变化。如果发现性能下降再CREATE INDEX重建它。问题在于删除和重建大型表上的索引尤其是唯一索引或主键可能是极其昂贵的操作会锁表、消耗大量I/O并可能持续很长时间这在生产环境是高风险操作。隐藏索引提供了一个完美的折中方案。你可以将索引设置为INVISIBLE优化器在制定执行计划时会完全忽略它就像它不存在一样。但数据库在执行INSERT、UPDATE、DELETE、REPLACE操作时仍然会更新这个索引的数据结构。这使得测试变得非常轻量和安全。4.2 实战验证冗余索引假设我们有一张用户订单表orders上面已经有(user_id, status)的联合索引。有开发同学认为单独在user_id上再加一个索引可能会让某些只按user_id查询的语句更快。但我们不确定又不敢直接在生产库上添加一个可能冗余的索引。我们可以分两步走第一步创建隐藏索引进行测试-- 先以隐藏方式创建索引 CREATE INDEX idx_user_id ON orders(user_id) INVISIBLE; -- 或者修改现有索引为隐藏 ALTER TABLE orders ALTER INDEX idx_existing_index INVISIBLE;第二步进行性能对比测试使用EXPLAIN分析目标查询语句。你会发现优化器没有使用这个隐藏的idx_user_id索引。通过性能测试工具模拟真实负载观察当前性能基线。将索引改为可见再次进行测试。ALTER TABLE orders ALTER INDEX idx_user_id VISIBLE;对比两次测试的结果。如果性能提升不明显或者甚至因为优化器选错索引而导致性能下降你可以轻松地将其改回隐藏状态或者直接删除。由于它一直是隐藏的对线上业务的影响几乎为零。4.3 重要规则与使用技巧主键不能隐藏PRIMARY KEY是表的基石无法设置为INVISIBLE。唯一索引的特殊性唯一索引可以被隐藏。但是唯一性约束仍然生效即使索引对优化器不可见如果你试图插入重复数据依然会触发唯一性冲突错误。这一点千万不能混淆隐藏索引只是“优化器不可见”并非“约束失效”。与索引提示的对比你可能会想用IGNORE INDEX(idx_name)提示也能达到类似效果。但索引提示需要修改SQL语句本身如果涉及的应用查询很多修改和测试成本很高。隐藏索引只需要在数据库层面操作一次所有查询立即生效方便进行全局性评估。信息获取索引的可见性信息存储在information_schema.STATISTICS表的IS_VISIBLE字段中值为YES或NO。复制与日志索引可见性的变更ALTER INDEX ... VISIBLE/INVISIBLE是DDL语句会写入二进制日志并在从库上执行确保主从架构的一致性。在我的经验里隐藏索引是进行“索引清算”和“索引优化”的利器。对于一张历史悠久的表上面可能堆积了很多不再使用或效率低下的索引。你可以批量将这些索引设置为隐藏观察一段时间比如一个完整的业务周期如果没有任何监控报警或性能问题就可以放心地删除它们从而节省存储空间提升写性能。5. 综合对比与选型策略为了更直观地理解这三个“隐藏”特性的异同我整理了一个对比表格特性引入版本作用对象主要目的是否参与约束DML操作是否更新典型应用场景隐藏列8.0.23表列平滑进行表结构变更兼容遗留的SELECT *查询。是如NOT NULL 但外键需注意是紧急添加字段避免应用因字段顺序变更而崩溃。生成的隐藏主键8.0.30整个表InnoDB为无显式主键的表自动创建一个可用、可后续管理的代理主键。是主键约束是规范建表行为为无主键的遗留表提供快速改造入口。隐藏索引8.0.0索引安全地评估索引有效性无需承担删除/重建索引的风险。是唯一约束仍生效是测试索引必要性清理冗余索引进行执行计划对比测试。如何选择核心是看你要解决什么问题应对应用耦合与变更选隐藏列。它是解决“应用层SQL写得不好”与“数据库层需要演进”之间矛盾的缓冲带。规范设计与填补空白选生成的隐藏主键。它是数据库设计上的“强制纪律”和“补救措施”尤其适用于团队规范或历史包袱重的场景。优化性能与降低风险选隐藏索引。它是DBA进行性能调优、索引管理的“安全沙箱”让测试从高风险的线上操作变为可逆的轻量级操作。6. 生产环境实践心得与避坑指南纸上谈兵终觉浅这些特性在实际生产环境中用起来还是有不少细节需要注意。关于隐藏列我踩过一个坑有一次我们给一个核心交易表加了一个隐藏的audit_version列用于记录数据审计版本。由于是隐藏列很多运维脚本和中间件如一些数据同步工具、报表生成器的DESCRIBE table或SELECT *操作会漏掉它。结果在一次全量数据迁移中迁移工具因为没有感知到这个隐藏列导致数据丢失。教训是所有涉及全表数据移动或复制的工具链都必须进行兼容性测试。最好在操作前将隐藏列临时改为可见操作完成后再改回隐藏。对于生成的隐藏主键有一个重要的限制它只适用于新建的、没有显式主键的表。对于已经存在且没有主键的庞然大物这个特性无能为力。对于这类表更常见的做法是1) 先加一个普通的AUTO_INCREMENT列并设为隐藏2) 用后台任务慢慢回填该列值3) 最后再将其设为主键并改为可见。这个过程需要精心设计避免锁表时间过长。隐藏索引的测试一定要覆盖完整场景仅仅观察一两个核心查询变慢还不够。因为索引隐藏后优化器可能为其他非核心查询选择了更差的执行计划。我的做法是在将疑似冗余索引隐藏后会运行一套完整的、覆盖所有主要业务路径的集成测试并监控数据库整体的QPS、平均响应时间和慢查询日志至少24小时确保没有“误伤”。同时要特别注意唯一索引隐藏它虽然能让优化器忽略但唯一性检查这个“副作用”依然存在可能会成为你测试时的干扰因素。最后我想强调一个原则“隐藏”不等于“删除”。无论是隐藏列、隐藏主键还是隐藏索引它们都依然消耗着数据库的资源磁盘空间、内存、维护开销。它们是你工具箱里的“临时夹具”和“测试工具”而不是永久性的解决方案。长期来看清晰、显式、符合范式约束的表结构设计以及精心规划、高效利用的索引才是数据库健康和性能的基石。这些隐藏特性是我们走向那个终极目标的、非常得力的“桥梁”和“保护伞”。

相关文章:

MySQL 8.0隐藏特性实战:隐藏列、隐藏索引与生成主键的应用与避坑

1. 项目概述:深入挖掘MySQL 8.0的“隐身术”干了这么多年数据库运维和开发,我见过太多因为表结构变更而引发的线上事故。开发同学在代码里写个SELECT *,当时是省事了,等到哪天要加个字段,特别是往中间插一列&#xff0…...

LeetCode 单词搜索II题解

LeetCode 单词搜索II题解 题目描述 给定一个二维字符网格和一个字符串数组,找出所有在网格中出现的单词。 示例: 输入:board [["o","a","a","n"],["e","t","a",&quo…...

告别ST-LINK Utility:一文详解STM32CubeProgrammer在Win10下的新特性与高效用法

STM32CubeProgrammer全面指南:解锁Win10下高效开发的六大核心能力 在嵌入式开发领域,工具链的每一次迭代都意味着效率的跃升。当STMicroelectronics宣布STM32CubeProgrammer正式取代经典的ST-LINK Utility时,许多开发者还在犹豫是否要迁移到这…...

微信网页版访问技术方案:wechat-need-web扩展的智能实现

微信网页版访问技术方案:wechat-need-web扩展的智能实现 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 在当今数字化办公环境中&#xff…...

研一新生必看!文献管理软件到底要不要用?Scholaread vs Zotero新手友好度对比

刚进入研究生阶段,你可能会听到师兄师姐反复强调"一定要用文献管理软件",但心里却充满疑问:我就几十篇文献,真的需要专门的工具吗?市面上那么多软件,Zotero、EndNote、Scholaread…到底哪个适合零基础的我? **研一新生面临的最大困境:**电脑里200篇PDF文件散落在下…...

别再装Hash工具了!用7-Zip v21.07一键校验下载文件,保姆级图文教程

7-Zip隐藏技能:用右键菜单3秒完成文件校验的终极指南 当你从网上下载了一个重要文件,如何确认它没有被篡改或损坏?大多数人的第一反应是寻找专门的哈希校验工具,但你可能不知道,电脑里早已安装的7-Zip就能完美解决这个…...

瑞德克斯平台:全球金融市场的可靠选择

瑞德克斯平台:全球金融市场的可靠选择在评估金融服务平台时,监管合规、技术能力、客户服务等维度构成了重要的观察方向。瑞德克斯平台作为业内较为活跃的服务机构,其在这些方面的实践具有一定的参考价值。本文将围绕评测视角,对其…...

终极指南:如何用Tinke轻松提取和修改任天堂NDS游戏资源

终极指南:如何用Tinke轻松提取和修改任天堂NDS游戏资源 【免费下载链接】tinke Viewer and editor for files of NDS games 项目地址: https://gitcode.com/gh_mirrors/ti/tinke 还在为无法访问NDS游戏内部资源而烦恼吗?Tinke是一款免费开源的NDS…...

性能测试工程师的春天来了?深度解析2026年就业趋势

一、冰火两重天:测试就业市场的结构性裂变 2026年的技术招聘市场,回暖与寒意并存。脉脉高聘人才智库报告显示,春招新经济行业新发岗位量同比增长22.6%,AI领域岗位量更是暴涨8.7倍。然而,这轮红利并非雨露均沾。传统功…...

国央企备考求职精灵和粉笔APP哪个靠谱

每年国央企和事业单位招聘季,数百万求职者竞争激烈。面对庞大的招录名额、繁琐的笔试流程,选择合适的备考工具至关重要。市场上,粉笔是公考领域的老牌选手,而求职精灵 Genielink 作为 AI 原生工具也在改变着求职赛道格局。下面就对…...

如何快速部署微信网页版浏览器扩展:终极完整指南

如何快速部署微信网页版浏览器扩展:终极完整指南 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为无法在浏览器中直接使用微信而烦恼…...

乔治亚理工等联手:让AI大模型“自学成才“,不再依赖更强大的老师

这项由佐治亚理工学院、加州大学洛杉矶分校、卡内基梅隆大学以及威廉与玛丽学院联合开展的研究,以预印本形式发布于2026年5月,论文编号为arXiv:2605.06597。感兴趣的读者可通过该编号在arXiv平台查阅完整论文。 一、问题从哪里来:大模型的&qu…...

终极指南:如何让Photoshop支持AVIF格式并实现图像体积减半

终极指南:如何让Photoshop支持AVIF格式并实现图像体积减半 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 想让你的Photoshop支持最新的AVIF图像格式…...

谷歌与新加坡国立大学联手打造“视频导演AI“

这项由谷歌云AI研究院与新加坡国立大学联合完成的研究,于2026年5月以预印本形式公开发布,论文编号为arXiv:2605.06924v1。有兴趣深入阅读原文的读者可通过该编号在arXiv平台检索到完整论文。**研究背景:AI拍视频为何总是"记性不好"…...

LangChain 第一课:核心架构与组件(前端友好版)

一、先一句话搞懂:LangChain 到底是什么?LangChain 是一个大模型应用开发框架,专门帮你把「大模型、RAG、Agent、工具调用」这些功能,像搭积木一样快速拼起来,不用从零写复杂逻辑。前端类比秒懂你写 Vue 要用到 Vue、V…...

银行AI大模型应用火爆!小白也能学会的数智转型秘籍,速收藏!

文章阐述了银行业在金融行业AI转型中的领先地位,AI大模型已从试点探索进入规模化落地阶段。银行采用自研与合作模式发展大模型,应用场景覆盖智能客服、信贷风控、运营自动化、财富管理及合规审计等核心业务。文章通过多个银行案例展示了AI大模型在降本增…...

ES数据库安装

ES数据库安装 # 拉取 Elasticsearch 镜像 docker pull public-docker-virtual.artsz.zte.com.cn/elasticsearch:8.8.2创建宿主机挂载目录# 统一放在 /data/es,便于管理mkdir -p /mnt/data/es/{data,config,logs,plugins}# 权限必须给足(否则容器内用户无…...

如何在Windows上使用iperf3进行专业级网络性能测试:完整指南

如何在Windows上使用iperf3进行专业级网络性能测试:完整指南 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3作为专业的网络性能基…...

3步解锁WeMod Pro:Wand-Enhancer免费增强工具完全指南

3步解锁WeMod Pro:Wand-Enhancer免费增强工具完全指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 阅读预期:你能从本文获得什…...

互联网大厂 Java 求职面试:微服务与云原生

互联网大厂 Java 求职面试:微服务与云原生 在某互联网大厂的面试中,面试官与求职者燕双非展开了一场关于微服务与云原生的深入对话。以下是他们的问答记录。第一轮提问 面试官:燕双非,首先请你简单介绍一下你对微服务架构的理解。…...

SAST 静态代码分析平台命令行接口介绍(终结篇)

下面软件工厂生成的报告展示,可以根据客户需要定制。特别说明,下面图中的所有数据均是虚构数据,仅仅是为了做图展示。1、扫描覆盖与项目分布2、漏洞总览和项目红黑榜3、按语言统计和项目修复趋势4、合规性分析5、人员缺陷统计和型号版本质量趋…...

对抗AI焦虑的最好方式是搞懂大模型的底层原理

文章指出,尽管AI技术如RAG、MCP、Skill、Agent、Harness等迭代迅速,但程序员应专注于掌握大模型的底层原理,如记忆、信息获取、操作能力等,这些原理不会因技术变迁而失效。通过理解这些基础认知,程序员能更好地应对技术…...

保姆级教程:在GD32F103上配置USART1的DMA通道5和6(附避坑指南)

GD32F103 USART1 DMA配置全攻略:从手册解读到实战避坑 在嵌入式开发中,USART与DMA的配合使用是提升串口通信效率的黄金组合。对于刚从STM32转向GD32F103的开发者来说,手册中DMA通道映射关系的不明确常常成为第一个"拦路虎"。本文将…...

Design - 一些免费图标网站

一些有用的工具网站;除了直接AI生成外,仍然有些有用的Icon免费网站,比较适合游戏的有:1. icons8.com最适合综合型游戏项目图标、插画、UI 资源比较全风格统一,适合游戏界面、按钮、功能图标可在线调整颜色和尺寸&#…...

为什么这个电路可以放大1V信号?

你的经验可能是你的枷锁这个三级直接耦合放大电路对于1kHz峰值1V信号的放大三极直接耦合放大电路参数优化被AI欺骗啦:一个有趣的三极直接耦合放大电路的调整一个三极直接耦合放大电路的设计 01 为何能够放大1V信号? 一、电路配置结果 今天很高兴&#xf…...

学生毕业管理系统(文档+源码)_kaic

第五章 详细设计与实现5.1系统前台功能的实现5.1.1登录界面的实现首先双击打开微信小程序客户端系统,连上网络之后会显示出本系统的登录界面,这是进入小程序的第初始页面“登录”,能成功进入到该登录界面则代表小程序的开启是成功的&#xff…...

算法融合自动紧急制动控制策略【附程序】

✨ 长期致力于自动紧急制动、路面识别、模糊算法、模型预测控制、联合仿真研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于模糊逻辑的路面附着系数…...

用C语言和mciSendString函数,在VS2019里写一个带进度条的音乐播放器(附完整源码)

用C语言打造可视化音乐播放器:从零实现带进度条的音频控制工具 在枯燥的控制台程序与炫酷的图形界面之间,存在一个被许多C语言学习者忽视的中间地带——通过Windows API实现简单而实用的可视化反馈。本文将带你用mciSendString函数构建一个带有实时进度条…...

基于STM32F103C8T6标准库驱动2.4寸SPI TFT触摸屏:从零搭建嵌入式GUI交互系统

1. 项目概述与硬件准备 最近在做一个智能家居控制面板的项目,选用了STM32F103C8T6这块性价比超高的开发板作为主控,搭配2.4寸SPI接口的TFT触摸屏作为人机交互界面。说实话,刚开始接触这个组合时踩了不少坑,特别是用标准库开发的时…...

RJ45连接器工程实战:从PoE热故障到户外防水的12个设计禁区

一句话核心:RJ45连接器选型失败,往往不是速率不达标,而是热、水、地、工艺四个字中的一个出了问题。本文从电源供电发热、户外环境腐蚀、屏蔽接地错误、现场压接失控四个维度,梳理12个容易被忽视的设计禁区,并提供可复…...