MySQLでテーブル名を変更する方法と注意すべき点

MySQLでテーブル名を変更する方法と注意すべき点

1. テーブル名を変更する方法

RENAME TABLE ステートメントまたは ALTER TABLE ステートメントを使用してテーブルの名前を変更できます。基本的な構文は次のとおりです。

# RENAME TABLE 構文:
テーブル名の変更
    tbl_name から new_tbl_name へ
    [、tbl_name2 から new_tbl_name2] ...

    # ALTER TABLE 構文:
テーブル old_table を変更して、新しいテーブルの名前を変更します。

# 具体例:
mysql> テーブルを表示します。
+------------------+
| テストデータベース内のテーブル |
+------------------+
|tb1|
|tb2|
+------------------+
セット内の 2 行 (0.00 秒)

mysql> テーブル tb1 の名前を new_tb1 に変更します。
クエリは正常、影響を受けた行は 0 行 (0.03 秒)

mysql> テーブル tb2 を変更し、 new_tb2 の名前を変更します。
クエリは正常、影響を受けた行は 0 行 (0.04 秒)

mysql> テーブルを表示します。
+------------------+
| テストデータベース内のテーブル |
+------------------+
| 新しい_tb1 |
| 新しい_tb2 |
+------------------+
セット内の 2 行 (0.00 秒)

当然のことながら、テーブル名の変更を実行する場合、古いテーブル (old_table_name) が存在し、新しいテーブル (new_table_name) が存在していてはなりません。新しいテーブル new_table_name が存在する場合、ステートメントは失敗します。

テーブル名の変更操作を実行するユーザーには、元のテーブルに対する ALTER 権限と DROP 権限、および新しいテーブルに対する CREATE 権限と INSERT 権限が必要です。 ALTER TABLE とは異なり、RENAME TABLE では 1 つのステートメントで複数のテーブルの名前を変更できます。

テーブル名をold_table1からnew_table1に変更します。
             old_table2 から new_table2 へ、
             old_table3 を new_table3 に;

複数のテーブルの名前を一度に変更する場合、名前変更操作は左から右に実行されます。したがって、2 つのテーブル名を交換するには、次のようにします (中間テーブル名が tmp_table であり、存在しないことを前提とします)。

テーブル old_table の名前を tmp_table に変更します。
             新しいテーブルを古いテーブルに、
             tmp_table を new_table にコピーします。

テーブルの名前を変更することで、テーブルをあるデータベースから別のデータベースに移動することもできます。構文は次のとおりです。

テーブル名を current_db.tbl_name から other_db.tbl_name に変更します。
ALTER TABLE current_db.tbl_name を変更して other_db.tbl_name を変更します。

# 1つのデータベース内のすべてのテーブルを別のデータベースに転送するためのSpliceSQL SELECT
 CONCAT( 'テーブル名 old_db.', TABLE_NAME, ' を new_db.', TABLE_NAME, ';' に変更します)
 から
 情報スキーマ.TABLES
 どこ
 TABLE_SCHEMA = 'old_db';

実際、MySQL ではデータベースの名前を変更する操作は提供されていません。名前の変更によってデータベースのすべてのテーブルを別のデータベースに転送することで、間接的にデータベースの名前を変更することはできますが、元のデータベースはそのまま残ります。

2. 注記

名前変更操作はアトミックに実行され、テーブルのメタデータ ロックを取得する必要があることに注意してください。したがって、RENAME TABLE を実行する前に、テーブルにアクティブなトランザクションがないこと、およびテーブルがロックされていないことを確認する必要があります。メタデータのみを変更すればよいため、大きなテーブルの名前変更も高速です。また、テーブルにトリガーがある場合は、名前を変更してテーブルを別のライブラリに転送することはできません。

実際、RENAME TABLE ステートメントと ALTER TABLE ステートメントにはいくつかの違いがあります。公式ドキュメントによると、主な違いはいくつかあります。

  • RENAME TABLE はビューに適用されますが、ビューの名前変更を別のデータベースに転送することはできません。また、ALTER TABLE ではビューの名前を変更できません。
  • ALTER TABLE は一時テーブル (TEMPORARY TABLE) の名前を変更できますが、RENAME TABLE は変更できません。
  • RENAME TABLE は 1 つのステートメントで複数のテーブルの名前を変更できますが、ALTER TABLE は 1 つのテーブルの名前のみを変更できます。

名前変更操作は迅速かつ効率的ですが、実際の運用シナリオではテーブルの名前変更を慎重に検討する必要があります。名前変更操作は問題ないかもしれませんが、オブジェクト間の後続の依存呼び出しで問題が発生する可能性があります。たとえば、テーブル tb1 の名前を new_tb1 に変更し、tb1 に依存するビューと関数がある場合、これらのビューと関数を適切なタイミングで変更しないと、これらのビューと関数を再度呼び出すと、tb1 が存在しないというエラー メッセージが表示されることがあります。これは、これらのビューと関数の定義で tb1 という名前がまだ使用されているためです。さらに、テーブルまたはビューの名前を変更した後は、ユーザー権限に注意してください。ユーザーにテーブルに対する権限が明示的に割り当てられている場合は、新しいテーブルに対する権限を再度付与する必要があります。テーブルに外部キーなどの制約がある場合は、名前変更操作を実行する際に特に注意して慎重に確認してください。

