数据库主键和外键的作用
数据库的几个概念:主键,外键,索引,唯一索引

数据库的几个概念:主键,外键,索引,唯一索引主键:主键是数据表的唯一索引,比如学生表里有学号和姓名,姓名可能有重名的,但学号确是唯一的,你要从学生表中搜索一条纪录如查找一个人,就只能根据学号去查找,这才能找出唯一的一个,这就是主键;如:id int(10) not null primary key auto_increment ;自增长的类型;外键:定义数据表假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。
用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。
在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。
很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。
这时,两个表中就存在一种约束关系(constraint)——Pc表中的CPU型号受到Parts 表中型号的约束。
首先我们来创建 parts 表:CREATE TABLE parts (... 字段定义 ...,model VARCHAR(20) NOT NULL,... 字段定义 ...);接下来是Pc表:CREATE TABLE pc (... 字段定义 ...,cpumodel VARCHAR(20) NOT NULL,... 字段定义 ...};设置索引若要设置外键,在参照表(referencing table,即Pc表) 和被参照表(referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。
对Parts表:ALTER TABLE parts ADD INDEX idx_model (model);这句话的意思是,为 parts 表增加一个索引,索引建立在 model 字段上,给这个索引起个名字叫idx_model。
对Pc表也类似:ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);事实上这两个索引可以在创建表的时候就设置。
【数据库】主键,外键,主表,从表,关联表,父表,子表

【数据库】主键,外键,主表,从表,关联表,⽗表,⼦表⼀、前⾔在设计中,hibernate,iBatis等ORM框架的使⽤中经常听说主键,外键,主表,从表,关联表,⽗表,⼦表之类的术语,弄懂它们之前的区别与联系对于和ORM框架的学习使⽤是⾮常有必要的。
⼆、概述下⾯从数据库设计⾓度,ORM框架使⽤(以Hibernate为例),PowerDesigner软件以及实际业务⾓度进⾏⼀下介绍。
(1) 数据库⾓度⽽⾔主键:⼀般情况下,满⾜第⼀范式的表都有⼀个主键Primary key,⽤于唯⼀标⽰数据库中的⼀个字段。
外键:外键是相对于数据库设计中的参考完整性⽽⾔,它与主键之间是彼此依赖的关系。
假设现在有两个表,产品分类表ProductCategory(主键CategoryId)和产品信息表Product(主键ProductId),每类产品都属于⼀个分类。
那么如果产品信息表肯定需要参考产品分类表进⾏定义。
因为如果没有产品分类表,⼜何谈产品分类呢。
所以产品信息表Product需要引⽤ProductCategory中的主键CategoryId 进⾏产品分类定义,Product表中引⽤CategoryId的字段就是外键。
在概念模型(Concept Model)中,从产品分类⾓度看,产品分类和产品之间就是⼀对多的关系,⼀个分类下可以有多个产品。
从产品⾓度看,产品和产品分类之间是多对⼀的关系,多种产品属于⼀个分类。
主表:在数据库中建⽴的表格即Table,其中存在主键(primary key)⽤于与其它表相关联,并且作为在主表中的唯⼀性标识。
(摘⾃百度百科)从表:以主表的主键(primary key)值为外键 (Foreign Key)的表,可以通过外键与主表进⾏关联查询。
从表与主表通过外键进⾏关联查询。
(摘⾃百度百科)关联表:两个数据库及其(数据)表之间的数据的相互依赖和影响关系。
⽐如现有某学校三个数据表:学⽣(学号,姓名),课程(课程名,课程编号),选课(学号,课程号,成绩)。
数据库中的主键与外键介绍

2手动增长型字段既然自动增长型字段会带来如此的麻烦,我们不妨考虑使用手动增长型的字段,也就是说主键的值需要自己维护,通常情况下需要建立一张单独的表存储当前主键键值。还用上面的例子来说,这次我们新建一张表叫IntKey,包含两个字段,KeyName以及KeyValue。就像一个HashTable,给一个KeyName,就可以知道目前的KeyValue是什么,然后手工实现键值数据递增。在SQL
Server中可以编写这样一个存储过程,让取键值的过程自动进行。代码如下:
CREATE PROCEDURE[GetKey]
@KeyNamechar(10),
@KeyValue intOUTPUT AS UPDATE IntKey SET @KeyValue =KeyValue = KeyValue + 1
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份证号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
COMB数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。也许有人会担心UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL
数据库表描述

