Невидимые столбцы
Невидимые столбцы (иногда также называемые скрытыми столбцами) впервые появились в MariaDB 10.3.3.
Столбцам можно присвоить атрибут INVISIBLE в операторе CREATE TABLE или ALTER TABLE. Эти столбцы не будут отображаться в результатах оператора SELECT *, и им не нужно присваивать значение в операторе INSERT, если INSERT не указывает их явно по имени.
Так как SELECT * не возвращает невидимые столбцы, новые таблицы или представления, созданные таким образом, не будут содержать следов невидимых столбцов. Если столбцы явно указаны в операторе SELECT, они будут включены в представление/новую таблицу, но атрибут INVISIBLE не будет.
Невидимые столбцы могут быть объявлены как NOT NULL, но тогда требуют DEFAULT значение.
Невозможно сделать все столбцы в таблице невидимыми.
Примеры
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 | | +-------+---------+------+-----+---------+-----------+
Создание представления из таблицы со скрытыми столбцами:
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 | | +-------+---------+------+-----+---------+-------+
Добавление псевдопервичного ключа:
create table t1 (x bigint unsigned not null, y varchar(16), z text); insert into t1 values (123, 'qq11', 'ipsum'); insert into t1 values (123, 'qq22', 'lorem'); alter table t1 add pkid serial primary key invisible first; insert into t1 values (123, 'qq33', 'amet'); select * from t1; +-----+------+-------+ | x | y | z | +-----+------+-------+ | 123 | qq11 | ipsum | | 123 | qq22 | lorem | | 123 | qq33 | amet | +-----+------+-------+ select pkid, z from t1; +------+-------+ | pkid | z | +------+-------+ | 1 | ipsum | | 2 | lorem | | 3 | amet | +------+-------+
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/invisible-columns/