定义:
主键(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
FROM syscolumns,systypes
WHERE AND ('Student')
--单独查询表递增字段
SELECT [name] FROM syscolumns
WHERE id= OBJECT_ID(N'Student') AND COLUMNPROPERTY(id,name,'IsIdentity')=1
--获取表主外键约束
EXEC sp_helpconstraint'StuResults'
--查询表主键外键信息
SELECT objectId,OBJECT_NAME)tableName,
FROM sysobjects INNER JOIN sysconstraints
ON ('C','F','PK','UQ','D')
AND =sysconstraints.constid
LEFT OUTER JOIN syscolumns ON
WHERE OBJECT_NAME)='StuResults'
号外:
候选键(Candidate Key):能唯一标识表(关系)中行(元组)的列(属性),则称该属性为候选键,也称 候选关键字 或 候选码;由此来看候选键可以不只一个,还看一看得出的就是主键同时它也是候选键。