数据库中什么是主键,什么是外键

数据库中什么是主键,什么是外键,第1张

主键(Primary key): 也称为主码或主关键字,用于惟一地确定一个元组的属性或属性组(复合主码)。每个关系都有一个并且只有一个主码。

外键(Foreign Key):也称为外码或外部关键字。如果一个属性集不是所在关系的关键字,但是是其他关系的关键字,则该属性集称为外部关键字。

在关系数据库中可以通过外键使两个关系关联,这种联系通常是一对多(1:n)的,其中主(父)关系(1方)称为被参照关系,从(子)关系(n方)称为参照关系。

扩展资料:

数据库主键作用:

1、保证实体的完整性

2、加快数据库的 *** 作速度

3、在表中添加新记录时,DBMS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。

4、DBMS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

在有些数据库中,虽然主键不是必需的,但最好为每个表都设置一个主键,不管是单主键还是复合主键。它存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,以及本记录的修改与删除。

参考资料来源:百度百科-数据库主键

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

先说说主键(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中什么叫主键表,什么叫外键表 主键表 外键表 这个概念没有 没听过

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

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

1,主键约束 (table的唯一标识)

能够作为主键列的特点:该列不能为空,不能有重复值出现

创建表时指定主键的两种方式:

CREATE TABLE stu(

sid CHAR(6) PRIMATY KEY,

sname VARCHAR(20),

age INT,

gender VARCHER(10)

);

指定sid列为主键列

CREATE TABLE stu(

sid CHAR(6),

sname VARCHAR(20),

age INT,

gender VARCHER(10),

PRIMARY KEY(sid)

);

指定sid列为主键列

修改表时指定主键:ALTER TABLE stu ADD PRIMATY KEY(sid);

删除主键:ALTER TABLE stu DROP PRIMARY KEY;

2,主键自增长

因为主键列的特性是:必须唯一,不能为空,所以我们通常会指定主键为整形,然后设置其自动增长

创建表时指定主键自增长:

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20),

age INT,

gender VARCHAR(10)

);

修改表时设置主键自增长:ALTER TABLE stu 

3,非空约束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL,

age INT,

gender VARCHAR(10)

);

对sname列设置了非空约束

4,唯一约束

某些列不能设置重复的值,所以可以对列添加唯一约束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL UNIQUE,

age INT,

gender VARCHAR(10)

);

6,外键约束

外键特点:外键必须是另一个表的主键的值(外键要引用主键!),外键可以重复,外键可以为空,一张表可以有多个外键!

CREATE TABLE dept( //部门表

deptno INT  PRIMARY KEY AUTO_INCREMENT,

deptname CHAR(20)

);

INSERT INTO dept VALUES(10,‘研发部’);

INSERT INTO dept VALUES(20,‘人力部’);

INSERT INTO dept VALUES(30,‘财务部’);

CREATE TABLE emp(   //员工表

empno INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(50),

dno INT, //员工所属部门(外键),

CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)

);

INSERT INTO emp(empno,ename)  VALUES(NULL,‘张三’),//外键可以不传入值

INSERT INTO emp(empno,ename)  VALUES(NULL,‘李四’,10),//外键可以重复

INSERT INTO emp(empno,ename)  VALUES(NULL,‘王五’,10),

INSERT INTO emp(empno,ename)  VALUES(NULL,‘赵六’,80),//dept表没有主键值为80的记录,sql客户端编译报错

7,一对一关系模型

创建老公表

CREATE TABLE hashand(

hid INT PRIMARY KEY AUTO_INCREMENT,

hname VARCHAR(50),

);

INSERT INTO hashand VALUES(NULL,‘刘备’);

INSERT INTO hashand VALUES(NULL,‘关羽’);

INSERT INTO hashand VALUES(NULL,‘张飞’);

SELECT * FROM hashand

//创建老婆表

CREATE TABLE wife(

wid INT PRIMARY KEY AUTO_INCREMENT,

wname VARCHAR(50),

CONSTRAINT fk_wife_hashand FOREIGN KEY(wid)  REFERENCES hashand(hid)

)

/**

wid:

1,非空

2,唯一

3,引用hid

*/

INSERT INTO wife VALUES(1,‘杨贵妃’);

INSERT INTO wife VALUES(2,‘妲己’);

INSERT INTO wife VALUES(3,‘褒姒’);

SELECT * FROM wife;

对于一对一关系模型从表的主键即是外键,例如老公和老婆的关系模型,一个老公只能有一个老婆,一个老婆只能有一个老公

对于一对多关系模型主表的主键即是从表的外键,例如订单和用户的关系模型,一个用户可以下单多次,对应多个订单,而一个订单只能属于一个用户

对于多对多关系模型没有主表和从表之分,需要建立第三张表来记录这两张表的外键,建立两个外键,分别引用这两张表的主键

8,多对多关系模型

在表中简历多对多关系需要使用中间表,即需要三张表,在中间表中使用两个外键,分别引用其他两个表的主键,例如学生和老师的关系模型,一个老师可以有多个学生,一个学生可以有多个老师

CREATE TABLE student(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname CHAR(40)

);

CREATE TABLE teacher(

tid INT PRIMARY KEY AUTO_INCREMENT,

tname CHAR(40)

);

CREATE TABLE stu_tea(

sid INT,

tid INT,

ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),

ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid)

);

INSERT INTO student VALUES(NULL,‘刘德华’);

INSERT INTO student VALUES(NULL,‘梁朝伟’);

INSERT INTO student VALUES(NULL,‘黄日华’);

INSERT INTO student VALUES(NULL,‘苗侨伟’);

INSERT INTO student VALUES(NULL,‘汤镇业’);

INSERT INTO teacher VALUES(NULL,‘崔老师’);

INSERT INTO teacher VALUES(NULL,‘刘老师’);

INSERT INTO teacher VALUES(NULL,‘石老师’);

SELECT * FROM student;

SELECT * FROM teacher;

INSERT INTO stu_tea VALUES(1,1); //刘德华是崔老师的学生

INSERT INTO stu_tea VALUES(2,1); //梁朝伟是崔老师的学生

INSERT INTO stu_tea VALUES(3,1);//黄日华是崔老师的学生

INSERT INTO stu_tea VALUES(4,1);//苗侨伟是崔老师的学生

INSERT INTO stu_tea VALUES(5,1);//汤镇业是崔老师的学生

INSERT INTO stu_tea VALUES(2,2);//梁朝伟是刘老师的学生

INSERT INTO stu_tea VALUES(3,2);//黄日华是刘老师的学生

INSERT INTO stu_tea VALUES(4,2);//苗侨伟是刘老师的学生

INSERT INTO stu_tea VALUES(3,3);//黄日华是石老师的学生

INSERT INTO stu_tea VALUES(5,3);//汤镇业是刘老师的学生

SELECT * FROM stu_tea;

这时在stu_tea这个中间表中的每条记录都是来说明student表和teacher表的关系的

例如在stu_tea表中的记录:sid为1001,tid为2001,这说明编号为1001的学生有一个编号为2001的老师

sid          tid

1001       2001 //编号为1001的学生有一个编号为2001的老师

1001       2002 //编号为1001的学生有一个编号为2002的老师

1001       2003 //编号为1001的学生有一个编号为2003的老师

1002       2001 //编号为2001的老师有一个编号为1002的学生

1002       2004 //编号为2004的老师有一个编号为1002的学生

9,合并结果集

要求要合并的结果集中,列的类型和列数相同

UNION,去除重复行,UNION ALL,不去除重复行


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存