龙空技术网

SQL关系型数据库主键与外键的含义及用法(干货)

执酒仗剑行天下 403

前言:

目前姐妹们对“sqlserver外键”都比较看重,你们都想要分析一些“sqlserver外键”的相关文章。那么小编在网络上汇集了一些对于“sqlserver外键””的相关知识,希望姐妹们能喜欢,姐妹们快快来了解一下吧!

定义:

主键(primary key):一张表(关系)的一个列(属性)或多个列可以作为主键,但是前提是让这个列作主键,这个列就能保证该列下的各个行(元组)的值不能相同。

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

注意事项:

一个表只能包含一个主键约束。

主键不能超过 16 列且总密钥长度不能超过 900 个字节。

由主键约束生成的索引不会使表中的索引数超过 999 个非聚集索引和 1 个聚集索引。

如果没有为主键约束指定聚集或非聚集索引,并且表中没有聚集索引,则使用聚集索引。

在主键约束中定义的所有列都必须定义为不为 Null。 如果没有指定为 Null 性,则参与主键约束的所有列的为 Null 性都将设置为不为 Null。

如果在 CLR 用户定义类型的列中定义主键,则该类型的实现必须支持二进制排序。

SQL的主键和外键的作用:

主键和外键就是起约束作用。维护关系数据库的完整性

主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

创建SQL的主键和外键约束的方法:

一,如果表首次创建

CREAT TABLE 表A

(

列A1 int PRIMARY KEY IDENTITY(1,1),--加主键约束,标识列属性(两者构成实体完整性)

列A2 nvarchar(15) not null,--加非空约束,(不加"not null"默认为:可以为空)

列A3 text(20) FOREIGN KEY REFERENCES 表B (列B1),--加外键约束,格式:FOREIGN KEY REFERENCES关联的表名(字段名)

列A4 int DEFAULT ((0)),--加默认值约束

列A5 nvarchar (2) CHECK(列A5= N 'on' or 列A5 = N 'off' )--加检查约束,格式:check (条件表达式)

)

二,对已经存在的表,增加约束:

--主键:

ALTER TABLE 表A

add constraint PK_列A1

primary key (列A1)

--唯一约束:

ALTER TABLE 表A

add constraint UQ_列A1

unique (列A1)

--外键约束:

ALTER TABLE 表B

add constraint FK_B1--"FK"为外键的缩写

foreign key (列B2) references 表A(列A1)

附送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.nameconstraintName,sysobjects.xtypeASconstraintType,syscolumns.nameAScolumnName

FROM sysobjects INNER JOIN sysconstraints

ON sysobjects.xtypein('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'

号外:

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

标签: #sqlserver外键 #sqlserver外键语句 #sqlserver外键设置 #sql server 设置外键 #sqlserver怎么设置外键