数据库表描述全文共四篇示例,供读者参考第一篇示例:数据库表是数据库系统中的基本组成单元,用来存储特定类型的数据。
它由行和列组成,行代表数据记录,列代表数据属性。
在数据库设计中,表的结构和字段类型需要经过精心设计,以确保数据的存储和检索效率。
本文将探讨数据库表的描述和设计方法。
一、数据库表的描述1. 表名:数据库表需要有一个唯一的名称来区分不同的表。
表名应该简洁明了,能够清晰地表达表所存储的数据类型。
一般来说,表名采用复数形式,并使用下划线或驼峰命名规则。
2. 字段(列):数据库表由多个字段组成,每个字段代表数据的一个属性。
字段的命名应该具有描述性,能够清晰地表达该字段存储的数据内容。
常见的字段类型包括整型、字符型、日期型等。
3. 数据类型:字段的数据类型决定了字段可以存储的数据范围和格式。
常见的数据类型包括整型(INT)、字符型(VARCHAR)、日期型(DATE)等。
选择合适的数据类型可以提高数据库的存储效率和数据完整性。
4. 主键:主键是表中用来唯一标识每条记录的字段,通常是一个或多个字段的组合。
主键的值必须唯一且不能为空,可以通过主键索引来加快数据检索速度。
主键的选择应该遵循唯一性和稳定性原则。
5. 外键:外键是表与表之间建立关联关系的依据。
外键是指在一个表中存在的另一个表的主键,用来确保数据的一致性和完整性。
外键约束可以在数据库设计时设置,以确保引用表的数据不会出现错误或不一致。
6. 索引:索引是一种提高数据检索效率的数据结构,可以加速查询操作。
在数据库表中设置适当的索引可以减少搜索时间,并提高数据库的性能。
常见的索引类型包括主键索引、唯一索引、组合索引等。
7. 约束:约束是用来确保数据完整性和一致性的规则。
常见的约束包括主键约束、唯一约束、外键约束、默认值约束等。
在设计数据库表时,应该根据业务需求和数据关系来设置适当的约束。
二、数据库表的设计方法1. 标识表的对象:在设计数据库表时,首先需要确定要存储的数据对象和关系,然后根据需求来设计表的结构和字段。
SQL中的主键和外键

主键与外键一、什么是主键、外键:关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以学号和课程号的属性组是一个主键成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键同理成绩表中的课程号是课程表的外键定义主键和外键主要是为了维护关系数据库的完整性,总结一下:主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别收藏聚集索引和非聚集索引的区别?聚集索引一定是唯一索引。
但唯一索引不一定是聚集索引。
聚集索引,在索引页里直接存放数据,而非聚集索引在索引页里存放的是索引,这些索引指向专门的数据页的数据。
三、数据库中主键和外键的设计原则主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。
主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。
必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。
而主键和外键的结构是这个设计过程的症结所在。
一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的。
主键:关系数据库依赖于主键---它是数据库物理模式的基石。
主键在物理层面上只有两个用途:1. 惟一地标识一行。
指出主键和外键用的符号

指出主键和外键用的符号
主键一般用符号“PK”表示,代表“primary key”;外键一般用符号“FK”表示,代表“foreign key”。
在数据库设计中,主键和外
键通常作为表之间建立关系的重要依据。
主键:
主键是一种用于唯一标识数据表中每条记录的列或一组列。
它的作用是保证表中数据的唯一性和完整性,防止出现重复或错误的数据。
在一个表中,只能定义一个主键,它不能为NULL。
常见的主键类型有自增长整数,GUID(全局唯一标识符)等。
外键:
外键是一种用于连接两个或多个数据表的列。
它指向另一张表的主键,用于维护表之间的关系,以保证数据之间的完整性和一致性。
外键列通常需要在两个表中使用相同的数据类型和长度,并且不能为NULL。
当使用外键时,需要定义它所关联的表、字段名称和删除/更新时的操作规则等信息。
参考内容:
- 「数据库设计基础-主键和外键」
- 「数据库索引设计:主键、外键、唯一索引」
- 「MySQL 初学日记(四)主键和外键」。
数据库中的主键与外键的关系,通俗易懂

数据库中的主键与外键的关系,通俗易懂在设计关系型数据库时,主键和外键是两个非常重要的概念。
主键和外键之间有密切的关系,它们在数据库中起着至关重要的作用。
本文将介绍主键和外键及其之间的关系,旨在让读者更好地理解这些概念。
一、主键的定义主键是指在关系数据库中唯一标识一条记录的字段或一组字段。
它能够保证数据库表中每个元素的唯一性,即每个元素都有其独特的主键值。
主键通常包括表中的一个或多个列,能够帮助我们更快速地搜索、更新、删除数据。
例如,在一个存储学生信息的表中,每个学生都有唯一的学号,因此可以将学号设为主键。
二、外键的定义外键是指在关系数据库中链接两个表之间关系的一列或多列。
它指向另一个表的主键,并且其值必须与那个主键相对应。
外键可用于保证数据完整性,例如在一个课程表和学生信息表中,课程表中可以使用学生信息表的学号列作为外键,以表现学生和其所选课程之间的关系。
三、主键和外键的关系在关系型数据库中,主键和外键之间的关系非常密切。
通过主键和外键的链接,我们可以建立不同表之间的关系,实现数据的连接和共享。
具体地说,主键和外键之间可以建立如下关系:1.主键可以作为外键的来源在关系型数据库中,可以将一个表的主键列引用另一个表的主键,以此建立两个表之间的关系。
这是一种非常常见的操作,例如在一个数据仓库中,可能有多个维度表与事实表共同工作,维度表中的主键被用作事实表的外键。
2.外键引用主键外键是通过引用另一个表的主键来建立的。
当在外键上插入新值时,系统会检查该值是否存在于关联的主键中。
如果值不存在,则插入操作将失败,从而保证了数据表之间的关联性和完整性。
3.主键和外键可以形成复合键在有些情况下,一个表不仅有一个主键,还有多个列,可以用这些列来联合参加主键的建立,这就是复合键。
同样,一个外键可以由多列来共同构成。
复合键的优势在于提供更严格的数据完整性约束,防止了重复数据和非法数据的产生。
总之,主键和外键是关系型数据库设计中最基本的概念之一。
主键和外键的作用

