数据库扫盲之外键

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

用人话说就是一个表中的键需要参照另一个表中的主键,则这个键就是外键,这个表示主表,另一个表示是表。比如,一个学生表中的grade_id字段,参考年级表中的grade_id,则这个学生表中grade_id就是外键,年级表是主键,而学生表是从表。创建主键的方式一般有两种,下面代码演示下,我们将更加透彻ヾ(◍°∇°◍)ノ゙

第一种方式

-- 主表
CREATE TABLE IF NOT EXISTS grade(
 `id` INT(6) NOT NULL COMMENT '年级ID',
 `name` VARCHAR(20) NOT NULL DEFAULT '大一' COMMENT '学生年级',
  PRIMARY KEY (`id`)
)
-- 从表
CREATE TABLE IF NOT EXISTS student(
 `id` INT(6) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
 `name` VARCHAR(30) DEFAULT '匿名' COMMENT '学生姓名',
 `sex` VARCHAR(2) DEFAULT '男' COMMENT '学生性别',
 `gradeid` INT(6) COMMENT '学生所在年级',
  PRIMARY KEY(`id`),
  KEY FK_gradeid(`gradeid`),
  CONSTRAINT FK_gradeid FOREIGN KEY(`gradeid`) REFERENCES grade(`id`)
) ENGINE = INNODB DEFAULT CHARSET=utf8
-- contraint 添加约束
-- foreign key 外键

第二种方式


-- 主表
CREATE TABLE IF NOT EXISTS grade(
 `id` INT(6) NOT NULL COMMENT '年级ID',
 `name` VARCHAR(20) NOT NULL DEFAULT '大一' COMMENT '学生年级',
  PRIMARY KEY (`id`)
)

-- 从表
CREATE TABLE IF NOT EXISTS student(
 `id` INT(6) NOT NULL AUTO_INCREMENT COMMENT '学生ID',
 `name` VARCHAR(30) DEFAULT '匿名' COMMENT '学生姓名',
 `sex` VARCHAR(2) DEFAULT '男' COMMENT '学生性别',
 `gradeid` INT(6) COMMENT '学生所在年级',
  PRIMARY KEY(`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

以上操作都是物理外键,数据库级别的外键,但实际开发中**不建议使用外键。**其实我们网上一搜或者阿里手册,明确限制不允许使用外键,因为存在外键,在操作数据库时需要考虑这些外键的存在和限制,如果表特别多的话,那就相当痛苦了,所以不建议使用。
既然不建议使用外键,那我们学习外键还有什么用?如果真的需要,我们可以通过程序实现外键作用,而非物理添加。当然了解外键,打好基本功还是很有必要的。
总结:

  • 数据库单纯地存储表,表只用来存储数据,只有行(数据)和列(字段)
  • 我们想要使用多张表的数据,想要使用外键在应用层实现(程序中实现)
    如有不足,欢迎指教!如果对大家有帮助,希望大家点个赞,关注下,愿与你一起成长!
    一路有你,一起成长

猜你喜欢

转载自blog.csdn.net/weixin_47088026/article/details/110356118