要約:

この記事では、テーブル名を変更する際の操作方法と注意事項を中心に紹介します。この記事の要点は、以下のとおりです。

RENAME TABLE ステートメントと ALTER TABLE ステートメントの両方を使用してテーブルの名前を変更できます。 2 つには若干の違いがあり、RENAME TABLE ステートメントの方が推奨されます。

名前変更操作にはメタデータ ロックの取得が必要です。操作を実行する前に、アクティブなトランザクションがないことを確認してください。

テーブルの名前を変更することで、テーブルをあるデータベースから別のデータベースに転送し、間接的にデータベースの名前を変更することができます。

実際の運用シナリオでは、特にビューと関数の依存関係がある場合、テーブルの名前変更は慎重に検討する必要があります。

名前変更操作が完了したら、ユーザー権限と関連する依存関係の問題を確認し、依存関係にあるテーブル名を新しいテーブル名に適時に変更します。

テーブルにトリガーや外部キーなどの制約がある場合は、名前を変更するときに特に注意してください。

名前変更操作は通常数秒で完了します。時間がかかりすぎる場合は、接続状態を確認してください。

上記は、MySQL のテーブル名変更に関する知識のまとめの詳細な内容です。MySQL のテーブル名変更の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQLデータベースの名前を高速かつ安全に変更する方法(3種類)
  • MySQL イベント変更イベント (ALTER EVENT)、イベントの無効化 (DISABLE)、イベントの有効化 (ENABLE)、イベント名の変更、およびデータベース イベントの移行操作の詳細な説明
  • MYSQLでプロシージャの名前を変更する方法の詳細な説明
  • MySQL で SQL ステートメントを使用してフィールドの名前を変更する
  • MySQL データベースの名前変更ステートメントの共有
  • Pythonを使用してMySqlデータベースを操作する方法を教えます
  • Pythonを使ってMySQLを操作する小さなツールを開発する
  • Python の基礎: MySQL データベースの操作
  • インターフェイス実装サンプルコード付き Python チャット ルーム (tkinter、Mysql、Treading、ソケット)
  • MySQLデータベースを操作するPythonの簡単な手順を共有する
  • Python SQL ステートメントを使用して、MySQL データベースで複数条件のあいまいクエリを実行するアイデアの詳細な説明
  • tkinter+MySQL を使用して Python で追加、削除、変更、チェックを実装する
  • Pythonを使用してMySQLデータベースの名前を素早く変更する

<<:  VMware esxi6.5 のインストールと使用の詳細な手順

>>:  光沢のある輝くウェブサイトデザインの感動的なデザイン例

推薦する

VSCode 構成 Git メソッドの手順

Git は vscode に統合されており、git コマンドをいくつか記述しなくても、クリックするだ...

MySQL の 4 つのトランザクション分離レベルの詳細な説明

この実験のテスト環境: Windows 10+cmd+MySQL5.6.36+InnoDB 1. ト...

フロントエンド JavaScript ハウスキーパー package.json

目次1. 必須属性1. 名前2. バージョン2. 説明情報1. 説明2. キーワード3. 著者4. ...

Vueはデジタル千単位区切り形式をグローバルに実装します

この記事の例では、Vue がデジタル 3 桁区切り形式をグローバルに実装するための具体的なコードを参...

MySQL パフォーマンス最適化インデックス プッシュダウン

インデックス条件プッシュダウン (ICP) は MySQL 5.6 で導入され、クエリを最適化するた...

XAML でボタンを円として再描画する方法

XAML レイアウトを使用する場合、インターフェイスを Metro 風にするために、一部のボタンでは...

17の広告効果測定の解釈

1. 広告の 85% は未読です<br />解釈: 成功する広告の 15% にどうやって...

inline-blockプロパティとの互換性

<br />1年前、インターネット上にはinline-blockプロパティに関する記事は...

Ubuntu20のtzselect設定時間失敗問題、Raspberry Piサーバ(推奨)

2 日前、Raspberry Pi サーバーを Ubuntu 20 にアップグレードしました。今日...

ウェブページを作成する際に注意すべき点

--ホームページのバックアップ1.txtテキスト2. 画像をスキャンする3. PSDデザイン原画(A...

MySQL テーブルの読み取り、書き込み、インデックス作成、その他の操作の SQL ステートメントの効率最適化の問題を分析します。

前回は、Explain 実行プランの表示、インデックスの分析など、MySQL での SQL クエリの...

Linux コマンド クエリ アプレットでの WePY クラウド開発の実践

みなさんこんにちは。今日は Linux コマンド クエリ アプレットでの WePY クラウド開発の実...

Mysql で自動増分主キー ID を更新するときに問題が発生しました

目次自動インクリメント ID を更新する理由は何ですか?質問解決方法これは私が知っている問題ですが、...

nestjs からフロントエンドに返されるデータ形式のカプセル化実装

通常、開発プロセスでは、インターフェイス要求の成功または失敗は httpcode に基づいて決定され...