美文网首页
MySQL学习日记(14)外键约束

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

作者: copymaker | 来源:发表于2021-01-30 11:34 被阅读0次

    约束的意义

    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)外键约束

          本文链接:https://www.haomeiwen.com/subject/ghpqtltx.html