MySQL C API 通过 libmysqlclient 提供对客户端/服务器协议的底层访问。完整流程包括初始化、配置连接、执行 SQL、区分结果集与受影响行数、释放资源和关闭连接。业务代码还必须解决凭据、超时、字符集、SQL 注入和断线处理问题。
1. 安装与编译不同发行版的软件包名称可能是 MySQL Connector/C、M ...
MySQL 账户由“用户名 + 来源主机”共同确定。安全管理的目标不是给应用一个能连接的账户,而是让每个服务、人员和自动化任务只拥有完成职责所需的最小权限,并且能够审计、轮换和回收。
1. 账户身份123'app'@'localhost''app'@'10.0.0.%' ...
视图是由查询定义的虚拟表。它可以封装复杂连接、提供稳定查询接口、隐藏敏感列,但普通视图通常不独立存储结果,也不会天然提高查询性能。
1. 创建与查询视图12345678910CREATE OR REPLACE VIEW v_employee_department ASSELECT e.id, e.name AS employee_name, ...
事务把多条逻辑相关的 SQL 组成一个整体:要么全部提交,要么全部回滚。真正困难的部分是并发事务如何互相影响,以及 InnoDB 如何通过锁、undo log、MVCC 和日志在一致性与性能之间取得平衡。
1. 为什么需要事务转账需要同时扣减付款方余额并增加收款方余额:
12UPDATE account SET balance = balance - 1 ...
索引用额外空间与写入维护成本换取检索速度。理解 MySQL 索引不能停留在 CREATE INDEX:还要知道数据页、B+ 树、聚簇索引、回表、覆盖索引、最左前缀和执行计划之间的关系。
1. 没有索引会怎样1SELECT * FROM employee WHERE employee_no = 998877;
没有可用索引时,优化器可能执行全表扫描。数据 ...
连接用于按关系把多张表的行组合起来。内连接只保留匹配行,外连接还会保留指定一侧的未匹配行。最常见错误不是语法,而是把过滤条件放错位置,意外把外连接变回内连接。
1. 示例数据12345678910CREATE TABLE department ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);C ...
复合查询把分散在多张表中的信息组合成一个结果。核心不是把 SQL 写得越长越好,而是明确表之间的关系、每一步产生多少行,以及空值、重复值和相关子查询会怎样影响结果。
1. 示例关系1234567891011121314CREATE TABLE department ( id INT PRIMARY KEY, name VARCHAR(50) ...
内置函数让 SQL 能完成日期计算、字符串处理、数学运算、空值替换和条件映射。使用时不仅要记住返回值,还要关注时区、字符与字节、确定性、NULL 传播和索引可用性。
1. 日期时间函数1234SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, NOW(6);
常 ...
CRUD 是 SQL 的基本功,但可靠查询远不止背诵 SELECT。列清单、空值逻辑、确定性排序、安全更新、分页方式和聚合顺序都会影响正确性与性能。
1. 准备表12345678910111213CREATE TABLE exam_result ( id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, ...
约束把业务规则写进表结构,使数据库成为数据完整性的最后防线。应用校验能改善用户体验,但无法代替 NOT NULL、主键、唯一键、外键和 CHECK 对所有写入入口的统一保护。
1. NOT NULL12345CREATE TABLE user_profile ( id BIGINT UNSIGNED NOT NULL, nickname VA ...
