超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别

超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别,第1张

超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键

候选键(candidate key):不含有多余属性的超键称为候选键

主键(primary key):用户选作元组标识的一个候选键程序主键

比如一个小范围的所有人,没有重名的,考虑以下属性

身份z 姓名 性别 年龄

身份z唯一,所以是一个超键

姓名唯一,所以是一个超键

(姓名,性别)唯一,所以是一个超键

(姓名,性别,年龄)唯一,所以是一个超键

--这里可以看出,超键的组合是唯一的,但可能不是最小唯一的

身份z唯一,而且没有多余属性,所以是一个候选键

姓名唯一,而且没有多余属性,所以是一个候选键

--这里可以看出,候选键是没有多余属性的超键

考虑输入查询方便性,可以选择 身份z 为主键

也可以 考虑习惯 选择 姓名 为主键

--主键是选中的一个候选键

unique Key是唯一键,而Primary key是主键

Primary key 与Unique Key都是唯一性约束。但二者有很大的区别:

1、Primary key的1个或多个列 必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。

2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。

primary key(sid,cid)是联合主键,也就是说通过字段sid和cid来确认一条记录的唯一性。

解释:”primary key“在数据库中的意思是主键,用来确保记录的唯一性,这样的例子很多,如身份z号、学生证号等都是这样。联合主键的话,意思就是一个字段无法确认唯一性,要通过两个或者多个字段来确认,如某人的数学成绩,那么就是学号和数学学科的编号来确认某人的数学成绩。

key是关键字、value是值。

key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。

Key-value数据库是一种以键值对存储数据的一种数据库,类似Java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值

扩展资料:

由于key-value的键值对特性,被广泛应用键值对数据库中,如redis、memchaced,查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询。

key-value型内存数据库还具有以下特性:

1、亚毫秒级延时。

2、语法简单,易用性强。

3、支持集群方式水平扩展。

4、支持哈希、列表、集合、有序集合等复杂的数据结构。有更多的应用场景

参考资料来源:百度百科-Key-Value

关键字(Key)

关键字是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分。

候选关键字(Candidate Key)

如果一个属性集能惟一地标识表的一行而又不含多余的属性,那么这个属性集称为候选关键字。

主关键字(Primary Key)

主关键字是被挑选出来,作表的行的惟一标识的侯选关键字。一个表只有一个主关键字。主关键字又可以称为主键。

公共关键字(Common Key)

在关系数据库中,关系之间的联系是通过相容或相同的属性或属性组来表示的。如果两个关系中具有相容或相同的属性或属性组,那么这个属性或属性组被称为这两个关系的公共关键字。

如有一个表,字段为:

id firstname lastname address phone IDcard

那么id或IDcard或firstname+lastname都可以说是关键字。

其中id为主关键字,IDcard和firstname+lastname为候选关键字

外关键字(Foreign Key)

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

表A:id firstname lastname address classid

表B:classid classname

classid是表B的主键,在表A中有一个字段和表B中的classid关联,所以,classid 是表B的外键

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

分类:

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

在这里插入描述

primary key == 主键 等价于 唯一 (UNIQUE) 且 非空 (NOT NULL)

主关键字(primary key)是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。在两个表的关系中,主关键字用来在一个表中引用来自于另一个表中的特定记录。

主关键字是一种唯一关键字,表定义的一部分。一个表不能有多个主关键字,并且主关键字的列不能包含空值。主关键字是可选的,并且可在 CREATE TABLE 或 ALTER TABLE 语句中定义。

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

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

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

以上就是关于超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别全部的内容,包括:超键(super key)、候选键(candidate key)和主键(primary key) 外键(foreign key)的区别、数据库中Unique Key 和Primary Key的区别Unique Key在什么时候能用到急急急~~、数据库里的primary key(sid,cid)是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存