Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Subconsulta como coluna gerada no mysql?


https://dev.mysql.com /doc/refman/5.7/en/create-table-generated-columns.html

É razoável que a expressão de uma coluna gerada possa referenciar somente colunas dentro da mesma linha. A coluna gerada não pode usar subconsultas ou fazer referência a outras tabelas ou funções com saída não determinística.

Suponha que as colunas geradas suportem referências entre tabelas. Considere particularmente o caso de STORED colunas geradas.

Se você atualizar uma tabela, o MySQL também terá que atualizar quaisquer referências em colunas geradas em outro lugar no banco de dados, se elas fizerem referência à linha que você atualizou. Seria complexo e caro para o MySQL rastrear todas essas referências.

Em seguida, considere adicionar referências indiretas por meio de funções armazenadas.

Então considere que sua atualização é para uma tabela InnoDB em uma transação, mas a coluna gerada pode estar em uma tabela sem transação (MyISAM, MEMORY, ARCHIVE, etc.). Sua atualização deve ser refletida nessas colunas geradas quando você a fizer? E se você reverter? Sua atualização deve ser refletida no momento do commit? Então, como o MySQL deve "enfileirar" as alterações para aplicar a essas tabelas? E se várias transações confirmarem atualizações que afetam a referência de coluna gerada? Qual deles deve ganhar, aquele que aplicou a mudança por último ou aquele que cometeu por último?

Por esses motivos, não é prático ou eficiente permitir que as colunas geradas façam referência a qualquer coisa que não seja as colunas da mesma linha na mesma tabela.