主键和外键的作用1.主键的作用:主键是一种用于唯一标识表中每一行记录的字段或字段组合。
主键具有以下几个作用:1.1唯一标识记录:主键字段的值在表中必须是唯一的,不可重复。
通过主键,可以在表中快速准确地定位和识别特定的记录。
1.2确保数据完整性:主键的存在可以确保数据的完整性。
每一行记录都必须有一个主键值,如果一些记录没有主键值,则违反了数据完整性的原则。
主键可以避免数据的冗余和重复,保证数据的一致性。
1.3帮助建立表之间的关系:主键可以用来建立表与表之间的关联关系。
在多表查询或者数据检索时,可以通过主键关联两个或多个表的记录,实现表之间的数据一致性和准确性。
1.4作为外键的参照对象:主键可以被其他表中的字段引用作为外键,用于建立表之间的关联关系。
在外键关系中,主键扮演着被引用的角色,提供数据一致性和数据完整性的保证。
2.外键的作用:外键是一种存在于一个表中,但是指向其他表中主键的字段。
外键的作用如下:2.1建立表之间的关系:外键可以用来建立表与表之间的关联关系。
通过外键,可以将多个表中的数据关联起来,为数据库的设计提供了一种有效的方式。
2.2提供数据一致性和完整性的保证:通过外键,在多表操作或者数据检索时,可以确保数据的一致性和完整性。
外键可以限制在一个表中插入、更新或删除数据的操作,保证了数据的准确性和一致性。
2.3实现数据级联操作:外键可以实现数据级联操作。
当主表中的记录被删除或者更新时,通过外键的约束关系,会自动触发对应的从表中的记录的删除或更新操作,保证数据的完整性和一致性。
2.4处理表之间的关系:外键可以处理表之间的关系,如一对多关系、多对多关系等。
通过外键,可以实现表之间的连接、关联和查询,提供了数据的灵活性和可扩展性。
综上所述,主键和外键在关系数据库中发挥着重要的作用,不仅可以确保数据的完整性和一致性,还可以建立表与表之间的关联关系。
主键用于唯一标识记录,保证数据的完整性和准确性,同时用作外键的参照对象。
数据库键的概念

数据库键的概念数据库键是数据库中用于唯一标识和索引数据记录的一种机制。
它可以帮助数据库系统快速定位、访问和操作数据。
下面将对数据库键的概念进行详细解释。
1. 什么是数据库键数据库键是数据库表中用于唯一标识每条记录的一列或一组列。
它们具有唯一性,即每个键值都是唯一的,用于在数据库中区分不同的数据记录。
数据库系统使用键来进行数据的查找、排序和关联。
2. 主键(Primary Key)主键是数据库表中的一列或一组列,用于唯一标识每条记录。
主键的值不能重复,而且不能为空值。
主键可以由一列或多列组成,称为复合主键。
主键的作用是保证数据的完整性,防止重复和不一致的数据记录。
例如,一个用户表的主键可以是用户ID列。
3. 外键(Foreign Key)外键是数据库表中的一列,用于建立表与表之间的关联关系。
外键引用了另一个表的主键,将两个表联系在一起。
外键的作用是维护表与表之间的数据一致性,并实现数据的关联查询。
例如,一个订单表中的外键可以引用一个用户表中的主键,表示订单是由哪个用户所创建的。
4. 唯一键(Unique Key)唯一键是数据库表中的一列或一组列,用于确保每个键值都是唯一的,但允许空值。
与主键不同,唯一键允许有多个空值。
唯一键的作用是防止出现重复的数据记录。
例如,一个邮箱表中的唯一键可以是邮箱地址列,确保每个邮箱地址只能出现一次。
5. 索引(Index)索引是一种特殊的数据结构,用于提高数据库的查询效率。
它是基于数据库键创建的,可以加快数据的查找和排序。
索引通常包含键的值和指向数据记录的指针。
数据库系统使用索引来快速定位需要查询的数据记录,减少数据扫描的时间。
例如,一个电话号码列可以创建一个索引,加快根据电话号码查询用户信息的速度。
总结起来,数据库键是用于唯一标识和索引数据记录的一种机制。
主键用于唯一标识记录,外键用于建立表与表之间的关联关系,唯一键用于确保键值的唯一性,索引用于加快数据的查找和排序。
SQL的主键和外键的作用

