怎么区分主从
最近在学MySQL,然后学到主键和外键。在MySQL中,外键约束(Foreign Key Constraint)用于确保表中的数据关系的完整性。外键约束是一个字段或一组字段,它们引用了另一个表中的主键或唯一键,从而创建了两个表之间的关联。
想要使用外键约束,需要满足以下条件:
1.定义主表和从表:
- 主表包含要引用的列,也称为父表(Parent Table)或主键表(Primary Key Table)。
- 从表包含外键列,也称为子表(Child Table)或外键表(Foreign Key Table)。
PS:在定义从表时,需要在外键列上添加外键约束。
然后对这个主表从表有点模糊概念,可能我比较笨光看文字不是很能体会到。我就后面看了几篇文章了解清楚,就写也一篇记录一下。
假设有现在有2个表,读者(reader)和读者归属单位(reader_affiliation),结构如下:
CREATE TABLE
IF
NOT EXISTS reader_affiliation (
affiliation_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '归属单位ID',
college VARCHAR ( 255 ) NOT NULL COMMENT '学院',
major VARCHAR ( 255 ) NOT NULL COMMENT '专业',
class VARCHAR ( 255 ) NOT NULL COMMENT '班级',
) COMMENT = '读者归属单位表';
/*读者表*/
CREATE TABLE
IF
NOT EXISTS reader (
reader_id varchar(255) PRIMARY KEY COMMENT '读者ID',
reader_pass VARCHAR ( 255 ) NOT NULL COMMENT '密码',
affiliation_id INT COMMENT '归属单位ID',
FOREIGN KEY ( affiliation_id ) REFERENCES reader_affiliation ( affiliation_id ),
) COMMENT '读者表';
上面的读者就是从表,读者归属单位就是主表,引用别的表主键为外键的就是从表,被引用的是主表,也可以简单粗暴的理解为:有外键的是从表 没有的是主表。
B表的外键与A表的主键相对应,则A表为主表,B表为从表。上面的例子中B表就是读者表,A表就是读者归属单位表。
数据操作
删除:
- 主表被引用当外键的数据列,是不能删除的会报错,
- 子表就能删除。
列如:假设上面的读者表引用了读者归属单位表reader_id为1的数据,此时读者归属单位表就不能删除reader_id为1的数据了,当然也不能修改reader_id值为其他,因为这条数据已经被引用了。
修改:
- 也是同删除操作一样,主表是不能修改已经被引用的数据列的;
- 子表就能随便改,但是前提是,外键的值要存在,不存在也会报错的。但是能为NULL
例如:假设例子中的读者归属单位只存在reader_id值为1一条数据,你将读者表中的reader_id修改为2,那么是不被允许的。
插入:
- 向主表中插入一条新的记录,不会对从表现有的数据造成影响;
- 向从表中插入一条新的记录,要看外键对应的属性值在主表中是否存在,若存在就能插入,不存在的话就不能插入,不插入那个字段就为NULL。