You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL是否支持创建隐藏列?能否像Oracle一样通过SQL语句创建?

MySQL 隐藏(不可见)列支持说明

嘿,好问题!MySQL确实支持创建隐藏(官方称为不可见列),不过这个特性是从MySQL 8.0.23版本才正式引入的,和Oracle的实现思路类似,但语法细节有一点点区别。下面咱们来具体说说怎么用:

创建表时定义不可见列

你可以在CREATE TABLE语句里用INVISIBLE关键字标记列,这样它就会成为隐藏列,默认情况下不会被SELECT *返回:

CREATE TABLE customer (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    phone VARCHAR(20),
    internal_id VARCHAR(50) INVISIBLE -- 这就是隐藏列
);

如果要查询这个隐藏列,必须显式指定它的列名,比如:

SELECT id, name, internal_id FROM customer;

修改表时添加/调整不可见列

用ALTER TABLE语句也能轻松添加隐藏列,或者修改现有列的可见性:

  • 添加新的隐藏列:
ALTER TABLE customer ADD COLUMN audit_log TEXT INVISIBLE;
  • 将现有普通列改为隐藏列:
ALTER TABLE customer MODIFY COLUMN phone VARCHAR(20) INVISIBLE;
  • 将隐藏列恢复为可见列:
ALTER TABLE customer MODIFY COLUMN phone VARCHAR(20) VISIBLE;

一些关键注意事项

  • 不可见列可以正常参与索引、约束(比如NOT NULL、UNIQUE),只是默认不被SELECT *包含
  • 插入数据时,如果不指定列名,只要隐藏列有默认值或者允许NULL,就能正常插入;如果列是NOT NULL且无默认值,就必须显式指定列名和值
  • 这个特性非常适合存储内部使用的字段(比如内部令牌、审计标识),避免普通查询返回不必要的敏感或内部数据

内容的提问来源于stack exchange,提问作者Vishal Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:04:04