SQL的主键和外键的作用首先,主键是一列或一组列,其作用是唯一地标识一个表中的每一条记录。
它具有以下作用:1.数据唯一性约束:主键保证表中的每条记录具有唯一的标识,确保了数据的唯一性。
2.快速数据访问:通过主键,可以快速定位到表中的其中一条记录,提高数据的访问速度。
3.定义表之间的关系:在表之间建立关联时,主键作为外键的参照,起到了关联的作用。
4.提供索引:主键通常会自动创建一个索引,加快数据查找和排序。
主键有以下几种类型:1.单字段主键:一个表中只有一个字段作为主键。
2.复合主键:一个表中多个字段组合起来作为主键,确保组合字段的唯一性。
3.自增主键:主键的值会自动递增,常用于自动生成唯一标识符。
其次,外键是一个或多个表中的列,它建立了表之间的关联关系。
外键所在的表称为子表,参照外键的表称为父表。
1.建立表之间的关联:外键通过关联表之间的共同数据,建立了表与表之间的关联关系。
这种关联关系可以是一对一、一对多或多对多的关系。
2.数据完整性约束:外键保证在子表中如果存在外键,则在父表中必须存在相对应的值。
它确保了数据的完整性和一致性,防止出现孤立的记录。
3.级联更新与删除:在设定外键关联时,可以设置级联更新与删除。
当父表的记录被更新或删除时,所有相关的子表记录也会更新或删除,确保数据的一致性。
4.查询优化:外键可以用于连接两个或多个表,进行关联查询,提高查询效率。
需要注意的是,外键并不一定要与主键建立关联,它可以与任意唯一的键或索引字段建立关联。
此外,外键的使用还需要满足一些条件,如被关联的字段必须是一个已经定义了唯一性约束的字段。
在实际的数据库设计和应用中,主键和外键都被广泛地运用。
通过使用主键和外键,可以建立起复杂的数据模型,保证数据的完整性和一致性,并实现不同表之间的关联查询。
这在数据库管理和数据处理中起着至关重要的作用。
数据库设计中的主键和外键使用准则(八)

数据库设计中的主键和外键使用准则在数据库设计中,主键和外键是两个重要的概念。
它们用于建立数据表之间的关系,确保数据的完整性和一致性。
然而,在实际的设计过程中,很多人在使用主键和外键时存在一些困惑和误解。
本文将探讨主键和外键的使用准则,帮助读者更好地理解和应用它们。
1. 主键主键是用于唯一标识数据表中的每一行记录的字段或字段组合。
它具有以下几个特点:(1)主键的值在整个数据表中必须是唯一的,不能重复。
(2)主键的值不能为空,即不能为NULL。
(3)主键的值是不可变的,一旦确定就不能再修改。
在选择主键时,应注意以下几点:(1)选择唯一标识一行记录的字段或字段组合作为主键。
(2)尽量选择较短的字段作为主键,可以提高查询效率。
(3)避免选择经常变化的字段作为主键,这样可以减少更新操作的开销。
(4)考虑使用自增长字段作为主键,可以简化插入操作。
(5)不要使用业务相关的字段作为主键,以防止将来需求变化导致主键变化。
2. 外键外键用于建立不同数据表之间的关系,确保数据之间的一致性。
它具有以下几个特点:(1)外键是一个指向另一个数据表主键的字段。
(2)外键的值可以为NULL,表示该记录与其他记录没有关联。
(3)外键的值必须是在被关联表的主键值中存在的。
在使用外键时,应注意以下几点:(1)外键的命名应该具有描述性,清楚表示它与所关联表的关系。
(2)尽量限制外键字段的数据类型与长度与所关联表主键字段一致,以避免数据类型不匹配的错误。
(3)在创建外键时,应设定合适的级联操作,如级联更新或级联删除,以确保关联关系的完整性。
(4)外键的使用应尽量遵循数据库设计规范,避免滥用或误用。
3. 主键与外键的关系主键和外键是数据库设计中密不可分的概念。
它们之间的关系可以总结为以下几点:(1)主键可以作为外键的参照对象,即一个数据表的主键可以作为其他表的外键。
(2)外键必须引用主键,确保引用的数据是有效的。
(3)外键的引用关系可以建立多对一、一对一、多对多等多种关系。
SQL的主键和外键的作用

SQL的主键和外键约束SQL的主键和外键的作用:外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:学生表(学号,姓名,性别,班级)其中每个学生的学号是唯一的,学号就是一个主键;课程表(课程编号,课程名,学分)其中课程编号是唯一的,课程编号就是一个主键;成绩表(学号,课程号,成绩)成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以,学号和课程号的属性组是一个主键。
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键;同理,成绩表中的课程号是课程表的外键。
定义主键和外键主要是为了维护关系数据库的完整性,总结一下:一、主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。
身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。
是能确定另一张表记录的字段,用于保持数据的一致性。
比如,A 表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、主键、外键和索引的区别定义:主键--唯一标识一条记录,不能有重复的,不允许为空外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值索引--该字段没有重复值,但可以有一个空值作用:主键--用来保证数据完整性外键--用来和其他表建立联系用的索引--是提高查询排序的速度个数:主键--主键只能有一个外键--一个表可以有多个外键索引--一个表可以有多个唯一索引创建SQL的主键和外键约束的方法:create table Student --建表格式:create table 自定义的表名(--字段名一般为有一定意义的英文StudentName nvarchar(15),-- 格式:字段名类型()括号里面的是允许输入的长度StudentAge int,--int型的后面不需要接长度StudentSex nvarchar(2)--最后一个字段后面不要逗号)--在创建表时就可以对字段加上约束:create table Student(StudentNo int PRIMARY KEY IDENTITY(1,1),--加主键约束,还有标识列属性(两者构成实体完整性)StudentName nvarchar(15)not null,--加非空约束,不加"not null" 默认为:可以为空StudentSchool text(20)FOREIGN KEY REFERENCES SchoolTable(SchoolName) ,--加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)StudentAge int DEFAULT((0)),--加默认值约束StudentSex nvarchar(2)CHECK(StudentSex=N'男'or StudentSex=N'女')--加检查约束,格式:check (条件表达式))--如果在表创建好了以后再加约束,则格式分别为:-- 主键:alter table表名add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名primary key(字段名)--字段名同上--唯一约束:alter table表名add constraint UQ_字段名unique(字段名)--外键约束:alter table表名add constraint FK_字段名--"FK"为外键的缩写foreign key(字段名)references关联的表名(关联的字段名)--注意'关联的表名'和'关联的字段名'alter table表A add constraint FK_B foreign key(ticket_no)references表B(ticket_no)alter table表A add constraint FK_C foreign key(person_no)references表C(person_no)alter table成绩表add constraintFK_StudentNo foreign key (StudentNo)references Student (StudentNo) ON UPDATE CASCADE ON DELETE CASCADE级联更新,级联删除,这样在删除主表Student时,成绩表中该学生的所有成绩都会删除。
SQL的主键和外键

