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 のインストールと使用の詳細な手順

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

推薦する

React Hooks の一般的な使用シナリオ (概要)

目次1. ステートフック1. 基本的な使い方2. 更新3. 合併を実現する4. 遅延初期化状態5. ...

Alibaba Cloud に Docker をインストールする際の問題と解決策

質問Alibaba Cloud イメージを使用して Docker をインストールすると、次の図に示す...

Dockerコンテナのセルフスタートを実装する方法

コンテナの自動起動Docker は、コンテナが終了したとき、または Docker が再起動されたとき...

Oracle と MySQL の高可用性ソリューションの比較分析

Oracle と MySQL の高可用性ソリューションについては、以前からまとめたいと思っていたので...

Nginx サーバーで URL リンクを設定する方法

LNMPのようなアーキテクチャを持つウェブサイトは、一般的にPHPフレームワークに基づいて開発されて...

Nginx のパラメータをオンにして Web パフォーマンスを 3 倍向上させる方法

1. 遭遇したいくつかの問題2008 年にパフォーマンス テストを行っていたとき、パフォーマンス テ...

スーパーバイザーウォッチドッグの使い方を3分で学ぶ

ソフトウェアとハ​​ードウェア環境centos7.6.1810 64ビット cat /etc/red...

Web デザイン体験: 5 つの優れた Web デザイン コンセプトの完全分析 (画像)

他の種類のデザインとは異なり、Web デザインは時代の発展とともに常に変化しています。したがって、W...

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...

MySQL エラー 1290 (HY000) の解決方法

私は長い間問題に取り組み、文法上の問題を何度も確認しました。しかし、後でネットで調べてみたら、突然理...

VueはTodoListの例をカプセル化し、ブラウザのローカルキャッシュのアプリケーションを実装します。

この記事では主に、Vue で TodoList をカプセル化するケースと、ブラウザのローカル キャッ...

HTML テーブル タグ チュートリアル (31): セルの幅と高さの属性 WIDTH、HEIGHT

デフォルトでは、セルの幅と高さはコンテンツに応じて自動的に調整されますが、セルの幅と高さを手動で設定...

支払いカウントダウンを実現し、ホームページに戻るためのjs

ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...

Mysql テーブル、列、データベースの追加、削除、変更、クエリの問題の概要

以下は私がまとめた基本的なSQL知識です。主に参考資料として、また将来の他の初心者の助けとして、私自...