Невидимые столбцы в MySQL 8
Продолжая писать о малоизвестных возможностях MySQL хочу рассказать о портированном со старшего брата Oracle DB. Так начиная с версии 8.0.23 любой столбец таблицы можно объявить невидимым.
Это можно сделать как при создании таблицы, так и при добавлении новой колонки.
CREATE TABLE test_table (
a INT,
b DATE INVISIBLE
) ENGINE = InnoDB;
ALTER TABLE test_table ADD COLUMN c INT INVISIBLE;
Видимость колонки может быть изменена в любое время:
ALTER TABLE test_table CHANGE COLUMN b b DATE VISIBLE;
ALTER TABLE test_table MODIFY COLUMN b DATE INVISIBLE;
ALTER TABLE test_table ALTER COLUMN c SET VISIBLE;
Следующие команды покажут скрытые колонки с флагом INVISIBLE:
SHOW COLUMNS FROM test_table;
SHOW CREATE TABLE test_table;
При выборке всех столбцов (SELECT *) скрытые столбцы не видны, только при явном указании:
TABLE test_table; SELECT * FROM test_table; -- столбец с скрыт
SELECT a, b, c FROM test_table; -- столбец с показан
То же самое при вставке, без явного указания не работает:
INSERT INTO test_table VALUES (1, now(), 33); == ошибка
INSERT INTO test_table () VALUES (1, now(), 33); == тоже ошибка
INSERT INTO test_table VALUES (1, 22); -- вставлен NULL
INSERT INTO test_table (a, b, c) VALUES (1, now(), 33); -- все значения
UPDATE для скрытых столбцов работает как обычно.
Зачем нужно? Безопасность данных (скрыть чувствительные данные). Знаете еще применения - пишите в комментах