SQL的主键和外键SQL的主键和外键的作⽤:外键取值规则:空值或参照的主键值。
(1)插⼊⾮空值时,如果主键表中没有这个值,则不能插⼊。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录⼀起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执⾏的选择。
简⽽⾔之,SQL的主键和外键就是起约束作⽤。
关系型数据库中的⼀条记录中有若⼲个属性,若其中某⼀个属性组(注意是组)能唯⼀标识⼀条记录,该属性组就可以成为⼀个主键。
⽐如:学⽣表(学号,姓名,性别,班级)其中每个学⽣的学号是唯⼀的,学号就是⼀个主键;课程表(课程编号,课程名,学分)其中课程编号是唯⼀的,课程编号就是⼀个主键;成绩表(学号,课程号,成绩)成绩表中单⼀⼀个属性⽆法唯⼀标识⼀条记录,学号和课程号的组合才可以唯⼀标识⼀条记录,所以,学号和课程号的属性组是⼀个主键。
成绩表中的学号不是成绩表的主键,但它和学⽣表中的学号相对应,并且学⽣表中的学号是学⽣表的主键,则称成绩表中的学号是学⽣表的外键;同理,成绩表中的课程号是课程表的外键。
定义主键和外键主要是为了维护关系数据库的完整性,总结⼀下:⼀、主键是能确定⼀条记录的唯⼀标识,⽐如,⼀条记录包括⾝份正号,姓名,年龄。
⾝份证号是唯⼀能确定你这个⼈的,其他都可能有重复,所以,⾝份证号是主键。
外键⽤于与另⼀张表的关联。
是能确定另⼀张表记录的字段,⽤于保持数据的⼀致性。
⽐如,A表中的⼀个字段,是B表的主键,那他就可以是A表的外键。
⼆、主键、外键和索引的区别定义:主键--唯⼀标识⼀条记录,不能有重复的,不允许为空外键--表的外键是另⼀表的主键, 外键可以有重复的, 可以是空值索引--该字段没有重复值,但可以有⼀个空值作⽤:主键--⽤来保证数据完整性外键--⽤来和其他表建⽴联系⽤的索引--是提⾼查询排序的速度个数:主键--主键只能有⼀个外键--⼀个表可以有多个外键索引--⼀个表可以有多个唯⼀索引创建SQL的主键和外键约束的⽅法:create table Student --建表格式:create table ⾃定义的表名( --字段名⼀般为有⼀定意义的英⽂StudentName nvarchar(15), -- 格式:字段名类型()括号⾥⾯的是允许输⼊的长度StudentAge int, --int型的后⾯不需要接长度StudentSex nvarchar(2) --最后⼀个字段后⾯不要逗号)--在创建表时就可以对字段加上约束:create table Student(StudentNo int PRIMARY KEY IDENTITY(1,1), --加主键约束,还有标识列属性(两者构成实体完整性)StudentName nvarchar(15) not null, --加⾮空约束,不加"not null" 默认为:可以为空StudentSchool text(20) FOREIGN KEY REFERENCES SchoolTable(SchoolName), --加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)StudentAge int DEFAULT ((0)), --加默认值约束StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'⼥') --加检查约束,格式:check (条件表达式))--如果在表创建好了以后再加约束,则格式分别为:-- 主键:alter table 表名add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK_字段名'就为约束名primary key (字段名) --字段名同上--唯⼀约束:alter table 表名add constraint UQ_字段名unique (字段名)--外键约束:alter table 表名add constraint FK_字段名--"FK"为外键的缩写foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'alter table 表A add constraint FK_B foreign key (ticket_no) references 表B(ticket_no)alter table 表A add constraint FK_C foreign key (person_no) references 表C(person_no)alter table 成绩表 add constraint FK_StudentNo foreign key (StudentNo) references Student (StudentNo) ON UPDATE CASCADE ON DELETE CASCADE级联更新,级联删除,这样在删除主表Student时,成绩表中该学⽣的所有成绩都会删除。
数据库主键和外键的设计原则与应用

