外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
简而言之,SQL的主键和外键就是起约束作用。
主键--唯一标识一条记录,不能有重复的,不允许为空
外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空值
索引--该字段没有重复值,但可以有一个空值
主键--用来保证数据完整性
外键--用来和其他表建立联系用的
索引--是提高查询排序的速度
主键--主键只能有一个
外键--一个表可以有多个外键
索引--一个表可以有多个唯一索引
use school
go
CREATE TABLE Student
(
StudentNo int PRIMARY KEY IDENTITY(1,1),
StudentName nvarchar(15) NOT NULL,
StudentAge int DEFAULT ((7)),
StudentSex nvarchar(2) CHECK(StudentSex=N'男' or StudentSex=N'女'),
StudentClass nvarchar(15)
)
CREATE TABLE Subject
(
SubjectNo INT PRIMARY KEY IDENTITY(1,1),
SubjectName NVARCHAR(15) NOT NULL
)
CREATE TABLE StuResults
(
SR_No INT PRIMARY KEY IDENTITY(1,1),
SR_StudentNo INT,
SR_SubjectNo INT,
SR_Score INT CHECK (SR_Score>=0 AND SR_Score<=120)
)
alter table StuResults
add constraint FK_StudentNo
foreign key (SR_StudentNo) references Student (StudentNo)
alter table StuResults
add constraint FK_Subject
foreign key (SR_SubjectNo) references Subject (SubjectNo)
go