文章目录
- Java进阶 主键和外键的使用区别
- 一、主外键定义
- 二、主外键用法&意义
- 三、如何创建外键
Java进阶 主键和外键的使用区别
一、主外键定义
主键,primary key:是被挑选出来,作表的惟一标识的候选关键字,一个表只有一个主键。比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。注意,主键可以是一个字段,也可以是多个字段组合成的多字段联合主键,看下面这个例子:
#将name和deptId字段组合成为表temp的多字段组合主键
CREATE TABLE temp
(
name VARCHAR(32),
deptId INT,
salary FLOAT,
PRIMARY KEY(name,deptId)
)
外键:外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主外键用法&意义
在以后我们统一将外部关键字叫做外键,外键就是另一张表中的主键。
问:外键有啥用啊?
答:外键的主要作用就是保持数据的一致性,完整性。
再问:怎么保证的呢?
答:看下图。
stuId | name | classId |
1 | 张三 | 1 |
2 | 李四 | 2 |
calssId | className |
1 | 计算机1班 |
2 | 计算机2班 |
看上图有两张表,classId
是Student
的外键,是Class
表的主键, 如果我们要删除Class
表中classId
为1
的字段,程序是会报错的,因为Student
表中有数据和classId
为1
的字段关联了,是不能删除的,这样子就保证了数据的一致性和完整性。
继续问: 那怎么才能删除呢?
答: 需要先删除Student
表中classId
为1的两个字段。
三、如何创建外键
在MySQL中给表中字段添加外键约束的语法规则如下:
CONSTRAINT 外键名 FOREIGN KEY 字段名 REFERENCES 主表名(主键名)
举个例子,现在有两张表,一张学生表,一张班级表,内容看上面的表:
CREATE TABLE student
(
stuId INT PRIMARY KEY,
name VARCHAR(22),
classId INT,
CONSTRAINT student_class_id FOREIGN KEY(classId) REFERENCES class(classId)
);
CREATE TABLE class
(
classId INT PRIMARY KEY,
className VARCHAR(22)
);