外键的特点

大家好,我是一只学弱狗,记录学习的点点滴滴!

优质文章

  • 一张黄图的故事
  • JavaSE练习项目-坦克大战
  • 我是菜鸟、我小试牛刀
  • linux指令太多记不住?小白看这篇就够了!

优质专栏

  • 数据库就该这样学
  • 爪哇外步篇

外键六大约束中的一种,它也是一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性

举个例子
我们先执行下面的代码,来创建专业表major和学生信息表stuinfo

CREATE TABLE IF NOT EXISTS major(id INT PRIMARY KEY,majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuName VARCHAR(20),majorId INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);

我们通过下面的代码查看索引信息

SHOW INDEX FROM stuinfo;


可见,学生信息表stuinfo中的外键已经添加成功,我们往专业表major中插入数据

INSERT INTO major VALUES(1,'Java');
INSERT INTO major VALUES(2,'H5');
INSERT INTO major VALUES(3,'JS');

添加成功后,我们开始往学生信息表中添加数据

INSERT INTO stuinfo VALUES (001,'Alice',3);

添加成功,好,我们再来添加一条数据

INSERT INTO stuinfo VALUES (002,'Boily',4);

然而,错误了
大家看这个错误报告,a foreign key,哦,外键在起作用!
所以,这个关键是干啥的呢?是这样,它是规范学生信息表中字段major的信息规范的,假如专业表major中有三条记录,即{1,‘JAVA’},{2,‘H5’},{3,‘JS’},当我们在学生信息表中插入数据时,如果专业编号majorId=4,那么不就出现问题了么,4号…,没有啊!!!
这就是外键,相信大家也理解了,下面咱们来谈谈它的特点
首先呢,我们必须了解约束添加的分类,有两种列级约束表级约束,外键添加时必须采用表级约束,用列级约束添加是没有效果的。

特点一:

要求在从表中添加外键关系,比如上面的学生信息表就是从表,而专业表则是主表

特点二:

从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求,这点应该很容易理解吧,比如人和人才能交流吧,你不能和佩奇侃吧!

特点三:

主表的关联列必须是一个key(一般是主键或唯一),好,咱们来试一下

DROP TABLE IF EXISTS major;
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS major(id INT ,majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuName VARCHAR(20),majorId INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);

上述代码执行后,会报一个错误

这就是从表学生信息表中专业编号的外键所关联的主表的关联列不是一个键

特点四:

插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表,这点也很容易理解吧,那咱们关于外键的特点就先说到这里!

外键的特点

大家好,我是一只学弱狗,记录学习的点点滴滴!

优质文章

  • 一张黄图的故事
  • JavaSE练习项目-坦克大战
  • 我是菜鸟、我小试牛刀
  • linux指令太多记不住?小白看这篇就够了!

优质专栏

  • 数据库就该这样学
  • 爪哇外步篇

外键六大约束中的一种,它也是一种限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性

举个例子
我们先执行下面的代码,来创建专业表major和学生信息表stuinfo

CREATE TABLE IF NOT EXISTS major(id INT PRIMARY KEY,majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuName VARCHAR(20),majorId INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);

我们通过下面的代码查看索引信息

SHOW INDEX FROM stuinfo;


可见,学生信息表stuinfo中的外键已经添加成功,我们往专业表major中插入数据

INSERT INTO major VALUES(1,'Java');
INSERT INTO major VALUES(2,'H5');
INSERT INTO major VALUES(3,'JS');

添加成功后,我们开始往学生信息表中添加数据

INSERT INTO stuinfo VALUES (001,'Alice',3);

添加成功,好,我们再来添加一条数据

INSERT INTO stuinfo VALUES (002,'Boily',4);

然而,错误了
大家看这个错误报告,a foreign key,哦,外键在起作用!
所以,这个关键是干啥的呢?是这样,它是规范学生信息表中字段major的信息规范的,假如专业表major中有三条记录,即{1,‘JAVA’},{2,‘H5’},{3,‘JS’},当我们在学生信息表中插入数据时,如果专业编号majorId=4,那么不就出现问题了么,4号…,没有啊!!!
这就是外键,相信大家也理解了,下面咱们来谈谈它的特点
首先呢,我们必须了解约束添加的分类,有两种列级约束表级约束,外键添加时必须采用表级约束,用列级约束添加是没有效果的。

特点一:

要求在从表中添加外键关系,比如上面的学生信息表就是从表,而专业表则是主表

特点二:

从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求,这点应该很容易理解吧,比如人和人才能交流吧,你不能和佩奇侃吧!

特点三:

主表的关联列必须是一个key(一般是主键或唯一),好,咱们来试一下

DROP TABLE IF EXISTS major;
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS major(id INT ,majorName VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(id INT PRIMARY KEY,stuName VARCHAR(20),majorId INT,CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
);

上述代码执行后,会报一个错误

这就是从表学生信息表中专业编号的外键所关联的主表的关联列不是一个键

特点四:

插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表,这点也很容易理解吧,那咱们关于外键的特点就先说到这里!