视图是由查询定义的虚拟表。它可以封装复杂连接、提供稳定查询接口、隐藏敏感列,但普通视图通常不独立存储结果,也不会天然提高查询性能。
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 ...
数据类型决定取值范围、精度、存储开销、比较规则和可用操作。选型不当可能造成金额误差、时间混乱、索引膨胀或隐式转换。本文按业务语义梳理常见类型,而不是只罗列范围表。
1. 整数类型
类型
有符号范围(概略)
字节数
TINYINT
-128 ~ 127
1
SMALLINT
-32768 ~ 32767
2
MEDIUMINT
约 ±83 ...
表结构决定数据能够保存什么、哪些状态合法以及查询能否高效执行。DDL 语法不只是创建几个字段,还要考虑类型、约束、默认值、字符集、索引、上线成本和回滚方式。
1. 创建表1234567891011121314CREATE TABLE IF NOT EXISTS users ( id BIGINT UNSIGNED NOT NULL AUTO_INC ...