数据库主键和外键的设计原则与应用数据库是现代信息系统中不可或缺的组成部分,它承载着大量的数据和信息。
而数据库设计中最基本的概念之一就是主键和外键。
本文将重点探讨数据库主键和外键的设计原则与应用,并介绍它们在数据库管理中的重要作用。
一、主键的设计原则与应用1. 主键的定义:主键是唯一标识数据库表中每一条记录的字段或字段组合。
主键的值在表中必须唯一,不能重复,并且不能为空。
2. 主键的设计原则:2.1. 唯一性:主键字段的值在整个表中必须唯一。
2.2. 稳定性:主键字段的值不能随意更改,以保持主键的稳定性。
2.3. 简洁性:主键字段应该选择一个简洁的字段或字段组合,以提高查询效率和数据存储的效果。
2.4. 简单性:主键字段的设计应尽量简单,避免过多的复杂操作。
3. 主键的应用:3.1. 唯一标识每一条记录:主键字段用于唯一标识数据库表中的每一条记录,便于查询和操作特定的数据。
3.2. 加速查询速度:主键字段的唯一性可以帮助数据库引擎快速定位和检索数据,提高查询效率。
3.3. 保证数据完整性:主键的要求确保了每一条记录都必须具有唯一值,从而保证了数据的完整性和准确性。
二、外键的设计原则与应用1. 外键的定义:外键是连接两个表的一个字段,它定义了一种从一个表到另一个表的引用关系。
外键建立在与它相关联的主键之上。
2. 外键的设计原则:2.1. 引用约束:外键字段的值必须是被引用表中的主键值,或者为空值。
2.2. 删除和更新约束:外键字段所引用的主键值发生改变时,可以选择级联更新或级联删除等约束动作。
2.3. 一致性维护:外键关系的建立和维护要保持一致性,确保被引用表中的主键值的稳定性。
2.4. 索引创建:对外键字段建立索引,以提高查询效率。
3. 外键的应用:3.1. 数据关联性维护:外键建立了不同表之间的关联关系,方便进行数据的关联和查询操作。
3.2. 数据一致性保证:外键约束可以保证多个表之间的数据一致性,防止不合法的引用和数据错误。
SQL重要知识点梳理!

SQL重要知识点梳理!MySQL数据库-基础知识1.说说主键、外键、超键、候选键的差别并举例∙超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键。
∙候选键(candidate key):不含有多余属性的超键称为候选键。
也就是在候选键中,若再删除属性,就不是键了!∙主键(primary key):用户选作元组标识的一个候选键程序主键。
∙外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R 中称为外键。
举个例子,对于学生信息(学号身份证号性别年龄身高体重宿舍号)和宿舍信息(宿舍号楼号):∙超键:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号性别)、R2(身份证号身高)、R3(学号身份证号)等等都可以称为超键!∙候选键:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键,又比如R1中学号这一个属性就可以唯一标识元组了,而有没有性别这一属性对是否唯一标识元组没有任何的影响!∙主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了!∙外键:宿舍号就是学生信息表的外键。
2.为什么一般用自增列作为主键?∙如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页。
∙如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新记录都要被插到现有索引页的中间某个位置,此时MySQL不得不为了将新记录插到合适位置而移动数据,这增加了很多开销,同时会增加大量的碎片。
3.触发器的作用?∙安全性,可以基于数据库的值使用户具有操作数据库的某种权利。
∙审计,可以跟踪用户对数据库的操作。
∙实现复杂的非标准的数据库相关完整性规则,触发器可以对数据库中相关的表进行连环更新。
∙触发器能够拒绝或回退那些破坏相关完整性的变化,取消试图进行数据更新的事务。
主键如何与其他表建立关联?

主键如何与其他表建立关联?一、什么是主键?主键是一种用于唯一标识数据表中每一条记录的字段。
它具有唯一性、非空性和稳定性的特征,用于保证数据表中每一行的唯一性和数据的完整性。
主键一般与其他表建立关联,用于建立数据表之间的链接。
二、主键与外键的区别主键和外键是数据库中两个重要的概念,虽然两者都是用于建立表与表之间的关联关系,但有着本质的区别。
1. 主键是唯一标识数据表中每一行记录的字段,而外键是用于与其他表建立关联的字段。
2. 主键是保证数据表的完整性和唯一性的基础,而外键是建立表之间关联的桥梁。
3. 主键可以是表中的任意字段,但外键必须是其他表中的主键字段。
三、建立主键与外键的步骤建立主键与外键的过程相对简单,下面是具体步骤。
1. 确定主键字段:在设计数据表时,需要选择一个或多个字段作为主键字段,并为其添加主键约束。
2. 建立外键关系:在需要与其他表建立关联的字段中,选择外键字段,并为其添加外键约束。
3. 创建关联:通过关联主键和外键字段,建立表与表之间的关联关系。
四、主键与外键的作用主键与外键在数据库中起到了重要的作用。
1. 实现数据表之间的关联:通过主键与外键,可以实现不同数据表之间的链接与关联,方便进行跨表查询和数据操作。
2. 确保数据完整性和一致性:主键保证数据表中每一行的唯一性和完整性,外键保证了数据表之间的一致性。
3. 提高查询效率:通过合理使用主键和外键,可以提高数据库的查询效率,减少数据冗余。
五、常见问题与解决方案在建立主键和外键关系时,可能会遇到一些问题,下面是一些常见问题及解决方案。
1. 主键冲突:当插入一条记录时,如果主键发生冲突,应该如何处理?可以选择使用自增主键,或者重新设计主键字段。
2. 外键引用异常:当删除或修改主表中的主键值时,会导致外键引用异常,应该如何处理?可以选择级联操作,或者手动处理外键引用关系。
3. 外键约束限制:外键约束会限制插入和更新操作,如何处理?可以选择暂时关闭外键约束,或者预先确保关联表中存在对应的主键值。
主键和外键有什么区别?

