https://dev.mysql.com /doc/refman/5.7/en/create-table-generated-columns.html
生成された列の式がのみを参照できることは合理的です。 同じ行内の列。生成された列は、サブクエリを使用したり、他のテーブルを参照したり、非決定論的な出力を持つ関数を参照したりすることはできません。
生成された列がクロステーブル参照をサポートしていたとします。特にSTORED
の場合を考えてみましょう。 生成された列。
テーブルを更新する場合、MySQLは、更新した行を参照している場合、データベースの他の場所で生成された列の参照も更新する必要があります。 MySQLがこれらすべての参照を追跡することは、複雑で費用がかかります。
次に、保存された関数を介して間接参照を追加することを検討してください。
次に、更新がトランザクション内のInnoDBテーブルに対するものであるが、生成された列が非トランザクション(MyISAM、MEMORY、ARCHIVEなど)テーブルにある可能性があることを考慮してください。あなたがそれを作るとき、あなたの更新はそれらの生成された列に反映されるべきですか?ロールバックするとどうなりますか?コミット時に更新を反映する必要がありますか?それでは、MySQLはこれらのテーブルに適用するためにどのように変更を「キューに入れる」必要がありますか?複数のトランザクションが、生成された列参照に影響する更新をコミットした場合はどうなりますか?最後に変更を適用したものと最後にコミットしたもののどちらが勝つ必要がありますか?
これらの理由から、生成された列が同じテーブル内の同じ行の列以外のものを参照できるようにすることは実用的または効率的ではありません。