序文データ テーブルにデータを挿入する場合、生徒の成績を空にできない、生徒の ID 番号を繰り返すことができないなど、挿入されるデータに特別な要件がある場合があります。このような場合に制約が役立ちます。 制約タイプは、テーブルの行または列内のデータを制限することで、テーブル データの整合性と一意性を保証します。この章では、主に 6 つの一般的な MySQL 制約タイプを紹介します。 1. NULLではない
2 つのデータ テーブル、student テーブルと student_copy テーブルを定義します。student テーブルは関連する制約を設定し、student_copy テーブルは制約を設定せずに比較テーブルとして使用され、2 つの違いを観察します。 学生テーブルでは、id は null ではないと定義されているため、id 行では NULL = NO となり、この行のデータは NULL にできないことを意味します。そうでない場合、挿入は失敗します。 student_copy テーブルには制約がないため、どのフィールドでも NULL = YES となり、ユーザーはエラーなしで自由に null 値を挿入できます。
NULL を指定する方法は、明示的と暗黙的の 2 つがあります。 明示的とは、挿入時に列を NULL に設定することを意味し、暗黙的とは、挿入時に列に値を割り当てず、この列にデフォルト値が指定されていないことを意味します。システムのデフォルトは NULL であるため、これらすべての状況で挿入制御エラーが発生します。 2. ユニーク
次の 2 つの図は、student テーブルと student_copy テーブルに対する操作を示しています。student テーブルの id 列には一意制約が設定されているため、同じ id = 1 を挿入すると重複した操作が表示されます。 student_copy テーブルには制約がないため、ユーザーはエラーが発生することなく任意の値を挿入できます。
実は、この問題は現在解決されています。id = NULL が学生テーブルに挿入されても、システムはエラーを報告しません。 Unique は、保存された値が一意であることのみを保証します。null 値にすることもできますが、null 値も一意である必要があります。NULL を挿入するとエラーが発生します。 3. デフォルト
学生テーブルで名前フィールドを指定し、デフォルトの制約を設定すると、デフォルトの列に名前が設定されます。データを挿入するときに、名前列が指定されていない場合、名前列は、設定したデフォルト値 = 'Unnamed' に従って入力されます。 student_copy テーブルにはデフォルトの制約セットがないため、データが挿入されると、指定されていない列にはシステムのデフォルト値である NULL が入力されます。 4. 主キー
最初のいくつかの制約タイプは複数の列に同時に設定できますが、主キーはテーブル内の 1 つの列のみを制約できます。主キー制約を使用する列は主キーと呼ばれます。 挿入されたデータが重複すると、次のデータの挿入は失敗し、挿入されたデータは NULL にできません。 テーブルでは主キーとして 1 つの列のみを持つことができ、同時に複数の列を主キーとして持つことはできません。テーブルを設計する場合、通常は主キーを設定するのが最適です。一般的な主キーは数値形式です。 自動増分主キー実際の開発では、主キーが重複しないようにするための一連の戦略がよくあります。最も一般的な方法は、自動増分主キーを設定することです。システムが自動的にデータを割り当てることができ、同時にユーザーが手動で介入することもできます。MySQLには自動増分主キー機能が組み込まれているため、使い方は非常に簡単です。 下の図では、 id 列が自動増分主キーになるため、ユーザーはデータを挿入するときに手動で介入する必要がありません。
Id フィールドは自動増分主キーとして設定されていることがわかります。 Zhang San の id = null は、自動増分主キーが順序に従っているため、その id = 1 です。Li Si の id = 1 は、主キーを繰り返すことができず、Li Si の id は Zhang San の id と同じであるため、挿入は失敗します。Li Si のデータを挿入し続けます。今回は id = 4 に設定し、元のデータと重複がないため、挿入は成功します。Wang Wu の id = null は、自動増分主キーに従って、前の順序に従って下がり続けるため、その id = 5 です。 それでは結果を見てみましょう: 5. 外部キー
これを理解するために例を見てみましょう。ここで 2 つのテーブルを作成し、それらを関連付けたいとします。どのようにすればよいでしょうか? まず、この対応について考えてみましょう。1 人の生徒は 1 つのクラスに対応し、1 つのクラスは複数の生徒に対応します。生徒テーブルでは id が主キーなので、生徒の class_id を外部キーとして設定し、クラステーブルと関連付けることができます。 クラステーブルクラスを作成し、classesIdを主キーとして設定します。 テーブルクラスを作成する( id int 主キー auto_increment, 名前varchar(20) ); 学生テーブルstudentを作成し、idを主キーとして設定します。 学生テーブルを作成 ( id int 主キー auto_increment, 名前varchar(20), クラスID int, 外部キー (class_id) はクラス (id) を参照します。 ); MUL は外部キー制約を示します。
学生テーブルに挿入されたクラス ID はクラス テーブルに存在する必要があります。 クラステーブルは空です。このとき、学生テーブルのデータを挿入し、class_id = 1 を指定しますが、クラステーブル内のクラス番号は空であるため、挿入は失敗します。学生テーブルで指定されている外部キー制約は、クラステーブルの主キーである必要があります。外部キー制約が確立された後、クラステーブル内のクラス ID を自由に変更または削除できなくなります。 学生テーブルの Zhang San はクラス テーブルの id = 1 の結果に依存しているため、クラス テーブルの id = 1 のレコードを id = 20 に変更することはできません。
次のように製品と注文に関連する2つのテーブルがあるとします。 この時点で、注文テーブルの製品 ID と製品テーブルの製品 ID を使用して外部キー制約を確立できます。ただし、注文テーブルに製品 ID が 1 のレコードがある場合、製品テーブルの id = 1 のレコードは削除できません。すると、このデータは永続的に保存されますが、製品は永続的に存在しない可能性があり、棚から削除される可能性があります。これは、外部キーを使用して特定のテーブルを関連付ける場合に発生する矛盾です。 外部キー制約の検証機能が必要で、現在の矛盾も解決したい場合は、論理削除を実行できます。製品に別の列を追加してデータが有効かどうかをマークし、レコードが有効であることを示すために flag = 1 を設定し、レコードが無効であることを示すために flag = 0 を設定します。削除する製品については、そのフラグを直接 0 に変更できます。論理的には、製品は削除されていますが、実際にはデータはテーブルにまだ保存されており、実際の物理的な削除ではありません。 6. チェック
要約するこれで、MySQL の 6 つの一般的な制約タイプに関するこの記事は終了です。一般的な MySQL 制約タイプの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: 変換を使用して純粋な CSS ポップアップ メニューを実装するためのサンプル コード
目次序文指導の基本フック機能フック関数のパラメータ文章使い方とアイデア成し遂げる汎用性を高める要約す...
自動ビルドとは、Docker Hub を使用して、Dockerfile ファイルを含む GitHub...
Linux/Mac の MySQL パスワードを忘れた場合はどうすればいいですか?心配しないでくださ...
この記事では、参考までにMySQL zipファイルをインストールする具体的な方法を紹介します。具体的...
ELKとは何ですか? ELK は、Elastic が提供するログ収集およびフロントエンド表示ソリュー...
Docker コンテナが終了しても、デバッグを容易にし、ユーザー データを保持するために、デフォルト...
前の章では、1 つのテーブルからデータを読み取る方法を学習しました。これは比較的簡単ですが、実際のア...
目次1 はじめに2 前提条件2.1 データ型2.2 それが自身のプロパティであるかどうかを判断する ...
1. グローバルオブジェクトすべてのモジュールは呼び出すことができます1) global: ブラウザ...
1. 問題の紹介ユーザー テーブルに 3 つのフィールドが含まれているシナリオを想定します。 id、...
目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...
ラムダ式ラムダ式 (クロージャとも呼ばれる) は、Java 8 のリリースを推進した最も重要な新機能...
私は、WinForm と HTML5 を組み合わせた小さなものを作りたいだけなのですが、突然、そこに...
日常業務では、次のようなレイアウトに遭遇することがあります。親要素のフレーム (ブラウザのサイズに応...
効果効果図は以下のとおりです実装のアイデアDivは太陽の長方形の光と影を実現します前の疑似要素は、既...