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

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

推薦する

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...

JavaScript マクロタスクとマイクロタスクの実行順序についての簡単な説明

目次1. JavaScriptはシングルスレッドです1. 同期タスク2. 非同期タスク2. タスクキ...

MySQL の union と union all の簡単な分析

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

Vue3サンドボックスの仕組みの詳しい説明

目次序文ブラウザコンパイル版ローカルプリコンパイルバージョン要約する参照する序文vue3サンドボック...

<td></td> タグの境界線スタイルがブラウザに表示されない問題の解決方法

質問: 360ブラウザの互換モードなど、一部のブラウザでは、 <td style="...

数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する

MySQL のデータ量が多い場合、制限ページングが使用されます。ページ数が増えると、クエリの効率が低...

Vue3 における ref と reactive の詳細な説明と拡張

目次1. 参照と反応1. 反応的2.参照2. shallowRef と shallowReactiv...

INS と DEL を使用してドキュメントの変更をマークする方法の詳細な説明

ins と del は、HTML 4.0 で導入され、文書の作成時に作成者が共同作業できるようにし、...

ウェブサイトデザインの基礎知識:初心者の方はぜひお読みください

今では多くの人がウェブサイト作成に参加していますが、ウェブサイトはどのように作成すればよいのでしょう...

MySQLでSQL文がどのように実行されるかの詳細な説明

概要最近MySQL関連の知識を勉強し始めました。学んだ知識ポイントと自分の理解を元に整理して共有しま...

mysqlとnavicat間の接続を確立する際の1251エラーを解決する

コンピュータを再インストールし、最新バージョンのMySQLデータベースをインストールしました。その結...

nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法

最近、個人のウェブサイトを書き直しました。Alibaba Cloudで新しいサーバーを購入しました。...

Debian ベースの Linux システム ソフトウェア インストール コマンドの詳細な説明 (推奨)

Debian の紹介Debian は、広い意味では、フリーなオペレーティング システムの作成に専念...

タブ効果を実現する js 開発プラグイン

この記事の例では、タブ効果を実現するためのjsプラグインの具体的なコードを参考までに共有しています。...

CSS最適化スキルの自己実践体験

1. CSS スプライトを使用します。利点は、CSS で使用される小さな画像を 1 つの大きな画像に...