`
dwphts520
  • 浏览: 28890 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

关于主键和外键的关系

 
阅读更多

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时,成绩表中该学生的所有成绩都会删除。

 

 

--检查约束:

alter table 表名

add constraint CK_字段名

check (条件表达式) --条件表达式中的条件用关系运算符连接

 

--默认值约束:

alter table 表名

add constraint DF_字段名

default '默认值' for 字段名--其中的'默认值'为你想要默认的值,注意'for'

 

--删除创建的约束:

alter table 表名

drop constraint 约束名--约束名为你前面创建的如:PK_字段这样的约束名

--注意:如果约束是在创建表的时候创建的,则不能用命令删除

--只能在'企业管理器'里面删除

 

 

 

 

 

-- 获取SqlServer中表结构

SELECT syscolumns.name,systypes.name,syscolumns.isnullable,

syscolumns.length

FROM syscolumns,systypes

WHERE syscolumns.xusertype = systypes.xusertype

AND syscolumns.id = OBJECT_ID('Student')

 

-- 单独查询表递增字段

SELECT [name] FROM syscolumns WHERE

id = OBJECT_ID(N'Student') AND COLUMNPROPERTY(id,name,'IsIdentity')=1

 

-- 获取表主外键约束

EXEC sp_helpconstraint 'StuResults'

 

 

-- 查询表主键外键信息

SELECT sysobjects.id objectId,OBJECT_NAME(sysobjects.parent_obj) tableName,

sysobjects.name constraintName, sysobjects.xtype AS constraintType,

syscolumns.name AS columnName

FROM sysobjects INNER JOIN sysconstraints

ON sysobjects.xtype in('C', 'F', 'PK', 'UQ', 'D')

AND sysobjects.id = sysconstraints.constid

LEFT OUTER JOIN syscolumns ON sysconstraints.id = syscolumns.id

WHERE OBJECT_NAME(sysobjects.parent_obj)='StuResults'

 

分享到:
评论

相关推荐

    数据主键和外键的错误总结

    ### 数据主键和外键的错误总结 #### 一、主键错误 主键作为数据库表中的关键元素,主要用于确保每一行数据的唯一性。它不仅有助于数据的完整性和一致性,还能提高数据库操作的效率。然而,在实际应用过程中,常常...

    主键和外键.doc

    主键和外键是构建有效的关系数据库的基础。合理的设计对数据库的性能和可用性至关重要。 1. **主键**: - 主键应当是对用户没有意义的,以避免用户对其产生误解。 - 主键应该是单列的,以提高连接和筛选操作的...

    关于关系型数据库基本知识(主键、外键、一对一、一对多、多对一等).docx

    例如,成绩表中的学号和课程号可以是外键,分别引用学生表和课程表的主键,这样就建立了表之间的关联,实现了数据的一致性。 索引是提高查询速度的手段,它创建在表的特定列上,可以是主键或非主键字段。索引没有...

    深入理解数据库关系:主键与外键的选择与应用

    主键和外键是数据库设计中不可或缺的部分。正确选择和使用它们可以确保数据的完整性、一致性和安全性。在实际开发中,应根据业务需求和数据模型仔细设计主键和外键,以实现最优的数据管理和性能。 本文通过详细解释...

    oracle表主键和外键的区别

    主键和外键都是Oracle等关系型数据库管理系统(RDBMS)中的重要概念。 **主键**是定义一个表中起主要作用的数据项,它确保这些数据项在表中的唯一性。主键的特性包括: 1. 唯一性:主键的值在表中必须是唯一的,不...

    数据完整性、主键和外键、数据类型

    ### 数据完整性、主键和外键、数据类型 #### 数据完整性 数据完整性是数据库设计中的一个核心概念,指的是确保数据库中的数据保持一致性和准确性。在实际应用中,数据完整性能够帮助我们防止非法或错误的数据被...

    SQL中的主键和外键.doc

    通过上述分析,我们可以看出主键和外键在关系型数据库中扮演着至关重要的角色,它们不仅是数据完整性的保障,也是实现复杂数据关系的基础。正确设计和使用主键及外键,可以大大提高数据库系统的性能和可靠性。

    主键与外键的创建

    在数据库设计中,主键和外键是两个关键概念,它们是关系数据库中确保数据完整性和一致性的核心机制。本文将深入探讨主键与外键的创建,帮助初学者更好地理解这两个概念。 **主键(Primary Key)**是用于唯一标识...

    SQL的主键和外键的作用.doc

    SQL的主键和外键是关系型数据库设计中的关键概念,它们对于确保数据的完整性和一致性至关重要。主键是用于唯一标识表中每一行记录的字段,而外键则是用于连接不同表之间的关联。 首先,主键的作用在于确保数据的...

    如何区分SQL数据库中的主键与外键

    在SQL数据库中,主键和外键是关系型数据库设计的核心概念,它们对于确保数据的完整性和一致性至关重要。主键是表中一个或一组字段,它们的值在该表内是唯一的,用来唯一标识一条记录。例如,在学生表中,学号可能是...

    24.Oracle的主键和外键1

    在数据库设计中,主键和外键是确保数据完整性和一致性的重要工具,特别是在Oracle这样的关系型数据库管理系统中。主键和外键的概念以及它们的作用对于理解数据库的结构和操作至关重要。 首先,主键是表的一个或多个...

    oracle_创建表空间、表、主键、外键、序列.docx

    **创建另一张表及主外键关系** 创建另一张表`Orders`,并定义主键: ```sql CREATE TABLE Orders( id VARCHAR(2) NOT NULL PRIMARY KEY, uuid VARCHAR2(10) NOT NULL, oName VARCHAR2(20) NOT NULL, oPrice ...

    oracle建表练习(主键外键)

    总结来说,通过本次练习,初学者不仅能够掌握Oracle数据库中创建表的基本语句,还能够了解到主键和外键在关系型数据库中的重要性,并且通过具体的实例,学会如何在实际操作中应用这些知识。这对于未来进行更复杂的...

    删除数据库的所有表、存储过程、主键、外键、索引等

    4. 外键:外键是表中的字段,引用另一个表的主键,用于建立两个表之间的关系。外键约束确保了数据的一致性和参照完整性。 5. 索引:索引是数据库为了加速查询而创建的一种数据结构。它使得数据检索更快,但会占用...

    MySQL 创建主键,外键和复合主键的语句

    在数据库设计中,主键和外键是关系型数据库中非常重要的概念,它们用于确保数据的完整性和一致性。本文将详细介绍如何在MySQL中创建主键、外键以及复合主键。 1. **创建主键** 主键是数据库表中一个或一组字段,其...

    数据库技术与应用 设置成绩表主键和外键约束-A学习任务书.doc

    在数据库设计中,主键和外键是两个关键的概念,它们用于确保数据的完整性和一致性。主键是一种特殊的唯一标识符,用于唯一地识别表中的每一行数据;而外键则是连接不同表之间的桥梁,它引用了另一个表的主键,以建立...

    Backend-Project-210114:使用主键和外键的“多对多”数据库关系

    使用主键和外键的“多对多”数据库关系。 该项目的目标是为一个通用的国际非政府组织创建一个完整的全栈项目的初始后端。 我们选择了亚洲,并将该非政府组织指定为亚洲非政府组织(ANGO)。 前端分为两个部分,即...

    oracle主键和外键[文].pdf

    在Oracle数据库中,主键和外键是关系型数据库中非常重要的概念,它们用于确保数据的一致性和完整性。主键是定义在一个表中用来唯一标识每一行的字段,而外键则是另一个表中的字段,它引用了主键来建立两个表之间的...

Global site tag (gtag.js) - Google Analytics