数据库、表、索引的定义
一、目的:
通过本实验加深对SQL Server 2000环境下数据定义语言的理解,能够熟练地建立数据库,并通过SQL语句来创建和修改基本表、创建和取消索引。
二、内容:
使用SQL Server 2000软件,练习创建和修改数据库、表、索引。
三、要求:
建立一个新的SQL Server设备管理数据库,使用SQL的数据定义功能建立数据库中的各个基本表(共3个),并按要求对有关表进行修改。 每次操作后通过企业管理器查看有关对象的变化。
四、步骤:
1.创建数据库
1) 使用企业管理器创建数据库
使用企业管理器创建数据库的步骤如下:
① 如果SQL Server服务还没有启动,应先启动SQL Server服务,然后启动企业管理器。
② 在控制台上依次单击“Microsoft SQL Servers”和“SQL Server组”左边的加号,然后单击要创建数据库的服务器左边的加号图标,展开树形目录。
③ 右击“数据库”,然后单击“新建数据库”命令。
④ 在“名称”文本框中输入数据库名(根据学生本人的学号取名)。
⑤ 在“数据文件”页中输入主数据文件的名称。
⑥ 若要更改数据文件的存储位置,单击“位置”列表框上的按钮,(注意确定文件目录已经存在、并允许读写)。
⑦ 在“初始大小”项上输入希望的大小。
⑧ 如果希望数据库文件的容量能根据实际数据的需要自动增加,可选中“文件属性”部分的“文件自动增长”复选框。
⑨ 仿照“数据文件”页的定义方法定义“事务日志”页。
【说明一】:数据文件和日志文件的作用
数据文件又包括:主数据文件和辅助数据文件。主数据文件的扩展名是.mdf,每个数据库只能包含一个主数据文件。辅助数据文件的扩展名是.ndf。辅助数据文件可以同主数据文件存放在相同的位置,也可以存放在不同的地方。
日志文件记录页的分配和释放以及对数据库数据的修改操作。日志文件的扩展名为.ldf,它包含用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。
【说明二】:数据库文件的属性
在定义数据库的数据文件和日志文件时,可以指定如下属性:
Ø 文件名及其位置。每个数据库的数据文件和日志文件都具有一个逻辑名称以及文件的物理存放位置。
Ø 文件大小。可以指定每个数据文件和日志文件的大小,以MB为单位。
Ø 增长方式。如果需要的话,可以指定文件是否自动增长,该选项的默认配置为自动增长。
Ø 最大大小。指定文件增长的最大大小。默认是大小无限制。
2) 使用Transact-SQL语句创建数据库
① 语法结构
CREATE DATABASE 数据库名
[ON
[ <文件格式> [ , … n ] ]
]
[ LOG ON { <文件格式> [ , … n ] } ]
<文件格式> ::=
( [ NAME = 逻辑文件名, ]
FILENAME = ‘操作系统下的物理路径和文件名’
[, SIZE = 文件初始大小 ]
[, MAXSIZE = 文件最大大小 | UNLIMITED ]
[, FILEGROWTH = 增量值 ] ) [ , … n]
② 有关说明
Ø ON关键字表示数据库是根据后面的参数来创建的;
Ø n是一个占位符,表明可为新数据库指定多个文件;
Ø LOG ON 子句用于指定该数据库的事务日志文件;
Ø NAME用于指定数据库文件的逻辑文件名;
Ø FILENAME用于指定数据库文件的存放位置及在磁盘上的文件名;
Ø SIZE用于指定数据库文件的初始大小,可以加上MB或KB,默认为MB;
Ø MAXSIZE用于指定数据库文件的最大大小,可以加上MB或KB,默认为MB。省略此项表示最大大小无限制;
Ø FILEGROWTH用于指定数据库文件的增加量,可以加上MB或KB或%,默认为MB。省略此项表示不自动增长。
③ 内容
创建一个数据库,数据库名称为你的学号,例如:“AP0406150”,此数据库包含一个数据文件和一个事务日志文件。数据文件只有主数据文件,其逻辑文件名为“AP0406150_data”,其物理文件名为“AP0406150.mdf”,存放位置在默认目录下,其初始大小为10MB,最大大小为30MB,自动增长时的递增量为5MB。事务日志文件的逻辑文件名为“AP0406150_log”,物理文件名为“AP0406150.ldf”,也存放在默认目录下,初始大小为3MB,最大大小为12MB,自动增长时的递增量为2MB。
【注意】: 上机时要根据实际情况确定存放位置,由于计算中心的大多数机器的C、D驱动器有保护卡,建议在驱动器E中建立自己的目录,有关文件将存放在该目录中。
④ 语句格式
CREATE DATABASE AP0406150
ON
( NAME = AP0406150_data,
FILENAME = 'E:\AP0406150\AP0406150.mdf ',
SIZE = 10,
MAXSIZE = 30,
FILEGROWTH = 5 )
LOG ON
( NAME = AP0406150_log,
FILENAME = 'E:\ AP0406150\AP0406150.ldf ',
SIZE = 3,
MAXSIZE = 12,
FILEGROWTH = 2 )
2.创建基本表
打开查询分析器,找到第一步建立的数据库,使用数据定义语句建立三个基本表:
n 学生表:Student(Sno,Sname,Ssex,Sage,Sdept)
其中:属性Sno,Sname,Ssex,Sage和Sdept分别表示学号、姓名、性别、年龄和所在系,Sno为主码,加下划线表示。
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage CHAR(3),
Sdept CHAR(20)
);
n 课程表:Course(Cno,Cname,Cpno,Ccredit)
其中:属性Cno,Cname,Cpno和Ccredit分别表示课程号、课程名、先修课号和学分,Cno为主码,加下划线表示。
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) ,
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
n 学生选课表:SC(Sno,Cno,Grade)
其中:属性Sno,Cno和Grade分别表示学号、课程号和成绩,主码为属性组(Sno,Cno),加下划线表示。
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(4) ,
Grade SMALLINT,
PRIMARY KEY (Sno,Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);
3.修改基本表
n 在Student表中增加“入学时间”列,数据类型为日期型
ALTER TABLE Student
ADD S_entrance DATETIME;
n 将年龄的数据类型由字符型改为整型,因SQL SERVER2000没有MODIFY功能,只能先删除再添加,即:
ALTER TABLE Student //先删除
DROP COLUMN Sage;
ALTER TABLE Student //再添加
ADD Sage INT;
n 在Student表中增加一个完整性约束定义,使年龄的取值只能在15到40之间
ALTER TABLE Student
ADD CHECK(Sage BetWEEN 15 AND 40);
4.建立索引
为学生-课程数据库中的Student、Course、SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Stusno ON Student(Sno) ;
CREATE UNIQUE INDEX Coucno ON Course(Cno) ;
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC) ;
5.取消索引
取消按步骤4建立的索引。
DROP INDEX Student.Stusno;
DROP INDEX Course.Coucno ;
DROP INDEX SC.SCno ;
数据更新语言的使用
一、目的:
通过本实验熟悉数据库的数据更新操作,加深SQL语言中对数据库进行数据插入、更新、删除操作的理解。
二、内容:
使用SQL Server2000软件,练习SQL语言中的插入、更新、删除命令。
三、要求:
使用数据插入语句INSERT INTO向实验一所建立的基本表中输入若干数据,然后再通过UPDATE或DELETE语句对已经插入的数据进行更新或删除,每执行一次操作都将通过查询命令SELECT语句查看数据变化。
四、步骤:
1.插入内容
学生表:Student
Sno Sname Ssex Sage Sdept
200215121 李勇 男 19 CS
200215122 刘晨 男 20 CS
200215123 王敏 女 20 MA
200215125 张立 男 22 IS
课程表:Course
Cno Cname Cpno Ccredit
1 数据库 5 4
2 数学 2
3 信息系统 1 4
4 操作系统 6 3
5 数据结构 7 4
6 数据处理 2
7 PASCAL语言 6 4
学生选课表:SC
Sno Cno Grade
200215121 1 92
200215121 2 85
200215121 3 88
200215122 2 90
200215122 3 80
2.插入数据
使用insert语句将给定数据分别插入上述基本表中:
INSERT INTO Student VALUES('200215121','李勇','男' ,19,'CS');
INSERT INTO Student VALUES('200215122','刘晨','男' ,20,'CS');
INSERT INTO Student VALUES('200215123','王敏','女' ,20,'MA');
INSERT INTO Student VALUES('200215124','王敏乙','女' ,20,'MA');
【注意】:用SELECT命令观察结果。
INSERT INTO Course VALUES(‘2’,’数学’, ,2);
INSERT INTO Course VALUES(‘6’,’数据处理’, ,2);
INSERT INTO Course VALUES(‘4’,‘操作系统’,’6’ ,3);
INSERT INTO Course VALUES(‘7’,’PASCAL语言’,’6’ ,4);
INSERT INTO Course VALUES(‘5’,’数据结构’,’7’ ,4);
INSERT INTO Course VALUES(‘1’,’数据库’,’5’ ,4);
INSERT INTO Course VALUES(‘3’,’信息系统’,’1’ ,4);
先按课程号顺序向Course表中插入记录,再按上述顺序向Course表插入记录,体会两者的不同,并用SELECT命令观察结果。
INSERT INTO SC(Sno,Cno) VALUES(‘200215121’,’1’);
INSERT INTO SC(Sno,Cno,Grade) VALUES(‘200215121’,’2’,85);
INSERT INTO SC VALUES(‘200215121’,’3’,88);
INSERT INTO SC VALUES(‘200215122’,’2’,90);
INSERT INTO SC VALUES(‘200215122’,’3’,80);
3.修改数据
给学号为200215121学生录入课程号为1(数据库)的成绩。
UPDATE SC
SET Grade = 92
WHERE Sno=‘200215121’ and Cno = ‘1’;
4.删除数据
删除学号为200215124的学生记录。
DELETE
FROM Student
WHERE Sno=‘200215124’;