Invisible Columns
Invisible columns (sometimes also called hidden columns) first appeared in MariaDB 10.3.3.
Columns can be given an INVISIBLE
attribute in a CREATE TABLE or ALTER TABLE statement. These columns will then not be listed in the results of a SELECT * statement, nor do they need to be assigned a value in an INSERT statement, unless INSERT explicitly mentions them by name.
Since SELECT *
does not return the invisible columns, new tables or views created in this manner will have no trace of the invisible columns. If specifically referenced in the SELECT statement, the columns will be brought into the view/new table, but the INVISIBLE attribute will not.
Invisible columns can be declared as NOT NULL
, but then require a DEFAULT
value.
It is not possible for all columns in a table to be invisible.
Examples
CREATE TABLE t (x INT INVISIBLE); ERROR 1113 (42000): A table must have at least 1 column CREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL); ERROR 4106 (HY000): Invisible column `z` must have a default value CREATE TABLE t (x INT, y INT INVISIBLE, z INT INVISIBLE NOT NULL DEFAULT 4); INSERT INTO t VALUES (1),(2); INSERT INTO t (x,y) VALUES (3,33); SELECT * FROM t; +------+ | x | +------+ | 1 | | 2 | | 3 | +------+ SELECT x,y,z FROM t; +------+------+---+ | x | y | z | +------+------+---+ | 1 | NULL | 4 | | 2 | NULL | 4 | | 3 | 33 | 4 | +------+------+---+ DESC t; +-------+---------+------+-----+---------+-----------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-----------+ | x | int(11) | YES | | NULL | | | y | int(11) | YES | | NULL | INVISIBLE | | z | int(11) | NO | | 4 | INVISIBLE | +-------+---------+------+-----+---------+-----------+ ALTER TABLE t MODIFY x INT INVISIBLE, MODIFY y INT, MODIFY z INT NOT NULL DEFAULT 4; DESC t; +-------+---------+------+-----+---------+-----------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-----------+ | x | int(11) | YES | | NULL | INVISIBLE | | y | int(11) | YES | | NULL | | | z | int(11) | NO | | 4 | | +-------+---------+------+-----+---------+-----------+
Creating a view from a table with hidden columns:
CREATE VIEW v1 AS SELECT * FROM t; DESC v1; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | y | int(11) | YES | | NULL | | | z | int(11) | NO | | 4 | | +-------+---------+------+-----+---------+-------+ CREATE VIEW v2 AS SELECT x,y,z FROM t; DESC v2; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | x | int(11) | YES | | NULL | | | y | int(11) | YES | | NULL | | | z | int(11) | NO | | 4 | | +-------+---------+------+-----+---------+-------+
© 2021 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/invisible-columns/