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

关系型数据库MySQL(一):数据库基础

MySQL数据库基础教程一、 数据库基础概念什么是数据库 (Database, DB)?简单来说数据库就是一个有组织、可持久化存储的数据集合。你可以把它想象成一个电子化的文件柜里面存放着大量结构化的信息。数据库管理系统 (Database Management System, DBMS) 是管理和操作数据库的软件。MySQL 就是其中一种非常流行的关系型DBMS。关系型数据库 (Relational Database)核心思想数据存储在表 (Table)中表由行 (Row)和列 (Column)组成。关系不同表之间可以通过共同字段 (通常是主键和外键)建立联系形成关系模型。优势数据结构清晰数据一致性高支持复杂的查询 (SQL)。关键术语表 (Table)存储特定主题数据的结构。例如学生表、课程表、成绩表。行 (Row) / 记录 (Record)表中的一条数据代表一个具体的实体。例如一个学生的信息学号、姓名、年龄等。列 (Column) / 字段 (Field)表中的一列代表实体的某个属性。例如姓名、年龄。主键 (Primary Key)表中能唯一标识一条记录的列或列组合。例如学号在学生表中通常是主键。主键值不能重复且不能为NULL。外键 (Foreign Key)一个表中的字段它引用另一个表的主键用于建立表之间的关系。例如成绩表中的学号字段是外键它引用学生表的主键学号课程号字段也是外键引用课程表的主键课程号。外键用于维护数据的引用完整性Referential Integrity。数据库关系示例假设我们有三个表学生表 (students)学号 (sid)姓名 (sname)年龄 (sage)性别 (sgender)2023001张三20男2023002李四19女课程表 (courses)课程号 (cid)课程名 (cname)学分 (credit)C001数据库原理3C002操作系统4成绩表 (scores)学号 (sid)课程号 (cid)成绩 (score)2023001C001852023001C002782023002C00192关系分析students表的主键是sid。courses表的主键是cid。scores表的主键通常是 (sid,cid) 组合因为一个学生一门课只有一个成绩。scores表中的sid是外键指向students表的sid。scores表中的cid是外键指向courses表的cid。通过scores表我们可以知道 “张三(2023001)” 选修了 “数据库原理(C001)” 并得了85分以及 “操作系统(C002)” 得了78分同时知道 “李四(2023002)” 选修了 “数据库原理(C001)” 得了92分。二、 MySQL 数据类型MySQL 支持多种数据类型用于定义表中每一列可以存储的数据种类和范围。选择合适的数据类型对存储效率和数据完整性至关重要。主要类别如下数值类型用于存储数字。整数类型TINYINT小整数有符号-128 ~ 127无符号0 ~ 255。SMALLINT较小整数有符号-32768 ~ 32767无符号0 ~ 65535。MEDIUMINT中等整数有符号-8388608 ~ 8388607无符号0 ~ 16777215。INT/INTEGER常用整数有符号-2147483648 ~ 2147483647无符号0 ~ 4294967295。BIGINT大整数有符号-9223372036854775808 ~ 9223372036854775807无符号0 ~ 18446744073709551615。浮点数类型用于存储近似数值小数。FLOAT单精度浮点数。DOUBLE双精度浮点数精度更高。定点数类型用于存储精确数值小数。DECIMAL(M, D)精确小数。M是总位数精度D是小数位数标度。例如DECIMAL(5,2)可存储123.45。字符串类型用于存储文本。定长字符串CHAR(N)固定长度字符串长度范围 0 ~ 255 字符。存储时总是占用N个字节MySQL默认字符集下。适合存储长度基本固定的数据如国家代码、性别(M/F)。变长字符串VARCHAR(N)可变长度字符串长度范围 0 ~ 65535 字符实际受行最大字节限制。存储时只占用实际字符长度 1~2字节记录长度。适合存储长度变化较大的数据如姓名、地址。文本类型用于存储大段文本。TINYTEXT最大约 255 字节。TEXT最大约 64KB (65,535 字节)。MEDIUMTEXT最大约 16MB。LONGTEXT最大约 4GB。二进制字符串BINARY(N)类似CHAR(N)但存储二进制字节。VARBINARY(N)类似VARCHAR(N)但存储二进制字节。BLOB(Binary Large Object) 类型TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB用于存储图片、音频等二进制大对象。日期和时间类型DATE日期格式 YYYY-MM-DD (如 2023-10-27)。TIME时间格式 HH:MM:SS (如 14:30:00)。DATETIME日期和时间组合格式 YYYY-MM-DD HH:MM:SS (如 2023-10-27 14:30:00)。TIMESTAMP时间戳存储自 1970-01-01 00:00:00 UTC 以来的秒数。范围较小1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC。插入或更新记录时如果没有指定值通常会自动设置为当前时间取决于版本和设置。YEAR年份通常使用YEAR(4)格式存储 1901 到 2155 年。其他类型ENUM枚举类型列值只能是预定义列表中的一个。例如ENUM(small, medium, large)。SET集合类型列值可以是预定义列表中的零个或多个值的组合。例如SET(a, b, c, d)。数据类型选择建议根据数据特性选择是整数、小数、字符串还是日期考虑存储空间能用TINYINT就不用INT能用VARCHAR(50)就不用VARCHAR(255)除非确实需要。考虑数据完整性ENUM可以限制输入值范围。考虑性能CHAR在长度固定时检索可能更快INT比VARCHAR存储数字更快。三、 SQL 基础语法增删改查 (CRUD)SQL (Structured Query Language) 是与关系型数据库交互的标准语言。核心操作包括创建、读取、更新和删除数据。数据定义语言 (DDL) - 操作数据库和表结构创建数据库CREATE DATABASE database_name; -- 创建一个名为 database_name 的数据库 USE database_name; -- 选择使用该数据库创建表CREATE TABLE table_name ( column1 datatype [constraints], -- 列名 数据类型 [约束] column2 datatype [constraints], ... [table_constraints] -- 表级约束如主键、外键定义 );示例 (创建学生表)CREATE TABLE students ( sid INT PRIMARY KEY AUTO_INCREMENT, -- 学号主键自增长 sname VARCHAR(50) NOT NULL, -- 姓名变长字符串非空 sage TINYINT UNSIGNED, -- 年龄小整数非负 sgender ENUM(男, 女) DEFAULT 男 -- 性别枚举类型默认男 );常见约束PRIMARY KEY主键约束。FOREIGN KEY (column) REFERENCES parent_table(parent_column)外键约束。NOT NULL非空约束该列必须有值。UNIQUE唯一约束该列值不能重复。DEFAULT value默认值约束插入时若未指定则用此值。AUTO_INCREMENT自动增长通常用于整数主键。CHECK (condition)检查约束MySQL 8.0 开始较好支持。删除表DROP TABLE table_name; -- 删除表结构和数据修改表结构 (ALTER TABLE)ALTER TABLE table_name ADD column_name datatype; -- 添加新列 ALTER TABLE table_name DROP COLUMN column_name; -- 删除列 ALTER TABLE table_name MODIFY COLUMN column_name new_datatype; -- 修改列数据类型 ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_definition; -- 添加约束 ALTER TABLE table_name DROP CONSTRAINT constraint_name; -- 删除约束 (MySQL 中约束名有时需用索引名)数据操作语言 (DML) - 操作表中的数据插入数据 (INSERT)-- 方式1指定列名插入 (推荐) INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); -- 方式2不指定列名按表结构顺序插入所有列 (需确保值顺序和数量完全匹配) INSERT INTO table_name VALUES (value1, value2, ...); -- 方式3一次插入多行 INSERT INTO table_name (column1, column2, ...) VALUES (value1a, value2a, ...), (value1b, value2b, ...), ...;示例 (向学生表插入数据)INSERT INTO students (sname, sage, sgender) VALUES (张三, 20, 男), (李四, 19, 女); -- 注意 sid 是自增主键不需要手动插入值查询数据 (SELECT)这是SQL中最常用、最灵活的部分。基本结构SELECT column1, column2, ... -- 选择要显示的列 (* 代表所有列) FROM table_name -- 指定数据来源的表 [WHERE condition] -- 筛选条件 [GROUP BY column_name] -- 分组依据 [HAVING group_condition] -- 分组后的筛选条件 [ORDER BY column_name [ASC | DESC]] -- 排序 [LIMIT number]; -- 限制返回行数示例-- 1. 查询所有学生信息 SELECT * FROM students; -- 2. 查询所有女生的姓名和年龄 SELECT sname, sage FROM students WHERE sgender 女; -- 3. 查询年龄大于18岁的学生按年龄降序排列 SELECT * FROM students WHERE sage 18 ORDER BY sage DESC; -- 4. 查询年龄最大的前3位学生姓名 SELECT sname FROM students ORDER BY sage DESC LIMIT 3; -- 5. 统计男女生人数 SELECT sgender, COUNT(*) AS num FROM students GROUP BY sgender; -- 6. 查询选修了课程C001的学生姓名和成绩 (需要连接 students 和 scores 表) SELECT s.sname, sc.score FROM students s JOIN scores sc ON s.sid sc.sid -- 连接条件学生表的学号 成绩表的学号 WHERE sc.cid C001;连接 (JOIN) 类型INNER JOIN(或JOIN)返回两个表连接条件匹配的记录。LEFT JOIN(或LEFT OUTER JOIN)返回左表所有记录即使右表没有匹配右表字段用NULL填充。RIGHT JOIN(或RIGHT OUTER JOIN)返回右表所有记录即使左表没有匹配左表字段用NULL填充。FULL JOIN(或FULL OUTER JOIN)返回左右表所有记录不匹配的用NULL填充 (MySQL 需用UNION模拟)。更新数据 (UPDATE)UPDATE table_name SET column1 value1, column2 value2, ... [WHERE condition]; -- 非常重要没有 WHERE 会更新所有行示例-- 将学号为 2023001 的学生的年龄改为 21 UPDATE students SET sage 21 WHERE sid 2023001; -- 将所有性别为男的学生的年龄增加1岁 UPDATE students SET sage sage 1 WHERE sgender 男;删除数据 (DELETE)DELETE FROM table_name [WHERE condition]; -- 非常重要没有 WHERE 会删除所有行示例-- 删除学号为 2023002 的学生记录 DELETE FROM students WHERE sid 2023002; -- 删除所有年龄小于18岁的学生记录 DELETE FROM students WHERE sage 18;四、 数据库备份与恢复定期备份数据库是防止数据丢失硬件故障、人为误操作、软件故障等的关键措施。逻辑备份 (Logical Backup)原理使用 SQL 语句导出数据库的结构和数据如CREATE TABLE,INSERT。工具mysqldump(MySQL 自带命令行工具)。特点备份文件是文本文件SQL脚本可读性强便于在不同MySQL版本间迁移通常向下兼容。备份和恢复速度相对较慢尤其是大数据库。OpenEuler 下使用mysqldump备份整个数据库mysqldump -u username -p database_name backup_file.sqlusername 有权限访问该数据库的MySQL用户名。-p 提示输入密码。database_name 要备份的数据库名。backup_file.sql 备份输出的SQL文件路径和名称。备份特定表mysqldump -u username -p database_name table1 table2 backup_tables.sql备份所有数据库mysqldump -u username -p --all-databases all_databases_backup.sql常用选项--single-transaction 对支持事务的表如InnoDB进行一致性备份不影响线上写操作。--routines 包含存储过程和函数。--triggers 包含触发器。--events 包含事件调度器事件。--add-drop-database/--add-drop-table 在CREATE DATABASE/CREATE TABLE前添加DROP DATABASE/DROP TABLE语句恢复时会先删除旧库/表。恢复逻辑备份mysql -u username -p database_name backup_file.sql需要先创建好目标数据库 (database_name) 或使用--all-databases备份时自动包含创建数据库语句。物理备份 (Physical Backup)原理直接复制数据库的物理文件数据文件、日志文件等。工具文件系统命令 (cp,rsync), 第三方工具 (Percona XtraBackup - 支持热备份)。特点备份和恢复速度快。备份文件是二进制格式不可读。通常要求备份时数据库停止服务冷备份或使用支持热备份的工具如 XtraBackup。恢复时要求 MySQL 版本和配置如存储引擎、文件路径与原环境一致。OpenEuler 下冷备份 (需停止MySQL服务)停止 MySQL 服务systemctl stop mysqld复制 MySQL 数据目录通常是/var/lib/mysql到备份位置cp -r /var/lib/mysql /path/to/backup_dir/mysql_backup启动 MySQL 服务systemctl start mysqld恢复物理备份停止 MySQL 服务。清空或移除当前数据目录。将备份的数据文件复制回 MySQL 数据目录。确保文件权限和所有权正确 (通常属于mysql:mysql)。启动 MySQL 服务。备份策略建议定期备份根据业务重要性设置备份频率每天、每周。多副本备份文件应存储在不同于数据库服务器的位置另一台服务器、NAS、云存储。测试恢复定期进行恢复演练确保备份有效。结合使用可以结合逻辑备份用于迁移、小规模恢复和物理备份用于快速恢复。总结本教程详细介绍了关系型数据库的核心概念表、行、列、主键、外键、MySQL中常用的数据类型及其选择原则、SQL的基础语法DDL建表删表、DML增删改查特别是SELECT查询和JOIN连接、以及在OpenEuler系统下进行MySQL数据库逻辑备份和物理备份的方法与注意事项。掌握这些基础知识是进一步深入学习MySQL数据库管理、开发和优化的基石。请务必多加练习理解表之间的关系设计熟练掌握增删改查操作并养成定期备份的良好习惯。

