【⑪MySQL | 制約(1)】コンセプト | 非null | 一意 | 主キー | 自己成長制約

序文

✨Xiao KMySQL コラムへようこそ。このセクションでは、MySQL 制約 | 非 null 制約 | 一意制約 | 主キー制約 | 自己成長制約の共有 の概念について説明します


1. 制約の概念

1.1 制約が必要な理由

作成されたテーブルでは、フィールドのデータ型によって格納できるデータの種類が決まりますが、テーブルに格納されたデータの正当性はチェックされません。MySQL ソフトウェアを使用する場合、テーブル内のデータに対して整合性チェック操作を実行したい場合は、テーブルの制約を通じて実行できます。

データの完全性 ( ) は、データのData Intergrity精度 ( Accuracy) と信頼性 ( ) を指します。Reliabilityデータベース内に意味要件を満たさないデータが存在することを防止し、エラー情報の入出力による不正操作やエラー情報を防止することが提案されている。

データの整合性を確保するために、SQL 仕様では、主に次の 4 つの側面から、制約のある方法でテーブル データに追加の条件制限を課しています。

  • エンティティの整合性 (エンティティの整合性): 同じテーブル内に、同一で区別できない 2 つのレコードが存在することはできません。
  • ドメイン整合性 (ドメイン整合性) など: 年齢範囲 0 ~ 120、性別範囲「男性/女性」
  • 参照整合性 (参照整合性): たとえば、従業員の部門が部門テーブルに存在する必要があります。
  • ユーザー定義の整合性 (ユーザー定義の整合性): 一意のユーザー名、パスワードを空にすることはできないなど。

1.2 制約とは

制約はテーブルレベルの強制です。

制約はテーブルの作成時に (「CREATE TABLE 语句),或者在表创建之后通过ALTER TABLE」ステートメントを使用して) 指定できます。

1.3 制約の分類

1.3.1 制約に従ったフィールドの分類

  • 単一列制約
  • 複数列の制約

1.3.2 制約の範囲による分類

  • 列レベルの制約
  • テーブルレベルの制約

違い

① 位置が異なります。列レベルの制約は列の後に記述され、制約がマークされている場合はすべてのフィールドの最後に記述されます。

② サポートされている制約タイプが異なります。列レベルの制約はすべての制約タイプをサポートできますが、テーブル レベルの制約は非 null とデフォルトをサポートできません。

③列レベルの制約には制約名を付けることはできませんが、テーブル制約には制約名を付けることができます(主キーを除き、PRIMARY KEYを使用します)。

1.3.3 制約の役割による分類

整合性制約キーワード 説明する
NULLではありません(NK) 制約フィールドの値を空にすることはできません
デフォルト フィールドのデフォルト値を設定する
ユニークキー(英国) 制約フィールドの値は一意です (同じ値を同じ列に出現させることはできません)
プライマリキー(PK) 制約フィールドはテーブルの主キーであり、テーブル レコードの一意の識別子として使用できます。
自動増加 制約フィールドの値は自動的に増加します
外部キー(FK) 制約されたフィールドはテーブルの外部キーです
チェック()
  • テーブル上の既存の制約を表示する

    SELECT  * FROM information_schema.TABLE_CONSTRAINTS
    WHERE table_name='emp';
    

2. 非NULL制約(NK)

2.1 コンセプト

データベース テーブルのフィールドの内容を NULL に設定したくない場合は、NK 制約を使用して NULL を設定できます。つまり、NK 制約は、データベース テーブルの作成時に特定のフィールドに「NOT NULL」制約条件を追加して、そのフィールドがすべてのレコードに値を持つことを保証します。ユーザーが挿入したレコードのフィールドが空の場合、データベース管理システムはエラーを報告します。

2.2 特徴

  • デフォルトでは、すべての型の値を NULL にすることができます
  • テーブルには、非 null 制約を指定する多くのフィールドを含めることができます
  • 空の文字列 " " は NULL と等しくなく、0 は NULL と等しくなく、NULL は NULL と等しくない

2.3 非NULL制約の追加

  1. テーブルを作成するとき
CREATE TABLE table_name(
	字段名 数据类型 NOT NULL,
    ...
);
CREATE TABLE IF NOT EXISTS student
(
	id INT NOT NULL,
	name VARCHAR(10) NOT NULL,
	score DECIMAL(4,1)
)
DESC student;

ここに画像の説明を挿入

ヒント 1 : ここで次のステートメントを実行すると、エラーが報告されます (フィールド 'name' にはデフォルト値がありません)
。これは、デフォルト値がでありNULL、フィールドを空にできないと指定しているためです。

INSERT INTO student(id,score) VALUES(3,79.5);

  1. 作成後に追加
