SQLにプライマリキーと外国のキーを実装します
主キーは、テーブル内の各行レコードを一意に識別する列または列の組み合わせです。それはユニークで空ではないに違いありません。各テーブルには1つの主キーのみがあります。たとえば、ユーザー\ _IDは、ユーザーテーブルの主要なキーとしてよく使用されます。プライマリキーの定義テーブルを作成するときに、単一または複合列を指定できます。外部キーは、テーブル間の関連付けを確立し、別のテーブルプライマリキーを指すために使用され、ユーザーテーブルユーザーを指す注文テーブルユーザーなどの参照の整合性を確保します。外部キーを設定すると、違法なデータ挿入が防止され、カスケード操作がサポートされます。外部キーを使用するには、データベースエンジンサポート(INNODBなど)が必要です。ビジネス分野を避けるために、整数またはUUIDの増分から主要なキーを選択することをお勧めします。外部のキーフィールドは、クエリパフォーマンスを改善するためにインデックス付けする必要があります。パフォーマンス要件が非常に高い場合、アプリケーション層制御の一貫性、または非関連データベースを使用する場合、外部キーは回避できます。
SQLでの一次キーと外部キーの正しい使用は、リレーショナルデータベース構造を構築するための基礎です。これにより、データの整合性が保証されるだけでなく、明確なデータ相関を確立するのにも役立ちます。

主キーとは何ですか?
主キーは、テーブル内の各行レコードを一意に識別するために使用される列または列のグループです。いくつかの重要な機能があります:
- 値は一意でなければなりません
- ヌルにすることはできません
- 各テーブルには1つの主キーのみがあります(ただし、複数の列を含めることができます)
たとえば、 user_id
は通常、ユーザーテーブルの主キーとして使用されます。これは、各ユーザーのIDが一意であり、繰り返されたり空になったりしないためです。

主キーを定義する方法は、テーブルを作成するときに直接指定できます。
テーブルユーザーを作成します( user_id intプライマリキー、 名前varchar(100) );
複数の列の組み合わせを使用して、複合プライマリキーを設定することもできます。

テーブルorder_itemsを作成する( order_id int、 Product_id int、 数量int、 主キー(order_id、product_id) );
外国の鍵の役割は何ですか?
外部キーを使用して、2つのテーブル間の接続を確立し、別のテーブルの主要なキーを指します。外部のキーの制約により、違法なデータの挿入を防ぎ、完全な参照を確保します。
たとえば、注文テーブルのuser_id
フィールドは、外部キーとして設定し、ユーザーテーブルのuser_id
を指すことができます。
テーブル注文を作成します( Order_id intプライマリキー、 user_id int、 総小数(10,2)、 外部キー(user_id)参照ユーザー(user_id) );
これを行うことの利点は次のとおりです。
- 無効な
user_id
挿入は拒否されます - ユーザーが削除されている場合、関連する注文を自動的に処理できます(削除またはnullの削除が必要です)
- データ間のロジックはより明確であり、クエリの効率が高くなっています
ただし、デフォルトでは、一部のデータベースシステム(MySQLのMyISAMエンジンなど)は外部キーをサポートしておらず、INNODBを使用する必要があることに注意してください。
一次および外国の鍵のFAQと提案
主キーは増分またはビジネス分野から選択されていますか?
- 自己挿入整数(
INT AUTO_INCREMENT
など)が最も一般的に使用され、シンプルで安定しています - 特に競合を回避するために、特に分散システムでもUUIDが使用されることがあります
- ユーザー名、電子メールなどの主要なキーとして可変ビジネスフィールドを使用しないようにしてください。
外部キーフィールドにインデックスを付けたいですか?
- はい、外部キーフィールドに手動でインデックスすることが最善です。そうしないと、接続クエリのパフォーマンスに影響します。
- ほとんどのデータベースは自動的にインデックスを作成しますが、すべてではありません
外国の鍵はいつ必要ですか?
- システムは非常に高いパフォーマンス要件を持ち、アプリケーションレイヤーを介してデータの一貫性を制御できます
- テーブル構造は頻繁に変化し、外国の鍵を維持するコストが高くなります
- 非関係データベース(MongoDBなど)を使用する場合
基本的にそれだけです。プライマリキーと外国の鍵の設定は簡単に思えますが、実際の開発では詳細は簡単に見落とされ、その後のメンテナンスが困難になります。ビジネスのニーズに応じて合理的に選択して使用する限り、データベース構造はより堅牢で、より効率的にクエリすることができます。
以上がSQLにプライマリキーと外国のキーを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

対応するデータベースドライバーをインストールします。 2。CONNECT()を使用してデータベースに接続します。 3.カーソルオブジェクトを作成します。 4。Execute()またはexecuteMany()を使用してSQLを実行し、パラメーター化されたクエリを使用して噴射を防ぎます。 5。Fetchall()などを使用して結果を得る。 6。COMMING()は、変更後に必要です。 7.最後に、接続を閉じるか、コンテキストマネージャーを使用して自動的に処理します。完全なプロセスにより、SQL操作が安全で効率的であることが保証されます。

