视图字段名必须显式用AS指定别名,不可依赖原表名;需带来源前缀、避开保留字、全小写下划线,且应体现业务语义而非物理结构,并配以必要注释。
视图字段名默认沿用 SELECT 子句中表达式的原始列名,但若涉及计算、别名、函数或跨表同名列,就会丢失语义或引发歧义。比如 SELECT u.name, COUNT(o.id) 在视图里字段名可能是 name 和 COUNT(o.id),后者无法作为合法标识符被后续 SQL 引用。
AS 为每个字段指定清晰、无歧义的别名COUNT(*) AS count,而应写 COUNT(*) AS user_count
user_id),视图中仍建议保留该上下文,不简化为 id
视图不是表的镜像,而是逻辑抽象层,字段名应反映其在当前视图语境下的业务含义,而非机械复刻底层物理结构。例如 vw_user_stats 中的 last_login_time 可能来自 login_log.created_at,但字段名应按视图意图定为 last_login_time,而非 created_at。
total_order_amount 而非 tot_amt
cnt 不明确是 count 还是 contact;upd_dt 不如 updated_at 直观avg_rating、max_login_gap_days
即使 MySQL 在某些版本允许反引号包裹,但跨数据库迁移或 ORM 映射时,含空格、连字符、点号或保留字的字段名极易出错。例如 order、group、key 等在 SELECT 中会直接报语法错误。
SELECT * FROM INFORMATION_SCHEMA.KEYWORDS WHERE RESERVED = 'YES'
is_active,不写 isActive 或 IsActive
.)、括号、空格,也不以数字开头,如 2nd_contact 是非法的视图本身没有字段级 COMMENT 支持(MySQL 直到 8.0.23 才支持 COMMENT 子句用于视图列),但可通过创建后手动补充注释,或依赖文档/代码注释维持可读性。缺乏注释的视图字段,在半年后连作者都可能记不清 val_x 到底代表什么。
-- val_x: 用户最近 30 天消费金额(单位:分)
-- order_count: 来自 orders 表 WHERE status != 'cancelled'
字段名一旦发布给下游应用或报表工具,就很难变更。比起纠结“该不该加前缀”,更值得花时间确认:这个名称在业务语境里是否唯一、无歧义、可被非 DBA 理解。