例3-1
创建student(学生信息表),在数据库XSCJ中创建一个表student,它由学号sno,姓名sname,性别ssex,年龄sage,系部sdept五个属性组成。将学号设置成主键
USE XSCJ
CREATE TABLE student
(
sno char(10)PRIMARY KEY,
sname char(6),
ssex char(1),
sage int,
sdept char(15)
)
例3-2
创建课程信息表course,将课程号cno设置成主键
USE XSCJ
CREATE TABLE course
(
cno char(4) PRIMARY KEY,
cname char(20) NOT NULL,
credit int NOT NULL
)
例3-3
创建sc(学生选课信息表)
课程和学生是多对多的联系,这个表的主键要包括学号和课程两个字段
主键所在的表叫主表,外键所在的表叫从表,先要有主表才能有从表
USE XSCJ
CREATE TABLE sc
(
sno char(10) FOREIGN KEY(sno) REFERENCES student,
cno char(4) FOREIGN KEY(cno) REFERENCES COURSE,
grade int
)
例3-4
在student表中添加“入学时间”列,其数据类型为日期型
alter table student
add 入学时间 datetime
例3-5
将表student的sname的长度修改为8
alter table student
alter column sname char(8)
例3-6
将表student的sage列改为smallint型
alter table student
alter column sage smallint
例3-7
删除student 表
drop table student
课上练习
(1)修改student表中的sname为非空约束
alter table student
alter column sname char(8) not null
(2)删除字段,删除student中的入学时间那一列
alter table student
drop column 入学时间
例3-15 修改student表中的sname列为非空约束
alter table student
alter column sname char(16) not null
例3-16 在XSCJ数据库中创建student表,结构为(sno char(10),sname char(6),ssex char(2),sage int,sdept char(15)),其中sno为主键
CREATE TABLE student
(
sno char(10) PRIMARY KEY,
sname char(6),
ssex char(2),
sage int,
sdept char(15)
)
例3-17 在XSCJ数据库创建一个sc表,其结构是sc(sno char(10),cno char(4),grade int ),其中主键为sno+cno
USE XSCJ
GO
create table sc
(
sno char(10),
cno char(4),
grade int,
PRIMARY KEY(sno,cno)
)
例3-18 为XSCJ数据库中的数据表(course)添加课程号为主键约束,约束名为PK
alter table course
ADD CONSTRAINT PK PRIMARY KEY(cno)
例3-19 为XSCJ数据库中的student表和sc表之间建立外键约束,其中sc表中的sno为外键,参照student表中的sno
create table sc
(
sno char(10) CONSTRAINT FK_sno FOREIGN KEY REFERENCES student(sno),
cno char(4),
grade int,
PRIMARY KEY(sno,cno)
)
例3-20 为XSCJ数据库中的选课表sc中的课程号cno建立外键约束,该列值参照课程表的课程号cno
alter table sc
ADD CONSTRAINTS FK FOREIGN KEY(cno) REFERENCES course(cno)
例3-21 创建student表时,为sname列创建唯一约束
create table student
(
sno char(10) CONSTRAINT pk_sno PRIMARY KEY,
sname char(6) CONSTRAINT UN_sname UNIQUE,
ssex char(2),
sage int,
sdept char(15)
)
例3-22 创建sc表时,限制grade列的值只能在-100之间
create table sc
(
sno char(10) CONSTRAINT FK_sno FOREIGN KEY REFERENCES student(sno),
cno char(4) CONSTRAINT FK_cno FOREIGN KEY REFERENCES course(cno),
grade int CHECK(grade>=0 and grade<=100),
PRIMARY KEY(sno,cno)
)
例3-23 创建student表时,ssex列只能取男或女,且默认值是男
create table student
(
sno char(10) CONSTRAINT pk_sno PRIMARY KEY,
sname char(6),
ssex char(2) CHECK (ssex='男'or ssex='女')DEFAULT '男',
sage int,
sdept char(15)
)
5.实验数据记录与整理:
(1)添加主键约束,在sc表中设置主键时遇到以下情况:
因为学号原本是允许空的,要修改学号这个字段是非空的才可以,课程号也是一样
进行正确的非空操作如下图:
这里容易出错的地方见下图:
注意修改非空的代码是alter table sc,而不是alter table student或者alter table course
(2)两把钥匙不是两个主键,而是两个合成一个主键
(3)在删除student表时遇到以下情况:
因为该对象有一个外键约束,student是一个主表,而sc表是一个从表和它相关联的,互相引用的所以不能删除。想删除必须先删除从表,然后再删除主表。所以应该先drop table sc 然后drop table student