2つの日付の違いを計算するには、データベースタイプに従って対応する関数を選択する必要があります。1。datediff()を使用してMySQLの日差を計算するか、TimestampDiff()の時間と分などのユニットを指定します。 2。SQLServerでdatediff(date_part、start_date、end_date)を使用し、ユニットを指定します。 3. PostgreSQLの直接減算を使用して日差を取得するか、抽出物(Dayfromage(...))を使用してより正確な間隔を取得します。 4。Julianday()関数を使用して、SQLiteの日差を差し引く。日付の注文に常に注意を払ってください

ほとんどのアプリケーションがもっと読み、書き留めておくと、レプリカを読む必要があり、マスターライブラリはボトルネックになりやすいためです。一般的な設定には、MySQLのマスタースレーブレプリケーション、PostgreSQLのストリームレプリケーション、SQLServerのAlwayson Group、RDSのReadReplicaインスタンスが含まれます。読み取りリクエストはアプリケーションレイヤーを介して審査でき、ミドルウェアまたはORMフレームワークはレプリカにルーティングされます。見落とされやすい問題には、複製の遅延、不適切な接続プールの構成、健康チェックの欠落、および不十分な許可管理が含まれます。

SQLでのOrderbyのパフォーマンスを最適化するには、最初にその実行メカニズムを理解し、インデックスとクエリ構造を合理的に使用する必要があります。ソートフィールドにインデックスがない場合、データベースは「Filesort」をトリガーし、多くのリソースを消費します。したがって、大きなテーブルの直接の並べ替えは避け、ソートされたデータの量を条件を通じて削減する必要があります。第二に、フィールドをソートするための一致するインデックスを確立することで、MySQL 8.0で逆方向のインデックスを作成して効率を向上させるなど、クエリを大幅に高速化できます。さらに、インデックスベースのカーソルページング(場所> 12345など)でディープページング(Limit1000、10など)を使用して、無効なスキャンをスキップする必要があります。最後に、キャッシュ、非同期集約、その他の手段を組み合わせることで、大規模なデータセットシナリオでソートパフォーマンスをさらに最適化することもできます。

SQLを使用してブロックチェーン構造を表現し、その特性を実現するには、チェーンテーブル構造を設計し、トリガーを使用して改ざんを防ぎ、ハッシュチェーンの完全性を定期的に検証し、再帰クエリやその他の方法を使用することにより、データを効率的に取得できます。特定の手順には以下が含まれます。1。以前の_hash、ハッシュ、およびデータフィールドを含むテーブルを作成して、ブロックリンク構造をシミュレートします。 2。トリガーを使用して、更新操作を防ぎ、データを改ざんできないことを確認します。 3.ブロックハッシュチェーンが完了しているかどうかを定期的に確認します。 4.再帰クエリを使用して、特定のブロックとその後のチェーンを取得します。 5.フルテキストインデックスを追加して、データ検索効率を改善します。 6.シャード、ホットとコールドの分離、非同期検証など、パフォーマンスとスケーラビリティを最適化します。これらの方法により、ブロックチェーンの重要な機能は、従来のデータベースに効果的に統合できます。

キューブは、分析に適したすべての寸法の組み合わせの集約を生成するために使用されます。ロールアップは、階層的な関係を持つデータに適した階層レベルで徐々に要約されています。キューブは、地域、製品、四半期に応じて合計8つの組み合わせを生成し、ロールアップは年、月、日、その他のレベルの概要を生成します。キューブは、すべての次元の結果を表示するのに適しています。ロールアップは階層を表示するのに適しています。 Cubeは結果セットを爆発させる可能性があり、ロールアップはフィールドの順序に依存する可能性があることに注意してください。概要行はグループ()関数を介して識別でき、合計行はCoalesceで名前が付けられて読みやすくなります。

SQLの集約関数は、複数行のデータから単一の概要値を計算するために使用されます。一般的な関数には、sum()summing、avg()平均値、count()count、max()最大値、min()最小値が含まれます。これらの関数は、グループ化されたデータをカウントするためにGroupByと組み合わせて使用されることがよくあります。たとえば、sum(units_sold)を使用すると、販売量の総量を取得でき、GroupByProduct_idを製品ごとにカウントできます。 count()はすべてのレコードをカウントでき、count(sale_date)は空の値を無視します。使用する場合の注意:count()を除き、null値は通常無視されます。複数の関数の混合使用は、予期しない結果を生成する可能性があります。 HAVIは、グループ化されたデータをフィルタリングするために使用する必要があります

grantandRevokestateMentionTheUseDAMERAGEUSERSINSIONSIONSQL.1.GRANTPROVIDESPRIVIDESLIGESLIESSLIESELECT、挿入、更新、削除、削除、変更、実行、実行、実行、実行、2.SYNTAXFORNANTINGISISGRANTPRIVILEGE_TPEONOBJECT_NAMETOUSOOSER_OR_OR_OR_REX
