MySQL学习日记(14)外键约束

约束的意义

1.约束保证数据的完整性和一致性
2.约束分为表级约束和列级约束
3.约束类型包括

  • NOT NULL (非空约束)
  • PRIMARY KEY (主键约束)
  • UNIQUE KEY (唯-约束)
  • DEFAULT (默认约束)
  • FOREIGN KEY (外键约束)
    4.外键约束FOREIGN KEY
    保持数据一致性,完整性。
    实现一对一或一堆多关系,简单来说举个例子,现在有个管理学生的数据库,其中有很多数据表,比如学生信息表,学生期中考试成绩表,学生期末考试成绩表等等,这其中有一个数据字段是完全一致的且不会重复,就是学号,此时可以在其他成绩表中与信息表中的学号字段建立外键约束。

外键约束的规则

1.父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2.数据表的存储引擎只能为InnoDB(创建表一般默认为innoDB)。
3.外键列和参 照列必须具有相似的数据类型。其中数字的长度或是否有符号位必须相同;
而字符的长度则可以不同。
4.外键列和参 照列必须创建索引。如果外键列不存在索引的话,MySQL将 自动创建索引。
5.查看索引: SHOW INDEXES FROM 数据表名

CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
格式: ON {UPDATE | DELETE CASCADE}
SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项
必须保证子表列没有指定NOT NULL。
RESTRICT:拒绝对附表的删除或更新操作
NO ACTION:标准SQL的关键字,在MySQL中 与RESTRICT相同

首先创建一个学生信息表(父表):

mysql> CREATE TABLE 学生信息表(
    -> 学号 INT AUTO_INCREMENT PRIMARY KEY,
    -> 姓名 VARCHAR(10),
    -> 性别 ENUM('男','女'),
    -> 年龄 INT UNSIGNED)
学生信息表

添加四条信息

再创建一个学生其中考试成绩表(子表),并添加删除级联:

mysql> CREATE TABLE 学生期中考试成绩表(
    -> 考试学号 INT,
    -> 成绩 INT UNSIGNED,
    -> FOREIGN KEY(考试学号) REFERENCES 学生信息表(学号) ON DELETE CASCADE);
自动创建索引

添加超出外键约束的值时报错
因为添加了删除级联,删除父表行时,子表所关联的也会被删除

如果没有添加删除级联,删除父表行时则会报错

不过一般性外键约束属于物理性约束,用的比较少性能比较差

你可能感兴趣的:(MySQL学习日记(14)外键约束)