例3-15修改student表中的sname列为非空约束
altertablestudent
altercolumnsnamechar(16)notnull
例3-16在XSCJ数据库中创建student表,结构为(snochar(10),snamechar(6),ssexchar(2),sageint,sdeptchar(15)),其中sno为主键
CREATETABLEstudent
(
snochar(10)PRIMARYKEY,
snamechar(6),
ssexchar(2),
sageint,
sdeptchar(15)
)
例3-17在XSCJ数据库创建一个sc表,其结构是sc(snochar(10),cnochar(4),gradeint),其中主键为sno+cno
USEXSCJ
GO
createtablesc
(
snochar(10),
cnochar(4),
gradeint,
PRIMARYKEY(sno,cno)
)
例3-18 为XSCJ数据库中的数据表(course)添加课程号为主键约束,约束名为PK
altertablecourse
ADDCONSTRAINTPKPRIMARYKEY(cno)
例3-19 为XSCJ数据库中的student表和sc表之间建立外键约束,其中sc表中的sno为外键,参照student表中的sno
createtablesc
(
snochar(10)CONSTRAINTFK_snoFOREIGNKEYREFERENCESstudent(sno),
cnochar(4),
gradeint,
PRIMARYKEY(sno,cno)
)
例3-20为XSCJ数据库中的选课表sc中的课程号cno建立外键约束,该列值参照课程表的课程号cno
altertablesc
ADDCONSTRAINTS FKFOREIGNKEY(cno)REFERENCEScourse(cno)
例3-21创建student表时,为sname列创建唯一约束
createtablestudent
(
snochar(10)CONSTRAINTpk_snoPRIMARYKEY,
snamechar(6)CONSTRAINTUN_snameUNIQUE,
ssexchar(2),
sageint,
sdeptchar(15)
)
例3-22创建sc表时,限制grade列的值只能在-100之间
createtablesc
(
snochar(10)CONSTRAINTFK_snoFOREIGNKEYREFERENCESstudent(sno),
cnochar(4)CONSTRAINTFK_cnoFOREIGNKEYREFERENCEScourse(cno),
gradeintCHECK(grade>=0 andgrade<=100),
PRIMARYKEY(sno,cno)
)
例3-23创建student表时,ssex列只能取男或女,且默认值是男
createtablestudent
(
snochar(10)CONSTRAINTpk_snoPRIMARYKEY,
snamechar(6),
ssexchar(2)CHECK (ssex='男'orssex='女')DEFAULT'男',
sageint,
sdeptchar(15)
)
5.实验数据记录与整理:
(1)添加主键约束,在sc表中设置主键时遇到以下情况:
因为学号原本是允许空的,要修改学号这个字段是非空的才可以,课程号也是一样
进行正确的非空操作如下图:
这里容易出错的地方见下图:
注意修改非空的代码是alter table sc,而不是alter table student或者alter table course
(2)两把钥匙不是两个主键,而是两个合成一个主键
(3)在删除student表时遇到以下情况:
因为该对象有一个外键约束,student是一个主表,而sc表是一个从表和它相关联的,互相引用的所以不能删除。想删除必须先删除从表,然后再删除主表。所以应该先drop table sc 然后drop table student