最近、テーブルの名前変更をサポートしていないデータベース プロバイダーのいくつかの制限に対処する必要がありました。そのため、テーブルを手動で複製する必要がありました。
私の SaaS プラットフォームのデータベースは Planetscale でホストされています。同社は、MySQL 互換のサーバーレス データベースを提供しています。サーバーレスの性質のおかげで、水平シャーディング、ノンブロッキングなスキーマ変更、その他多くの強力なデータベース機能を、苦労せずに利用できます。そして素晴らしい開発者エクスペリエンス。
別の観点から見ると、スキーマ変更に関する何らかの制約に対処する必要があります。これらの制限は、シャーディング環境での一貫性を保証するために必要です。
私が顧客になってから (ほぼ 2 年前)、外部キー制約のサポートなど、多くの進歩が見られました: https://planetscale.com/docs/concepts/foreign-key-constraints
Inspector は Laravel アプリケーションです。 Laravel の移行を使用すると、名前変更関数を使用してテーブルの名前を単純に変更できます:
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
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3