一、定义
主键:在数据表中可以作为唯一标识的字段,不能有重复的,不允许为空。
如:学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号
就是一个主键 ;
外键:表的外键是另一表的主键用于保持数据的一致性, 外键可以有重复的, 可以是空值。
如:A表中的一个字段,是B表的主键,那他就可以是A表的外键。
二、 主键、外键和索引的区别
主键、外键和索引的区别?
|
主键 |
外键 |
索引 |
定义: |
唯一标识一条记录,不能有重复的,不允许为空 |
表的外键是另一表的主键, 外键可以有重复的, 可以是空值 |
该字段没有重复值,但可以有一个空值 |
作用: |
用来保证数据完整性 |
用来和其他表建立联系用的 |
是提高查询排序的速度 |
个数: |
主键只能有一个 |
一个表可以有多个外键 |
一个表可以有多个惟一索引 |
数据库的约束有三种,实体完整性约束、参照完整性约束和用户自定义约束。
1.实体完整性约束指的是主键不能为空,如果主键为空了还怎么唯一标识一条记录。
2.参照完整性约束,即外键的约束,某一外键的值必须在它引用的主键字段中存在。如,学生表中专业编号属性的值,必须都存于专业信息表中的专业编号属性中。想一想也就明白了,一个学生(大学生)怎么可能属于一个不存在的专业。
3.用户自定义完整性约束,指的是一些用户自己设定的约束,例如字段是否可以为空,字段值的取值范围(如:人的性别只能取男、女)。
实例:
一表的主键, 外键可以有重复
实例:
createtable Student
(
StudentNointPRIMARY KEY IDENTITY(1,1),--加主键约束,还有标识列属性(两者构成实体完整性)
StudentNamenvarchar(15)notnull, --加非空约束,不加"not null" 默认为:可以为空
StudentSchooltext(20)FOREIGNKEY REFERENCES SchoolTable(SchoolName),--加外键约束,格式:FOREIGN KEY REFERENCES 关联的表名(字段名)
StudentAgeintDEFAULT ((0)),--加默认值约束
StudentSexnvarchar(2)CHECK