1.制約とは何ですか
データの整合性と整合性を確保するために、SQL仕様では、制約された方法でテーブルデータに追加の条件を課しています。
•制約はテーブルレベルで必須です
•テーブルの作成時(CREATE TABLEステートメントを使用)またはテーブルの作成後(ALTER TABLEステートメントを使用)に制約を指定できます。
2つの一般的な制約
次の6つの制約があります。
-NOT NULL非空制約。これは、特定のフィールドを空にすることはできないことを規定しています。
-UNIQUE一意制約。これは、特定のフィールドがテーブル全体で一意であることを規定します。
-PRIMARY KEY主キー(空ではなく一意)
–外部キー外部キー
–チェックチェック制約
–デフォルトのデフォルト値
注:MySQLはチェック制約をサポートしていませんが、チェック制約は効果なしで使用できます。
制約データ列の制約に従って、制約は次のように分割できます。
–単一列の制約:各制約は1つの列のみを制約します
–複数列の制約:各制約はデータの複数の列を制約できます
•制約の範囲に応じて、制約は次のように分類できます。
-列レベルの制約は、列の定義に従って、1つの列にのみ適用できます。
–テーブルレベルの制約は、列と一緒ではなく、個別に定義された複数の列に作用できます。
常见约束
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
CREATE TABLE 表名(
字段名 字段类型 约束
)
分类
六大约束
NOT NULL 非空约束 保证该字段的值不能为空
比如姓名 学号
DEFAULT 默认约束 用于保证该字段有默认值
比如性别
PRIMARY KEY 主键约束 用于保证该字段的值具有非空 唯一性
比如学号
UNIQUE :唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号 也可以为空
CHECK 检查约束 MySQL中不支持,虽然语法没错
性别只能是男或者女 那么添加的数据只能是二者之一 不然无法添加
FOREIGN KEY 外键约束 用于限制两个表的关系,用于保证该字段的值必须来自于
主表关联列的值
比如
表一:学生信息表里有一个专业列
表二:专业信息表 假如只有两个专业 1 Java 2 h5
那么表一中的专业列号只能是1或者2,来自于专业信息表
这个约束就叫做外键约束,一般添加在从表(学生信息表)中,
引用主表(专业信息表)中某列的值。
比如:专业编号,员工表的部门编号,工种编号,都可添加外键约束。
添加约束时机:
1.创建表时
2.修改表时
约束的添加分类:
1.列级约束
创建表时,写在:
字段名 字段类型 列级约束;
六大约束语法上都没问题,但外键约束无效果
2.表级约束
在写完列后,最后加上:
表级约束
不支持非空和默认
3つ目は、テーブルを作成するときに列レベルの制約を追加することです。
1.添加列级约束
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender = '男' OR gender = '女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
);
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
SELECT * FROM stuinfo;
语法:直接在字段名和类型后面追加约束类型即可。
只支持默认 非空 主键和唯一
4つ目は、テーブルを作成するときにテーブルレベルの制約を追加することです。
2.添加表级约束
DROP TABLE IF EXISTS stuinfo;
VARCHAR:可变长 CHAR:定长
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),#主键
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
)
SHOW INDEX FROM stuinfo;
语法:
【constraint 约束名】
通用写法:
CREATE TABLE IF EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
)
5つの主キーと独自の比較
1.一意性を保証できます
2.主キーを空にすることはできません
3.テーブルには最大で1つの主キーを含めることができ、複数の一意のキーを含めることができます。
4.すべての組み合わせが許可されますが、推奨されません
たとえば、学生テーブルには、主キーである学生IDが含まれています。
優秀な生徒にはそれぞれ1対1のチューターを割り当てることができます。
メンターIDの列もあります
チューターを持つ学生は、互いに異なるチューターIDを持っています。
もちろん、一部の学生はチューターIDを持っていないこともできます
6、外部キー
1.テーブルから外部キー関係を設定する必要があります
2.スレーブテーブルの外部キー列のタイプは、メインテーブルの関連する列のタイプと一致しています。
3.メインテーブルの関連する列はキーである必要があり、通常は主キーまたは一意である必要があります
4.データを挿入するときは、最初にマスターテーブルを挿入してから、スレーブテーブルを挿入します。
5.データを削除するときは、最初にセカンダリテーブルを削除してから、プライマリテーブルを削除してください