首先我们先建两个测试表
先建立主表
CREATE TABLE my_class(
id INT PRIMARY KEY , -- 主键
`name` VARCHAR(32) NOT NULL DEFAULT ''
);
在建立从表
CREATE TABLE my_stu (
id INT PRIMARY KEY , -- 学生编号
`name` VARCHAR(32) NOT NULL DEFAULT '',
class_id INT, -- 如果(外键)这里设置了非空的话不行
-- 下面指定外键关系
FOREIGN KEY (class_id) REFERENCES my_class(id)
)
先记录一下外键的定义:
1.外键用于 定义主表和从表之间的关系:外键约束要定义在从表之上,
从表
发现从表有个字段(class_id),这个字段就是建立外键关系的‘钥匙了’,
实际上就从表上有个class_id这个字段 里面的值指向主表中某个字段(id字段)的值,
也就是外键表中的 每个学生所在的班级号 class_id(其中的值)就是(主表) 班级表中的班级编码id的值
先记录一下建立外键关系的必要条件吧:
外键字段的值,必须在主键字段中出现过,(比如图中的class_id的字段值为300在主表中id这个字段中出现过)
或者为null [前提是外键字段允许为null]
一旦从表与主表建立外键关系,想要删除主表的某条信息,先要删除外键所在的表的记录(从表),
再删除主表的那条记录
ps:这里直接删除主表中的一条记录,由于主表中的id这个字段与从表的class_id这个字段建立的外键关系所以删除不了
正确做法:
先删除外键所在表的那条记录(从表中的id)记录,
class_id=300的那条记录没有了
再来删除主表(班级表中的记录)发现可以了
原因: 从表中 外键那个 字段的值的记录 在主表中没有关联了
也就是,从表外键的值class_id字段=??? 与 主表中id=???这个字段值没有了关系