ALTER TABLE <表名> MODIFY 字段名 数据类型 约束;

ヒント 2score : ここで次のステートメントを実行すると、フィールドに既にNULL 値が存在するため、エラー (NULL 値の無効な使用) が報告されます。

ALTER TABLE student MODIFY score DECIMAL(4,1) NOT NULL;

2.4 非null制約の削除

ALTER TABLE 表名 MODIFY 字段名 数据类型 NULL;
#或
ALTER TABLE 表名 MODIFY 字段名 数据类型;

3. 独自の制約 (イギリス)

3.1 コンセプト

データベース テーブル内の特定のフィールドの内容の繰り返しが許可されない場合は、UK 制約を使用して設定できます。つまり、UK 制約は、データベース テーブルの作成時に特定のフィールドに「UNIQUE」制約を追加し、すべてのレコードのこのフィールドの値が重複しないようにします。ユーザーが挿入したレコードのフィールドの値が他のレコードのフィールドの値と同じである場合、データベース管理システムはエラーを報告します。

3.2 特徴

  • 同じテーブルに複数の一意制約を設定できる
  • 一意制約では値 NULL が許可されます
  • 一意制約を作成するときに、一意制約に名前を付けないと、制約名はフィールド名と同じになります。

3.3 固有制約の追加

  1. テーブル作成時に追加する
CREATE TABLE table_name(
	字段名 数据类型 UNIQUE KEY,
    ...
);
  1. テーブルを作成した後、追加します
  • 方法 1
ALTER TABLE <表名> MODIFY 字段名 数据类型 UNIQUE;
  • 方法 2
ALTER TABLE <表名> ADD [CONSTRAINT 约束名] UNIQUE [KEY](字段名);

3.4 ユニーク制約の削除

  • 一意制約が追加された列には一意インデックスが自動的に作成されます。
  • 一意制約の削除は、一意インデックスを削除することによってのみ削除できます。
  • 削除する場合は、一意制約名と同じ一意のインデックス名を指定する必要があります。
  • 一意制約の作成時に名前が指定されていない場合、単一列の場合はデフォルトで列名と同じになり、結合列の場合はデフォルトで () 内の最初の列名と同じになります。
ALTER TABLE <表名> DROP INDEX <索引名>;

4. 主キー制約 (PK)

4.1 コンセプト

データベース テーブル内のフィールドを使用してすべてのレコードを一意に識別する場合は、PK 制約を使用して設定できます。つまり、PK 制約は、データベース テーブルの作成時に一部のフィールドに「PRIMARY KEY」制約を追加し、このフィールドはすべてのレコードを一意にマークできます。

データベース テーブルに主キーが設定される理由は、データベース管理システムがテーブル内のレコードを迅速に検索できるようにするためです。主キー制約を具体的に設定する場合は、主キー フィールドの値が一意で空ではないことを満足する必要があります。主キーは単一フィールドまたは複数フィールドにすることができるため、単一フィールドの主キーと複数フィールドの主キーに分けられます。

4.2 特徴

  • 主キー制約は、一意制約 + 非 null 制約と同等です。つまり、重複値と NULL 値は許可されません。

  • 主キー制約は、テーブル内の 1 つ以上の列 (複合主キー) に対応します。

  • 複数の列で構成される複合主キー制約の場合、これらの列は NULL 値にすることができず、結合された値の重複は許可されません

  • MySQL の主キー名は常に PRIMARY です。主キー制約名を自分で指定しても役に立ちません。

  • 主キー制約を作成するとき、システムはデフォルトで列または組み合わせに対応する主キー インデックスを作成します (主キーに基づいてクエリできる場合は、主キーに基づいてクエリできるため、より効率的です)。主キー制約が削除されると、主キー制約に対応するインデックスも自動的に削除されます。

  • 注意すべき点は、主キー フィールドの値を変更しないことです。主キーはデータ レコードの一意の識別子であるため、主キーの値が変更されると、データの整合性が失われる可能性があります。

4.3 単一フィールドの主キー

  • テーブル作成時に主キー制約を指定する
CREATE TABLE table_name(
	字段名 数据类型  PRIMARY KEY,
    ...
);

ヒント: ここで次のステートメントを実行すると、エラーが報告されます (複数の主キーが定義されている)

CREATE TABLE IF NOT EXISTS test2
(
	empno INT PRIMARY KEY,   # 列级约束
	ename VARCHAR(10) PRIMARY KEY,
	sal DECIMAL(7,1)
)

許可されるのは 1 つだけです!

  • ALTER TABLE は主キー制約を追加します
ALTER TABLE <表名> ADD PRIMARY KEY(字段名);

4.4 複数フィールド主キー(複合主キー)

主キーが複数のフィールドで構成されている場合、CONSTRAINTSQL ステートメントを通じて実装する必要があり、構文は次のとおりです。

