Mysql
 sql >> Database >  >> RDS >> Mysql

Sottoquery come colonna generata in mysql?

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

È ragionevole che l'espressione per una colonna generata possa fare riferimento a solo colonne all'interno della stessa riga. La colonna generata non può utilizzare sottoquery o fare riferimento ad altre tabelle o funzioni con output non deterministico.

Supponiamo che le colonne generate supportino i riferimenti tra tabelle. Considera in particolare il caso di STORED colonne generate.

Se aggiorni una tabella, MySQL dovrebbe anche aggiornare tutti i riferimenti nelle colonne generate altrove nel database, se fanno riferimento alla riga che hai aggiornato. Sarebbe complesso e costoso per MySQL rintracciare tutti quei riferimenti.

Quindi considera l'aggiunta di riferimenti indiretti tramite le funzioni memorizzate.

Quindi considera che il tuo aggiornamento riguarda una tabella InnoDB in una transazione, ma la colonna generata potrebbe trovarsi in una tabella non transazionale (MyISAM, MEMORY, ARCHIVE, ecc.). Il tuo aggiornamento dovrebbe riflettersi in quelle colonne generate quando lo fai? E se tornassi indietro? Il tuo aggiornamento dovrebbe riflettersi nel momento in cui ti impegni? Quindi in che modo MySQL dovrebbe "mettere in coda" le modifiche da applicare a quelle tabelle? Cosa succede se più transazioni eseguono il commit di aggiornamenti che influiscono sul riferimento di colonna generato? Quale dovrebbe vincere, quello che ha applicato il cambio per ultimo o quello che si è impegnato per ultimo?

Per questi motivi, non è pratico o efficiente consentire alle colonne generate di fare riferimento a qualcosa di diverso dalle colonne della stessa riga nella stessa tabella.