相关文章:

关系型数据库MySQL(一):数据库基础

MySQL数据库基础教程一、 数据库基础概念什么是数据库 (Database, DB)?简单来说,数据库就是一个有组织、可持久化存储的数据集合。你可以把它想象成一个电子化的文件柜,里面存放着大量结构化的信息。数据库管理系统 (Database Management System, DBMS)…...

【技术全景解析】多实例学习:从核心特性到算法选型指南

1. 多实例学习入门:从药物研发到医学影像 第一次接触多实例学习(Multiple Instance Learning, MIL)是在2015年的一次医学影像分析项目。当时我们需要从数千张病理切片中识别癌细胞区域,但标注数据只有整张切片的"阳性/阴性&q…...

无刷电机强拖程序实战:从V/F到I/F的代码实现与切换策略

1. 无刷电机强拖程序基础概念 第一次接触无刷电机强拖程序时,我也被各种专业术语搞得一头雾水。简单来说,强拖就是让电机在没有位置传感器的情况下"强行"转起来的技术。想象一下你蒙着眼睛骑自行车,刚开始需要有人推你一把才能保持…...

BIThesis北京理工大学LaTeX论文模板终极实战指南:如何高效完成学术写作与格式规范

BIThesis北京理工大学LaTeX论文模板终极实战指南:如何高效完成学术写作与格式规范 【免费下载链接】BIThesis 📖 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。🎉 (更多文档请访问 wiki 和…...

别再瞎改GROUP BY了!Kingbase8中`sql_mode`参数的正确打开方式(附避坑清单)

Kingbase8中GROUP BY的精准掌控:从错误修复到sql_mode最佳实践 最近在技术社区看到不少开发者抱怨Kingbase8的GROUP BY报错问题,特别是那些从MySQL迁移过来的项目。典型的错误信息是"字段必须出现在GROUP BY子句中或者在聚合函数中使用"。这确…...

Linux C/C++多线程编程避坑:sched_setaffinity绑定CPU时,别忘了定义__USE_GNU

Linux多线程编程实战:CPU绑定的正确姿势与避坑指南 在性能敏感的多线程应用中,将线程绑定到特定CPU核心是提升执行效率的常见手段。但许多开发者第一次尝试使用sched_setaffinity时,往往会遇到各种看似莫名其妙的编译错误或运行时问题。本文将…...

GPS与北斗导航信号关键技术参数对比解析

1. 导航系统基础:GPS与北斗的核心差异 当你打开手机地图导航时,背后其实是两套"太空灯塔"系统在协同工作——美国的GPS和中国的北斗。这两套系统虽然目标相同,但技术实现却像两种不同的方言。GPS作为老牌导航系统,采用L…...

避坑指南:Potsdam数据集标签可视化与样本对齐检查,别再猜影像和mask对不对得上

避坑指南:Potsdam数据集标签可视化与样本对齐检查实战 在语义分割任务中,数据质量直接影响模型性能。Potsdam数据集作为城市遥感领域的标杆数据,其5厘米分辨率的影像和精细标注为建筑提取、土地分类等任务提供了宝贵资源。但许多工程师在预处…...

从DIP到BGA:给硬件新人的芯片封装扫盲课(附选型避坑指南)

从DIP到BGA:给硬件新人的芯片封装扫盲课(附选型避坑指南) 刚拆开一块树莓派扩展板时,那些密密麻麻的金属引脚总让人望而生畏。为什么有些芯片像蜈蚣般伸出两排直脚(DIP),有些则像扁平饼干四周布…...

Hitboxer:专业SOCD键盘重映射工具完全指南

Hitboxer:专业SOCD键盘重映射工具完全指南 【免费下载链接】socd Key remapper for epic gamers 项目地址: https://gitcode.com/gh_mirrors/so/socd 在竞技游戏和高精度操作中,你是否曾因同时按下相反方向键而遇到输入冲突?当左手和右…...

Ubuntu 22.04 LTS 上快速部署Ollama的完整指南(含模型下载与WebUI配置)

Ubuntu 22.04 LTS 上快速部署Ollama的完整指南(含模型下载与WebUI配置) 在本地运行AI模型正成为开发者探索前沿技术的新趋势。Ollama作为一款轻量级的本地AI模型运行框架,让开发者能够在个人电脑或服务器上快速部署和测试各类开源大语言模型。…...

抖音小程序通用支付避坑指南:前端开发者如何用云开发搞定RSA签名难题

抖音小程序支付全流程实战:云开发解决RSA签名难题 最近不少开发者反馈,抖音小程序的支付系统从担保支付切换为通用交易系统后,签名环节成了拦路虎。作为一位经历过完整支付对接的开发者,我想分享如何用云开发绕过复杂的后端部署&a…...

轻量化ASR生态整合:SenseVoice-Small ONNX与Obsidian插件联动教程

轻量化ASR生态整合:SenseVoice-Small ONNX与Obsidian插件联动教程 你是不是也遇到过这样的场景?在Obsidian里听了一段重要的会议录音,或者录下了自己的灵感语音,却要手动打开另一个软件去转文字,然后再复制粘贴回来&a…...

3步解锁Intel GPU的CUDA超能力:ZLUDA完整配置指南

3步解锁Intel GPU的CUDA超能力:ZLUDA完整配置指南 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 你是否曾因为NVIDIA显卡的高昂价格而无法体验CUDA的强大计算能力?现在,通…...

【2026倒计时预警】:SITS圆桌确认的3类“AI原生应用”将淘汰传统RPA/低代码平台

第一章:SITS2026圆桌:生成式AI应用趋势 2026奇点智能技术大会(https://ml-summit.org) 行业落地加速,从实验走向规模化部署 生成式AI正快速跨越POC阶段,在金融、医疗、制造和教育等垂直领域形成可复用的解决方案。多家参会企业披…...

从零构建VOC2007数据集:详解train、val、test文件划分策略与代码实践

1. 认识VOC2007数据集的基本结构 第一次接触目标检测项目时,数据集的组织方式往往让人头疼。VOC2007作为经典的数据集格式,它的目录结构设计得非常合理。我刚开始做项目时,最困惑的就是ImageSets/Main文件夹里那几个txt文件到底有什么区别。经…...

Invivoscribe推出PrepQuant™系统,这是一款一体化样本制备平台,可实现分析前工作流程的标准化和简化

精准诊断和微小残留病(MRD)检测领域的全球领导者Invivoscribe今日宣布推出PrepQuant™系统。这一全新样本制备平台可在单一自动化设备上完成核酸提取、浓缩和定量一体化操作。该创新系统旨在实现样本制备标准化,简化分析前工作流程,以降低成本&#xff0…...

区块链开发总结

区块链开发技术探索与实践指南 区块链技术作为近年来最具颠覆性的创新之一,正在重塑金融、供应链、物联网等多个领域。对于开发者而言,掌握区块链开发的核心要点至关重要。本文将从关键技术、常见挑战和最佳实践三个方面,总结区块链开发的核…...

Cursor AI Pro功能解锁:技术实现原理与多平台部署指南

Cursor AI Pro功能解锁:技术实现原理与多平台部署指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...

FigmaCN:打破语言壁垒,让设计回归创意本身

FigmaCN:打破语言壁垒,让设计回归创意本身 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 对于中文设计师来说,面对全英文的Figma界面,就…...

无涯教程-JavaScript - 深入理解 has() 方法:从 WeakSet 到集合成员检测

1. 认识JavaScript中的has()方法 第一次接触JavaScript的has()方法时,我完全被它简洁而强大的功能惊艳到了。这个方法就像是一个高效的"探测器",专门用来检查某个元素是否存在于集合中。想象一下你有一个装满各种物品的盒子,has()方…...

功能安全——严重度(Severity)评估实战指南

1. 严重度评估的核心概念 第一次接触功能安全标准时,我被"严重度"这个概念卡住了整整两周。直到亲眼目睹一次测试场事故,才真正理解这个抽象术语背后的重量——那辆失控的测试车以30km/h撞上护栏时,工程师们第一时间检查的不是车损…...

PSIM中Simplified C Block与C Block模块的变量作用域与锁存机制解析

1. PSIM中C语言模块的两种面孔 第一次用PSIM做电力电子仿真时,我和很多人一样,以为Simplified C Block和C Block模块只是名字不同而已。直到有次用BUCK电路做闭环控制,同样的PID算法代码,在C Block里运行正常,换到Simp…...

深入剖析PCL点云边缘检测:从AngleCriterion原理到C++实战优化

1. 点云边缘检测与AngleCriterion算法初探 点云边缘检测是三维视觉处理中的关键步骤,就像在二维图像中寻找物体轮廓一样重要。想象一下你用手电筒照射一个雕塑,那些明暗交界处就是边缘。在点云中,边缘检测能帮我们识别物体的边界、棱角等特征…...

Python+KEPServerEX6实战:5分钟搞定PLC数据采集(附避坑指南)

PythonKEPServerEX6实战:5分钟搞定PLC数据采集(附避坑指南) 工业自动化领域的数据采集一直是工程师们的必修课。想象一下,当你需要在生产线上实时监控数百个传感器的数据,传统的手动记录方式显然力不从心。而Python作…...

突破百度网盘下载限速的技术方案:baidu-wangpan-parse深度解析

突破百度网盘下载限速的技术方案:baidu-wangpan-parse深度解析 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度而焦虑吗?我们…...

终极DLSS文件管理方案:5分钟搞定多平台游戏DLSS版本切换

终极DLSS文件管理方案:5分钟搞定多平台游戏DLSS版本切换 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS管理、游戏性能优化、智能版本匹配 - 如果你是一位NVIDIA显卡用户,是否曾为手动管理…...

中东电商入局指南:Noon vs Amazon,出海卖家该如何选择?

随着全球电商竞争加剧,中东市场正在成为越来越多卖家的新增长点。相比欧美市场的高饱和度,中东电商仍处于快速发展阶段,尤其是以 Noon 和 Amazon 中东站为代表的平台,为不同类型卖家提供了多样化的入局路径。那么,在实…...

【STM32实战指南】SPI与8080双模式驱动OLED显示技术解析

1. OLED显示技术基础 OLED(有机发光二极管)作为新一代显示技术,凭借自发光特性在嵌入式领域广受欢迎。与LCD不同,OLED每个像素都能独立发光,这使得它具备以下天然优势: 超高对比度:黑色区域完全…...

手把手教你用GCC打包自己的C++工具库:从源码到.so/.a,再到发布给同事用

从零构建C工具库:GCC编译与团队共享实战指南 在团队协作开发中,我们经常会遇到一些通用功能模块需要被多个项目复用的情况。比如字符串处理、日志记录、配置解析等基础工具类,如果每个项目都重新实现一遍,不仅效率低下&#xff0c…...