最近、テーブルの名前変更をサポートしていないデータベース プロバイダーのいくつかの制限に対処する必要がありました。そのため、テーブルを手動で複製する必要がありました。
私の SaaS プラットフォームのデータベースは Planetscale でホストされています。同社は、MySQL 互換のサーバーレス データベースを提供しています。サーバーレスの性質のおかげで、水平シャーディング、ノンブロッキングなスキーマ変更、その他多くの強力なデータベース機能を、苦労せずに利用できます。そして素晴らしい開発者エクスペリエンス。
別の観点から見ると、スキーマ変更に関する何らかの制約に対処する必要があります。これらの制限は、シャード環境での一貫性を保証するために必要です。
私が顧客になってから (ほぼ 2 年前)、外部キー制約のサポートなど、多くの進歩が見られました: https://planetscale.com/docs/concepts/foreign-key-constraints
Inspector は Laravel アプリケーションです。 Laravel の移行を使用すると、rename 関数を使用してテーブルの名前を簡単に変更できます。
Schema::rename('from', 'to');
Planetscale はテーブル名の変更をネイティブにサポートしていません。そのため、このタスクを達成するための回避策を見つける必要がありました。
正直に言うと、テーブルの名前を変更する操作は非常にまれです。私の場合、それは「プロジェクト」エンティティと「アプリケーション」エンティティの間で名前が重複していることが原因でした。プロジェクトの名前を変更する必要がありました ->アプリケーション。
MySQL でテーブルを複製するには 2 つの方法があります。
CREATE TABLE … LIKE:
を使用すると、データなしでテーブル構造 (列、キー、インデックスなど) のみを複製できます。
CREATE TABLE applications LIKE projects;
結果として、元のプロジェクト テーブルとまったく同じ構造を持つアプリケーション テーブルが作成されますが、データはありません。
データをインポートするには、INSERT INTO … SELECT:
として 2 番目のステートメントを実行します。
INSERT INTO applications SELECT * FROM projects;
このステートメントを大きなテーブルで実行すると、多くの時間とサーバー リソースが必要になる可能性があるため、注意してください。
2 番目のオプションは、列定義のみを複製し、CREATE TABLE … AS SELECT:
を使用して 1 つのステートメントでデータをインポートすることです。
CREATE TABLE applications AS SELECT * FROM projects;
新しいアプリケーション テーブルは、プロジェクト テーブルから基本的な列定義のみを継承します。外部キー制約、インデックス、auto_increment 定義は複製されません。
このオプションは、テーブル名に関連するインデックスとキーの名前がある場合に便利です。テーブルの名前を変更するには、制約の名前を置き換える必要があります。まったくインポートせず、最初からやり直すほうがよいでしょう。
データベースは、どの段階においても開発者にとって常にホットなトピックです。他の技術リソースはブログで見つけることができます。このトピックに関する最も人気のある記事は次のとおりです:
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。composer パッケージ をインストールするだけで準備完了です。
他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。
効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
以上がMySQL テーブルを複製する方法 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。