数据库中的外键是什么意思?

数据库中的外键是什么意思?,第1张

外键(FK)是用于建立和加强两个表数据之间的链接的一列或多列。通过将保存表中主键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就成为第二个表的外键。

当创建或更改表时可通过定义 FOREIGN KEY 约束来创建外键。

例如,数据库 pubs 中的 titles 表与 publishers 表有链接,因为在书名和出版商之间存在逻辑联系。

titles 表中的 pub_id 列与 publishers 表中的主键列相对应。titles 表中的 pub_id 列是到 publishers 表的外键。

扩展资料:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。

学号在成绩表(表2)中是主键,在学生表(表1)中是外键。如果不使用外键,表1的学号字段插了一个值(比如20140999999),但是这个值在表2中并没有,这个时候,数据库允许插入,并不会对插入的数据做关系检查。

然而在设置外键的情况下,插入表1学号字段的值必须要求在表1的学号字段能找到。 同时,如果要删除表2的某个学号字段,必须保证表2中没有引用该字段值的列,否则就没法删除。

这就是所谓的保持数据的一致性和完整性。如右图,如果表1还引用表2的某个学号,却把表1中的这个学号删了,表2就不知道这个学号对应的学生是哪个学生。

参考资料:百度百科-外键

对表中的数据进行限定,保证数据的正确性、有效性和完整性。

分类:

①、主键约束:primary key

②、非空约束:not null

③、唯一约束:unique

④、外键约束:foreign key

一、非空约束:not null,某一列的值不能为null

创建表时添加约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20) NOT NULL -- name为非空

)

1

2

3

4

1

2

3

4

创建表完后,添加非空约束

CREATE TABLE stu(

id INT,

NAME VARCHAR(20)

)

ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL

1

2

3

4

5

6

1

2

3

4

5

6

在这里插入图片描述

删除name的非空约束

ALTER TABLE stu MODIFY NAME VARCHAR(20)

1

1

在这里插入图片描述

二、唯一约束:unique,某一列的值不能重复

注意:唯一约束可以有NULL值,但是只能有一条记录为null

在创建表时,添加唯一约束

CREATE TABLE stu(

id INT,

phone_number VARCHAR(20) UNIQUE -- 手机号

)

1

2

3

4

1

2

3

4

在这里插入图片描述

删除唯一约束

ALTER TABLE stu DROP INDEX phone_number

1

1

在这里插入图片描述

在表创建完后,添加唯一约束

ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE

1

1

三、主键约束:primary key。

注意:

①、含义:非空且唯一

②、一张表只能有一个字段为主键

③、主键就是表中记录的唯一标识

在创建表时,添加主键约束

create table stu(

id int primary key,-- 给id添加主键约束

name varchar(20)

)

1

2

3

4

1

2

3

4

在这里插入图片描述

删除主键

-- 错误 alter table stu modify id int

ALTER TABLE stu DROP PRIMARY KEY

1

2

1

2

在这里插入图片描述

创建完表后,添加主键

create table stu(

id int,

name varchar(20)

)

ALTER TABLE stu MODIFY id INT PRIMARY KEY

1

2

3

4

5

6

1

2

3

4

5

6

自动增长:

①、概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

②、在创建表时,添加主键约束,并且完成主键自增长

create table stu(

id int primary key auto_increment,-- 给id添加主键约束

name varchar(20)

)

1

2

3

4

1

2

3

4

在这里插入图片描述

③、 删除自动增长

ALTER TABLE stu MODIFY id INT

1

1

在这里插入图片描述

④、添加自动增长

ALTER TABLE stu MODIFY id INT AUTO_INCREMENT

1

1

四、外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。

CREATE TABLE emp(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(30),

age INT,

dep_name VARCHAR(30),

dep_location VARCHAR(30)

)

INSERT INTO emp VALUES (1, '张三', 20, '研发部', '广州')

INSERT INTO emp VALUES (2, '李四', 21, '研发部', '广州')

INSERT INTO emp VALUES (3, '王五', 20, '研发部', '广州')

INSERT INTO emp VALUES (4, '老王', 20, '销售部', '深圳')

INSERT INTO emp VALUES (5, '大王', 22, '销售部', '深圳')

INSERT INTO emp VALUES (6, '小王', 18, '销售部', '深圳')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

1

2

3

4

5

6

7

8

9

10

11

12

13

14

在这里插入图片描述