主键和外键有什么区别?一、主键的定义及作用1. 主键是指在关系数据库表中,用来唯一标识一个记录的字段或字段组合。
- 主键可以是单个字段,也可以是多个字段的组合,其目的是为了确保表中每条记录都具有唯一性。
- 主键可以用来与其他表建立关联关系。
2. 主键具有以下作用:- 主键保证了表中每条记录的唯一性,避免了数据冗余和重复。
- 主键是用来在表之间建立关联关系的重要依据。
二、外键的定义及作用1. 外键是指关系数据库表中的一个字段,它与其他表的主键建立了关联关系。
- 外键字段的值指向其他表的主键值,用来确保数据的完整性和一致性。
- 外键可以用来建立表与表之间的关系,实现数据的连接查询。
2. 外键具有以下作用:- 外键保证了表与表之间的数据完整性和一致性,避免了数据的不一致和错误。
- 外键可以用来进行表之间的连接查询,方便了数据的获取和分析。
三、主键与外键的区别1. 唯一性:- 主键具有唯一性约束,确保了表中每条记录的唯一性。
- 外键是引用其他表的主键,用来建立关联关系,不要求唯一性。
2. 数据完整性:- 主键用来保证表中记录的完整性和一致性。
- 外键用来保证表与表之间的数据完整性和一致性。
3. 查询功能:- 主键可以用来作为查询的条件或连接表之间的关键字段。
- 外键可以用来进行表之间的连接查询,方便了数据的获取和分析。
4. 数据类型:- 主键可以是任意数据类型。
- 外键的数据类型必须与被引用表的主键数据类型一致。
总结:主键和外键在关系数据库中扮演着不同的角色。
主键是用来唯一标识一个记录的字段,保证了表中每条记录的唯一性;外键是与其他表的主键建立关联关系的字段,用来保证表与表之间数据的完整性和一致性。
主键和外键在数据查询和建立关联关系方面具有不同的功能,但都可以通过在数据库中进行定义和约束来确保数据的准确性和一致性。
主键的名词解释

主键的名词解释数据库是现代信息系统中不可或缺的组成部分。
它用于存储和管理大量的数据,以便于后续的查询、分析和处理。
在数据库中,主键是一个非常重要的概念,它用于唯一标识一个数据表中的每一条记录。
本文将对主键进行详细的解释,探讨它的作用和使用方法。
一、主键的概念主键是数据库表中的一个或多个字段,用于唯一标识表中的每一条记录。
每个记录都必须具有唯一的主键值,而且主键值不能为空。
主键是表中的一个重要属性,它可以用来确保数据的唯一性和完整性。
在数据库中,主键往往是一个与业务实体相关的字段,如学生表的主键可以是学号,电子商务网站的主键可以是商品编号等。
二、主键的作用1. 确保数据的唯一性主键的一个主要作用是确保数据的唯一性。
通过设置主键,我们可以保证表中的每个记录都具有唯一的标识值。
这样,在插入新记录时,数据库会自动检查主键值是否已存在,如果存在则拒绝插入,从而避免了数据的重复和冲突。
2. 建立数据表之间的关系主键还可以用于建立不同数据表之间的关系。
通过在一个表中引用另一个表的主键,我们可以实现表与表之间的连接和查询。
这种关系被称为外键关系,是数据库设计中非常常见的一种关系类型。
外键通过引用其他表的主键,将不同的数据表联系起来,使得数据的操作和查询更加便捷和高效。
三、主键的使用方法1. 单一主键在大多数情况下,一个表只需要一个主键即可。
这种情况下,我们可以选择一个与业务实体相关的字段作为主键,并为该字段设置唯一性约束。
数据库会自动检查主键值的唯一性,确保每条记录都有一个唯一的标识。
2. 组合主键在一些复杂的数据表中,可能需要使用多个字段来唯一标识一条记录。
这种情况下,我们可以选择多个字段作为组合主键。
组合主键中的每个字段都可以为空,但是组合主键值的组合必须唯一。
通过使用组合主键,可以更加精确地标识和查找数据表中的记录。
四、主键的选择原则1. 唯一性主键必须具有唯一性,每条记录都必须有一个唯一的标识值。
这样可以保证数据的完整性和一致性。
数据库主键与外键

