sql主键和外键的关系(数据库中的主键与外键的关系,通俗易懂)

sql主键和外键的关系(数据库中的主键与外键的关系,通俗易懂)

定义:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论