通过上面的表格,我们可以知道,表中的信息是员工在不同的部门里面,于是我们可以将上面的一张表分开,分成两张表格。一张部门的表,一张员工的表。

-- 创建部门表(id,dep_name,dep_location)

CREATE TABLE department(

id INT PRIMARY KEY AUTO_INCREMENT,

dep_name VARCHAR(20),

dep_location VARCHAR(20)

)

-- 创建员工表(id,name,age,dep_id)

CREATE TABLE employee(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

age INT,

dep_id INT -- 外键对应主表的主键

)

-- 添加两个部门

INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL ,'销售部', '深圳')

-- 添加员工信息

INSERT INTO employee (NAME,age,dep_id) VALUES('张三',20,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('李四',21,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('王五',20,1)

INSERT INTO employee (NAME,age,dep_id) VALUES('老王',20,2)

INSERT INTO employee (NAME,age,dep_id) VALUES('大王',22,2)

INSERT INTO employee (NAME,age,dep_id) VALUES('小王',18,2)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

在这里插入图片描述

倘若现在我们把删除department表里面的数据,是可以删除的;但是这不符合实际情况。因为我们此时虽然删除掉了deparment表里的数据,但是employee表里面还是存在部门的信息。只有当部门里面的员工全部开除后,我们才可以删除部门表。

1.添加外键

在创建表时,可以添加外键:

create table 表名(

....

外键列

constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

)

1

2

3

4

5

1

2

3

4

5

-- 创建员工表(id,name,age,dep_id)

CREATE TABLE employee(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20),

age INT,

dep_id INT, -- 外键对应主表的主键

CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)

)

1

2

3

4

5

6

7

8

1

2

3

4

5

6

7

8

删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称

1

1

创建表之后,添加外键

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)

1

1

2. 级联 *** 作

我们如果要是直接在deparment表中直接将id=1修改为id=5的话,是不可以的。因为department的id被关联到employee表中了,所以修改会产生错误。;但是我们可以通过级联 *** 作进行修改。

添加级联 *** 作

语法:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称

FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)

ON UPDATE CASCADE ON DELETE CASCADE

1

2

3

1

2

3

分类:

①、级联更新:ON UPDATE CASCADE

②、级联删除:ON DELETE CASCADE

示例演示:

①、删除外键employee表中的外键(因为此时表中已经添加外键,需要先删除)

-- 删除外键

ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk

1

2

1

2

②、添加外键的同时,还要添加级联 *** 作

ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY ( dep_id ) REFERENCES department ( id ) ON UPDATE CASCADE ON DELETE CASCADE

1

1

③、倘若我们现在要是删除employee表中id=1的数据,那么department表中的数据也会跟着一起更新数据。

delete from department where id=1

1

1

-- 查询department表数据

select * from department

1

2

1

2

在这里插入图片描述

-- 查询employee表数据

select * from employee

1

2

1

2

在这里插入图片描述

外键是该表是另一个表之间联接的字段

外键必须为另一个表中的主键

外键的用途是确保数据的完整性。它通常包括以下几种:

实体完整性,确保每个实体是唯一的(通过主键来实施)

域完整性,确保属性值只从一套特定可选的集合里选择

关联完整性,确保每个外键或是NULL(如果允许的话)或含有与相关主键值相配的值

例子:

表A 字典表, 表B 业务表。

外键应建立在表B 上 。

1、表B 的字典项目的代码只能是表A 中代码内容。

2、表B 可以无条件删除记录。

3、表A 在删除的时候,将根据外键的规则,判断表B 中是否使用了要删除数据的代码,如果有引用,则不能删除。

ORACLE 如何建立表外键

例:学生表student (id, name , sex )

成绩表score (id ,math )

如何创建表,要求 有主键,有约束 解: CREATE TABLESTUDENT(ID CHAR(10), NAME VARCHAR(8),SEXCHAR(1))

ALTERTABLESTUDENTADDCONSTRAINTPK_STUDENTPRIMARYKEY(ID)

CREATE TABLE SCORE( ID CHAR(10),MATH NUMBER(5,2))

ALTER TABLE SCORE ADD CONSTRAINT FK_SCROE FOREIGN KEY(ID) REFERENCES STUDENT(ID)

* 主键与外键: 键是表中的列(可以是一列,也可以是几列),主键用于唯一的标识表中的数据项;外键用于连接父表和子表。而所谓的父表和子表是根据3NF 范式的要求,为了消除传递依赖,将原表拆成2个相互关联的表,而这个关联就是外键。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10099306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存