Eu vi um novo recurso Colunas Invisíveis no MariaDB 10.3.x. Quais são os casos de uso práticos para DBA e desenvolvedor web? Quando usar esse recurso?
As colunas podem receber um
INVISIBLE
atributo em uma instruçãoCREATE TABLE
ouALTER TABLE
. Essas colunas não serão listadas nos resultados de umaSELECT *
instrução, nem precisam receber um valor em umaINSERT
instrução, a menos queINSERT
as mencione explicitamente pelo nome.Como
SELECT *
não retorna as colunas invisíveis, novas tabelas ou visualizações criadas dessa maneira não terão vestígios das colunas invisíveis. Se especificamente referenciado naSELECT
instrução, as colunas serão trazidas para a visualização/nova tabela, mas oINVISIBLE
atributo não.Colunas invisíveis podem ser declaradas como
NOT NULL
, mas exigem umDEFAULT
valor
Aqui está um caso de uso real que surgiu apenas alguns dias depois que eu aprendi sobre o recurso de colunas invisíveis no MariaDB 10.3:
Seguindo um novo requisito, adicionei uma nova coluna no meio de uma de nossas grandes tabelas. (Isso é acessado por vários aplicativos diferentes.) Embora esse seja o tipo de tarefa braçal que você não imaginaria que poderia resultar em um problema, mesmo em seus piores pesadelos, foi exatamente isso que aconteceu.
Sem que eu soubesse, tínhamos algum código legado "inovador" que estava sendo executado
SELECT *
nessa tabela específica (e várias outras, ao que parece) e, em seguida, preenchendo um conjunto de variáveis com base nos nomes das colunas e na ordem das colunas que existiam na época. O resultado final foi que os valores errados foram exibidos na interface do usuário, causando muita confusão com os usuários.Eu poderia ter corrigido o problema em minutos tornando a coluna "invisível", mas como ainda estávamos executando o 10.2, isso não era uma opção, então decidimos seguir o caminho difícil corrigindo e reimplantando o software. Se não tivéssemos acesso ao código-fonte ou por outros motivos não pudéssemos modificar o código, uma atualização para 10.3 poderia ter sido nossa única opção.
Portanto, embora esse recurso não seja coberto pelo SQL Standard, ele pode ser útil em alguns casos raros.
Obviamente, isso não é SQL padrão e geralmente é bobo. Em vez disso, siga as práticas recomendadas,
INVISIBLE
colunas.SELECT *
em código de produção.INVISIBLE
Colunas do MariaDBParece que a intenção é permitir que os usuários do MariaDB continuem usando, o
SELECT *
que quase sempre vai contra as melhores práticas de um DBA. Portanto, agora você pode usarSELECT *
e adicionar à tabela sem alterar o resultado retornado porSELECT *
.E você tem uma exportação que despeja
users
comSELECT *
. Mais tarde, se desejar adicionar uma coluna, poderá marcá-la comoINVISIBLE
e manter o resultadoPós
ADD COLUMN
-você ainda está hilariamente seguro sem saber que ninguém em sã consciência usariaSELECT *
nesse caso.Embora apenas um tipo de invisibilidade seja exposto ao usuário, o MariaDB internamente possui quatro tipos diferentes de invisibilidade. Para obter mais informações, consulte MDEV-10177 Colunas invisíveis . A invisibilidade também afeta
INSERT
, encontre mais informações no ticketOutros bancos de dados
Como um aparte, o Oracle chama esse recurso
INVISIBLE
de , e o DB2 o chama deIMPLICITLY HIDDEN
. Em outros dialetos do SQL, onde isso não é suportado, você apenas criaria umVIEW
,