ホームページ >データベース >mysql チュートリアル >テーブルをロックしたり同時更新を中断したりせずに、MySQL の「ALTER TABLE」オペレーションを実行するにはどうすればよいですか?

テーブルをロックしたり同時更新を中断したりせずに、MySQL の「ALTER TABLE」オペレーションを実行するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-17 09:22:25317ブラウズ

How Can I Perform a MySQL `ALTER TABLE` Operation Without Locking the Table and Disrupting Concurrent Updates?

テーブルをロックしない ALTER TABLE

MySQL で ALTER TABLE 操作を実行すると、テーブルは、ステートメントを使用すると、同時書き込みがブロックされる可能性があります。この操作を大きなテーブルに対して実行すると、INSERT または UPDATE ステートメントが長期間中断される可能性があります。進行中の更新に影響を与えずに「ホット変更」を実行する解決策はありますか?

唯一の代替案: 手動操作

MySQL にはホット変更の直接サポートがありませんが、多くの RDBMS システムが自動的に実行する機能を手動で複製する代替手段が存在します。これには以下が含まれます:

  1. 新しいテーブルの作成: 目的の列構造を持つ空のテーブルを作成します。
  2. データのコピー:元のテーブルに対する同時操作を監視しながら、古いテーブルから新しいテーブルにデータを段階的に転送します。 table.
  3. テーブルの名前変更: データ移行が完了したら、理想的にはトランザクション内で、ソース テーブルと新しいテーブルの名前を変更します。
  4. オブジェクトの再コンパイル: 構造的な問題により実行計画を調整する必要があるため、テーブルを参照するストアド プロシージャまたはその他のオブジェクトを更新します。

技術的考慮事項:

新しいフィールドを追加すると、テーブル内のすべての行が効果的に変更されます。このプロセスでは、より大きな影響を与える大規模な UPDATE 操作と同様に、ディスク上のデータを物理的に再構築する必要があります。フィールド レベルのロックは行レベルのロックよりも複雑で、テーブル全体のロックが常に望ましいとは限りません。

その他の RDBMS ソリューション:

MySQL はそうでない場合がありますが、ホット変更をネイティブにサポートする場合、他の RDBMS システムがそのような機能を提供する場合があります。たとえば、PostgreSQL ではパーティション分割されたテーブルが可能で、他のパーティションに影響を与えることなく個別に変更できます。

以上がテーブルをロックしたり同時更新を中断したりせずに、MySQL の「ALTER TABLE」オペレーションを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。