外键和主键的区别和联系

外键和主键的区别和联系,第1张

问题一:什么是主键和外键 通俗的说吧

先说说主键(primary key)吧:一张表(关系)的一个列(属性)或多个列可以作为主键,但是前提是让这个列作主键,这个列就能保证该列下的各个行(元组)的值不能相同,比如说你用姓名属性作主键的话,那么这个主键就不一定可以,如果有两个人是同样的名字的话,就不能做到该属性下的各个元组数据的值不同,如果用 数字作主键就是一个很好的选择。

再说说外键(foreign key):一张表(关系)的列(属性)它同时存在表1和表2中,它不是表1的主键,而是表2的主键,就可以说他是表1的外键。

那么什么是候选键(Candidate Key)呢:能唯一标识表(关系)中行(元组)的列(属性),则称该属性为候选键,也称 候选关键字 或 候选码;由此来看候选键可以不只一个,还看一看得出的就是主键同时它也是候选键

问题二:SQL中什么叫主键,什么是外键,有啥关系 就好像一个订单需要2张表

1站订单表 一张订单明细表 订单表里面的ID是主键

明细表里的也有个ID 关联的订单表的ID 那明细表的ID就是外键

订单表的一个产品如果删掉了 但明细表里面的关联订单表的数据没删掉 就造成了数据冗余

所以设置主外键是防止数据误删和冗余 设置主键后 如果明细表的数据没删掉 主键内的信息就删不掉

问题三:什么是主键和外键 这需要理清几个概念:

1)候选键: 关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。

2)主键:当有多个候选码时,可以选定一个作为主码,选定的候选码称主键

3)外键: 关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。

问题四:什么是主键和外键 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 :

学生表(学号,姓名,性别,班级)

其中每个学生的学号是唯一的,学号就是一个主键

用户表(用户名、密码、登录级别)

其中用户名是唯一的, 用户名就是一个主键

上机记录表(卡号,学号,姓名、序列号)

上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键

问题五:什么是外键表,什么是主键表? 表1是主键表、

表1的主键字段在表2中做外键、而表1自己却没有外键

表2是外键表

有一个依赖表1typeid的字段、作为外键、取值必须是其依赖主键表表1中主键字段有的值

问题六:数据库中什么是主键,什么是外键 主键(Primary key): 也称为主码或主关键字,用于惟一地确定一个元组的属性或属性组(复合主码)。每个关系都有一个并且只有一个主码。

外键(Foreign Key):也称为外码或外部关键字。如果一个属性集不是所在关系的关键字,但是是其他关系的关键字,则该属性集称为外部关键字。在关系数据库中可以通过外键使两个关系关联,这种联系通常是一对多(1:n)的,其中主(父)关系(1方)称为被参照关系,从(子)关系(n方)称为参照关系。

问题七:oracle中 主键和外键是什么意思?什么地方采用呢? 1、这种简单的搜一下都有吧。不止oracle,所有关系型数据库主键和外键的含义都一致;

2、主键和外键是两种类型的约束;

3、主键是能唯一的标识表中的每一行,就是说这一列非空且值不重复,可以指定为主键;作用是用来强制约束表中的每一行数据的唯一性;

4、外键是b表中的某一列引用的值来源于a表中的主键列。也是约束b表中的外键列的值必须取致a表中的主键列值,不是其中的值就不能插入b表中。可以形成a表b表的联系,保持数据的约束和关联性。

问题八:sql中什么叫主键表,什么叫外键表 主键表 外键表 这个概念没有 没听过

不过从字面理解 这个应该是基于有外键的表说的

有外键的那张表是外键表 另外张关联外键的应该就是主键表

主键是对表的约束,保证数据的唯一性!

外键是建立表于表之间的联系,方便程序的编写!

主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。

必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。

希望能帮你 呵呵

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

分类:

①、主键约束: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

在这里插入描述

以一个例子来说明下。比如一个省表有省ID和省名,市表有市ID、市名和省ID那么在市表里面的外键就是省ID,当你设置了他们的约束,这样起到一个数据完整性的作用,当你删除一个省的时候,如果下面有市,那么你直接删除是删除不了的,这就是一种约束,防止数据的不完整性

你在建立外键的时候要指定更新的关联,这样删除User中的一笔记录,所有以User表的UserId为外键的表的记录都会删除,修改User中UserId的值,所有所有以User表的UserId为外键的表的记录都会更新这个UserId的值

比如MSSQL中:

alter table tbl_xxx

add constraint FK_xxx foreign key (lodNo)

references tbl_aaa (loNo)

on update cascade on delete cascade

注意on update cascade on delete cascade

以上就是关于外键和主键的区别和联系全部的内容,包括:外键和主键的区别和联系、数据库中主键和外键的作用、数据库的4键2约束指的是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存