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
相关产品推荐
相关产品推荐

