主键和外键是在我们创建数据库的时候保证数据的完整性。
当有很多表的时候,表之间都是有关联的 。

Mysql-06 主键,外键 - 图1

数据库主键

根据上面两个表的关系。分析业务:

  1. 学生表中的学号 唯一的,不能重复。

建表的时候,学生表的中的学号 设置为主键

  1. create table student(
  2. sno varchar(255) not null,
  3. sname varchar(255) not null,
  4. sex varchar(10) not null,
  5. primary key(sno) -- 设置主键
  6. );

表中添加数据

  1. insert into student (sno,sname,sex) values("A001","王凶獒","男");
  2. insert into student (sno,sname,sex) values("A001","王水水","女"); -- 会报错, 学号重复。

image.png

主键的作用:

  1. 值不能为null;
  2. 值不能在一张表中有重复;

    数据库外键

    上面的例子中创建了一个 学生表,下面创建成绩表
字段 说明 备注
sno 学生号 来源于学生表
cno 课程号 来源于课程表
score 成绩

成绩表

sno cno score
A001 yuwen 90
A001 shuxue 100
A002 yuewen 99
A002 shuxue 100

成绩表中因为存放的是所有的成绩
学号可以出现多次, 学号不能设置为主键
但是学号来源于学生表,
注意:
成绩表的中 sno 设置为外键

设置外键

在成绩表上 右键—【设计表】
image.png
选择 外键
image.png
创建外键
image.png

一个表中可以创建多个外键。比如 成绩表中 sno 来源于 student 表
同时 cno 来源 course 表中 cno;
所以可以再 在score 成绩表中创建 cno的外键;
image.png

验证外键

外键主要的作用就是保证数据的完整性

先看下student 表中 和 course 中的数据
image.pngimage.png

往score表中添加的数据的时候
image.png

外键的主要作用:

确保数据的有效性,防止插入数据出现无效数据这样的场景,能够保证整个数据完整。

一个表中以创建多个主键,
也可以创建多个外键。 具体情况根据具体的业务来添加即可。