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

2021-01-30  本文已影响0人  copymaker

约束的意义

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

外键约束的规则

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);
自动创建索引
添加超出外键约束的值时报错 因为添加了删除级联,删除父表行时,子表所关联的也会被删除
如果没有添加删除级联,删除父表行时则会报错

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

上一篇 下一篇

猜你喜欢

热点阅读