CREATE TABLE table_name(
	字段名 数据类型,
    ...
    [CONSTRAINT 约束名] PRIMARY KEY(字段1,字段2...)
);

上記のステートメントでは、フィールドの定義後に主キーが一律に設定されていますが、PRIMARY KEY キーワードの括弧内に複数のフィールドを含めることができ、複数フィールドの主キーを設定するにはカンマで区切る必要があります。

4.5 主キーの削除

ALTER TABLE <表名> DROP PRIMARY KEY;

5. フィールド値を自動的に増加するように設定します (AUTO_INCREMENT)

5.1 コンセプト

AUTO_INCREMENT は MySQL の唯一の拡張整合性制約であり、新しいレコードがデータベース テーブルに挿入されると、フィールドの値により一意の ID が自動的に生成されます。AUTO_INCREMENT 制約を具体的に設定する場合、データベース テーブル内の 1 つのフィールドのみがこの制約を使用でき、このフィールドのデータ型は整数型である必要があります。AUTO_INCREMENT 制約を設定した後のフィールドは一意の ID を生成するため、このフィールドは PK の主キーとして設定されることがよくあります。

5.2 特徴

  • テーブルには最大 1 つの自己増加列を含めることができます
  • 一意の識別子またはシーケンス値を生成する必要がある場合、自己拡張を設定できます
  • 自己成長列で制約される列はキー列(主キー列、一意キー列)である必要があります。
  • 自己インクリメント制約の列のデータ型は整数型である必要があります
  • 自動インクリメント列に 0 または NULL が指定されている場合は、現在の最大値に基づいて自動インクリメントされます。自動インクリメント列に特定の値が手動で指定されている場合は、Zhiwei に特定の値が直接支払われます。

5.3 増分制約の指定

  1. 方法 1: テーブルを作成するには、次のように指定します。
CREATE TABLE table_name(
	字段名 数据类型 PRIMARY KEY|UNIQUE AUTO_INCREMENT,
    ...
);
  1. 方法 2: ALTER TABLE を使用して追加する
ALTER TABLE <表名> MODIFY 字段名 数据类型 AUTO_INCREMENT;

5.4 自動インクリメント制約の削除

ALTER TABLE <表名> MODIFY 字段名 数据类型;

ヒント: 次の図に示すように、empno が 3 であるデータを削除してから、データを挿入します。empno は 3 ではなく 4 です。

ここに画像の説明を挿入

6. ギフトブックの概要 + 機械学習の学習方法は? : Python ディープラーニングの「四大傑作」の 1 つである PyTorch の新バージョン

#直播解决[今夜7:30] 機械学習を学ぶにはどうすればよいですか? 機械学習の産業実践への道、大規模モデル テクノロジーと製品の洞察について、今夜 #ビデオ番号: IT 読書リスト
ここに画像の説明を挿入

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
近年、機械学習手法は、大量のデータを理解し、自律的な意思決定を行う能力により、ヘルスケア、ロボット工学、生物学、物理学、大量消費、インターネットサービスなどの業界で広く使用されています。
『Python Machine Learning: Based on PyTorch and Scikit-Learn』という本の位置づけは、機械学習の理論とエンジニアリングの実践を組み合わせることで、読者の読書の敷居を下げることです。データ駆動型手法の基礎から最新の深層学習フレームワークに至るまで、本書の各章では、機械学習の実際的な問題を解決するための機械学習コード例が提供されています。

ここに画像の説明を挿入

これは、PyTorch 環境で機械学習とディープ ラーニングを学習するための包括的なガイドであり、初心者向けの入門チュートリアルとして、または機械学習プロジェクトを開発する際の読者向けのリファレンス ブックとして使用できます。
機械学習手法の基礎を詳しく紹介し、機械学習モデルの構築手順だけでなく、機械学習モデルの構築と実際的な問題の解決に関する基本的なガイドラインも提供します。機械学習を初めて使用する場合でも、機械学習の進歩を追跡する計画がある場合でも、この本は Python を使用した機械学習の最良の選択肢として使用できます。

Dangdang.com購入
リンク: Python 深層学習の「四大傑作」の 1 つである PyTorch の新バージョン

✨✨今回は2冊の本がプレゼントされ、コメント欄で2人の友達が選ばれて本を送ります✨✨活動
時間: 2023-07-22 20:00:00まで、
当選した友達は上記2冊のいずれかを選択できます
描き方: プログラムを使用して描きます。
参加方法:ブロガーをフォロー、いいね、ブックマーク、コメント欄に質の高いコメントを投稿(1アカウントにつき3回までコメント可能)

おすすめ

転載: blog.csdn.net/qq_72157449/article/details/131812634