数据库主键与外键数据库主键(Primary Key)和外键(Foreign Key)是关系型数据库中重要的概念。
它们被用于建立不同表之间的联系,确保数据的完整性和一致性。
本文将对主键与外键进行详细的介绍和说明。
一、主键(Primary Key)主键是一种用来唯一标识数据库表中每条记录的字段或字段组合。
通过定义主键,可以确保表中的每条记录都有唯一的标识,并且不允许为空。
常见的主键类型包括自增长整数、全局唯一标识符(GUID)、唯一索引等。
主键的作用主要有以下几个方面:1. 数据唯一性:主键的值在整个表中必须是唯一的,这样可以避免重复数据的插入和更新。
2. 快速查找:主键字段通常会被数据库系统自动索引,这样可以提高数据的查询效率。
3. 表之间的关系建立:主键可以被其他表的外键引用,从而建立表与表之间的关系,实现数据的关联查询和数据完整性的约束。
二、外键(Foreign Key)外键是用来建立表与表之间关系的字段,它用于保持关联表数据的一致性和完整性。
外键是关系型数据库中的一个重要特性,通过定义外键,可以将两个或多个表之间的关系表示出来。
外键的特点如下:1. 关联两个表:外键建立在一个表中,引用另一个表的主键或唯一索引。
这样就实现了表与表之间的关联。
2. 数据完整性:外键关联了两个表,可以保持数据的一致性和完整性。
当主表中的数据发生改变时,从表中引用该主表数据的外键也将相应更新或删除。
3. 约束性:外键可以约束数据的插入和更新操作,避免不符合表关系的数据被插入。
通过使用外键,可以实现以下几个方面的功能:1. 查询关联数据:使用外键可以方便地查询和检索两个表之间相关联的数据。
2. 数据一致性:外键可以保持关联表数据的一致性,确保表之间的数据完整和正确。
3. 级联操作:通过设置外键的级联操作规则,可以自动更新或删除相关联表中的数据。
总结:主键和外键是关系型数据库中重要的概念,它们建立表与表之间的关联,确保数据的完整性和一致性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库主键和外键的作用
首先介绍一下什么是主键、什么是外键。
1 什么是主键外键
学生表(学号,姓名,性别,班级) 学号是一个主键
课程表(课程号,课程名,学分)课程号是一个主键
成绩表(学号,课程号,成绩)学号和课程号的属性组构成一个主键
成绩表中的学号不是成绩表的主键,不过是学生表的主键,成绩表的外键,同理课程号也是成绩表的外键
定义:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键
以一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表
2 外键的作用
外键用于保持数据一致性,完整性
主要目的是控制存储在外键表中的数据
3 主键的设计原则
1)主键应当是对用户没有意义的
2)主键应该是单列的,以提高连接和筛选操作的效率
复合键的使用通常出于两点考虑:
a)主键应当具有意义-----这为认为的破坏数据库提供了方便
b)在描述多对多关系的连接表中可以使用两个外部键作为主键------该表可能成为其他从表的主表,并成为从表的主键的一部分,使得之后的从表包含更多的列
3)永远不要更新主键
4)主键不应该包含动态变化的数据(时间戳等)
5)主键应当由计算机自动生成
4 数据库主键选取策略
建立数据库的时候,需要为每张表指定一个主键(一个表只能有一个主键,但是可以有多个候选索引)
常见的主键选取方式有:
1)自动增长型字段
自动增长型主键会省略很多繁琐的工作,但在数据缓冲模式下,不能预先填写主键与外键的值
Order(OrderID,OrderDate) //主键OrderID是自动增长型字段
OrderDetail(OrderID,LineNum,ProductID,Price)
如果要在Order表中插入一条记录,在OrderDetail表中插入若干条记录,为了能在OrderDetail表中插入正确的OrderID字段,必须先更新Order表以获得系统系统分配的OrderID,但是为了确保数据一致性,Order表和OrderDetail表必须在事务保护下同时进行更新,这显然是矛盾的
除此之外,当需要在多个数据库之间进行数据复制时,自动增长型字段可能造成主键冲突
2)手动增长型字段
3)使用UniqueIdentifier SQL Server提供一个UniqueIdentifier数据类型(16字节),并提供一个生成函数NEWID(),生成一个唯一的UniqueIdentifier
4)使用COMB类型
保留UniqueIdentifier的前10字节,后6字节表示生成时间
---------------------------------------------------------------------------------------------------------------------- 1 外键
外键(FK)是用于建立或加强两个表数据之间的链接的一列或多列。
通过将表中主键值的一列或多列添加到另一个表中,可创建两个表之间的连接,这个列就成为第二个表的外键
FK约束的目的是控制存储在外表中的数据,同时可以控制对主键表中数据的修改
例如:publishers表中记录出版商的信息,titles表中记录书的信息,如果在publishers 的表中删除一个出版商,而这个出版商的ID在titles表中记录书的信息时被使用了,则这两个表之间关联的完整性将被破坏,即titles表中该出版商的书籍因为与publisher表中的数据没有链接而变的孤立。
FK约束可以防止这种情况的发生,如果主键表中数据的更改使得与外键表中数据的链接失效,则这种更改是不能实现的;如果试图删除主键表中的行或试图修改主键值,而该主键值与另一个表的FK约束值相关,则该操作不可实现。
若要成功的更改或删除FK约束的行,可以现在外键表中删除外键数据或更改外键数据,然后将外键连接到不同的主键数据上去
外键主要是用来控制数据库中的数据完整性的,当对一个表的数据进行操作时,和他有关联的一个表或多个表的数据能够同时发生改变
例子:
A(a,b) :a为主键,b为外键(来自于B.b)
B(b,c,d) :b为主键
A中的b字段要么为空,要么为B表中存在的b值。