SQL でテーブルの名前を変更するには、次のコマンドを使用します。
RENAME OldTableName TO NewTableName
これは内部でどのように機能しますか?
私の推測では、C でファイルを処理するときにファイルの名前を変更したときと同じように、最初に を使用して NewTableName でテーブルを作成しAS SELECT
、次に で古いテーブルを削除します。DROP
動作が異なります。データはコピーされません。テーブルの名前は、トリガーなどへの参照とともに、メタデータ テーブルで単純に更新されます。
ここから助けが得られるかもしれません:-
名前変更操作はアトミックに行われます。つまり、名前変更の実行中は、他のセッションはどのテーブルにもアクセスできません。たとえば、既存のテーブル old_table がある場合、同じ構造を持つが空の別のテーブル new_table を作成し、次のように既存のテーブルを空のテーブルに置き換えることができます (backup_table がまだ存在しない場合)。...............
RENAME を実行すると、ロックされたテーブルやアクティブなトランザクションを持つことはできません。また、元のテーブルに対する ALTER および DROP 権限と、新しいテーブルに対する CREATE および INSERT 権限も必要です。
複数のテーブルの名前変更でエラーが発生した場合、MySQL は名前が変更されたすべてのテーブルに対して逆の名前変更を行い、すべてを元の状態に戻します。