2013级硕士研究生
《数据库技术与应用》
实验报告
姓 名: 王xxxx
学 号: s2012000
专 业: xxxx 工程
任课老师: 孙静宇
完成时间: 2014.05.xx
太原理工大学 研究生院
实验一: 创建和删除数据库
一、 实验目的
学习建立数据库、删除数据库的SQL 语句的使用;学会排错技术。
了解有关概念(如数据文件、日志文件等相关概念)
二、 实验内容
建立数据库、删除数据库的SQL 语句的使用
三、 实验要求
成功建立数据库,供后面实验使用,并学会删除数据库。
所用的执行语句如下:
1、创建数据库:
USE master
CREATE DATABASE DB99070135
ON
( NAME = DB99070135_DATA, /*数据文件*/
FILENAME = 'E:\9901student\DB99070135.mdf',
SIZE = 1,
MAXSIZE = 3,
FILEGROWTH = 1 )
LOG ON
( NAME = DB99070135_LOG, /*日志文件*/
FILENAME = 'E:\9901student\DB99070135.ldf',
SIZE = 1,
MAXSIZE = 3,
FILEGROWTH = 1 )
2、删除数据库:
USE master
DROP DATABASE DB99070135
四、 实验装置
在客户机上登陆至服务器server-1,用户名使用9901。
五、 实验步骤
创建一个 数据库,其数据文件和日志文件的初始大小都为1M ,最大都允许增加到3M ,每次增量都为1M 。数据文件和日志文件存放在指定目录之下。
六、 实验数据及处理
实验过程中出现的问题和系统信息:
实验过程中准确登陆,但是开始时使用FILENAME = ‘D:\9901student\DB99070135.ldf’, 由于服务器的D 盘没有足够的空间,运行时有磁盘空间不足的提示,后来改变路经解决此问题,运行结果为:
1、 创建数据库
CREATE DATABASE 进程正在磁盘 'DB99070135_DATA' 上分配 1.00 MB 的空间。
CREATE DATABASE 进程正在磁盘 'DB99070135_LOG' 上分配 1.00 MB 的空间。
2、 删除数据库
正在删除数据库文件 'E:\9901student\DB99070135.ldf'。
正在删除数据库文件 'E:\9901student\DB99070135.mdf'。
七、思考题:日志文件的作用是什么?
在建库时要同时建立日志文件,日志文件的主要作用是记录下每一步操作,便于查看各个动作,在有错误操作时可以方便地更改。
实验二: 创建和删除基本表
一、 实验目的
学习建立基本表、修改表结构、删除基本表的SQL 语句的使用
了解有关概念(如主码、外码、完整性约束)
二、 实验内容
建立基本表、修改表结构、删除表的SQL 语句的使用
三、 实验要求
成功建立一组基本表(含主码、外码、完整性约束的定义),供后面实验使用,并学会修改表结构、删除表。
所用的执行语句如下:
USE DB99070135
CREATE TABLE MovieStar(
name CHAR(30) PRIMARY KEY,
address VARCHAR(100),
gender CHAR(1),
birthday DATETIME DEFAULT 0000
)
CREATE TABLE MovieExec(
name CHAR(30),
cert# INT PRIMARY KEY,
address VARCHAR(100),
netWorth INT
)
CREATE TABLE Studio(
name CHAR(30)PRIMARY KEY,
address VARCHAR(100),
presc# INT REFERENCES MovieExec(cert#)
)
CREATE TABLE Movie(
title VARCHAR(100),
year INT CHECK(year>=1895),
length INT CHECK (length >=60 AND length
Incolor INT,
studioName CHAR(30) REFERENCES Studio(name),
producerC# INT REFERENCES MovieExec(cert#)NOT NULL,
PRIMARY KEY(title,year)
)
CREATE TABLE StarsIN(
Movietitle VARCHAR(100) NOT NULL,
Movieyear INT /*CHECK(year>=1895)*/NOT NULL,
StarName CHAR(30) REFERENCES MovieStar(name),
PRIMARY KEY(Movietitle,Movieyear,StarName),
FOREIGN KEY (Movietitle,Movieyear)
REFERENCES Movie(title,year)
)
ALTER TABLE Studio
ALTER COLUMN address CHAR (50)
ALTER TABLE Studio
ADD execname CHAR(30)
DROP TABLE StarsIN
DROP TABLE Movie
DROP TABLE studio
DROP TABLE MovieExec
DROP TABLE MovieStar
四、 实验步骤
选择课题,画出E-R 图,并设计出数据库模式,然后使用CREATE TABLE 语句创建基本表,并练习ALTER TABLE 语句的使用。各表中要求设计适当的约束(主码、外码、 check 约束等)。
五、 实验数据及处理
实验中出现的问题和系统信息
1、服务器: 消息 8141,级别 16,状态 1,行 28
列 CHECK 约束(属于列 'Movieyear' )引用了另一列,表 'StarsIN' 。
服务器: 消息 1759,级别 16,状态 1,行 28
在约束或计算列的定义中指定了无效的列 'year' 。
服务器: 消息 1750,级别 16,状态 1,行 28
未能创建约束。请参阅前面的错误信息。
2、服务器: 消息 1770,级别 16,状态 1,行 14
外键 'FK__Studio__presc#__3C69FB99' 引用了位于被引用表 'MovieExec' 中的无效列 'cret#'。
服务器: 消息 1750,级别 16,状态 1,行 14
未能创建约束。请参阅前面的错误信息。
原因是列名写错了,应为cert#。
3、 第一次执行命令
ALTER TABLE Studio
ALTER COLUMN address CHAR (50)
显示影响行数为零的提示,之后运行会显示命令已完成。
4、 执行命令
ALTER TABLE Studio
ADD execname CHAR(30)
显示命令已成功完成。
5、 执行命令
DROP TABLE MovieStar
DROP TABLE MovieExec
DROP TABLE studio
DROP TABLE Movie
DROP TABLE StarsIN
有如下信息:
服务器: 消息 3726,级别 16,状态 1,行 1
未能除去对象 'MovieStar' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 2
未能除去对象 'MovieExec' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 3
未能除去对象 'studio' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 4
未能除去对象 'Movie' ,因为该对象正由一个 FOREIGN KEY 约束引用。
6、 更改执行顺序为
DROP TABLE StarsIN
DROP TABLE Movie
DROP TABLE studio
DROP TABLE MovieExec
DROP TABLE MovieStar
可解决此问题,结果为The command(s) completed successfully.
六、 思考题:什么是外码?它的作用是什么?
外码即外键码,若关系R 的一个属性(或属性组) X,不是R 的主键码,而是(/对应) 另一个关系S 的主键码,则称X 为关系R 的外键码。他参照第二个关系(可以是同一个关系)的某个(些)属性。他有两方面的含义:1,必须说明第二个关系的被参照属性为该关系的主键码;2,出现在第一个关系的外键码属性中的任何值也必须在第二个关系的相应属性中,也就是存在连接这两个属性或属性集的参照完整性。
从其定义可以看出外码的最重要的作用是保证这两个属性或属性集的参照完整性。
实验三: 数据的增删改
一、实验目的
学习基本表数据增删改的SQL 语句的使用,为以后的实验准备数据。
二、实验内容
在实验二的基础上,向各表中添加数据,并做适当的修改与更新,以供查询使用。数据自己设定。
三、实验要求
添加足够数据供后面实验使用。
所用的执行的语句如下:
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('FEIWENLI','WASHINGTON STREET 45','F','19300405') INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('蒋雯莉',' 北京朝阳','F','19450405')
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('王刚',' 香港九龙','M','19421024')
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('高曙光',' 上海' 中山,'M','19500815')
DELETE MovieStar
FROM MovieStar
WHERE name='蒋雯莉'
四、实验步骤
选择实验数据,依次插入表内,之后用DELETE 语句删除表内记录,用DROP TABLE删除表结构,之后重新执行建表和插入语句,使表内保存足够的记录。
五、实验数据及处理
实验中出现的问题和系统信息
1、运行第一句的结果:
(1 row(s) affected) 成功插入几行会有几行这样的结果出现。
2、运行 DELETE MovieStar
FROM MovieStar
WHERE name='蒋雯莉'
(1 row(s) affected) 成功插入几行会有几行这样的结果出现。
六、 思考题:DELETE 语句与DROP TABLE语句有何不同?
DROP TABLE删除的是表的定义,即完成该操作后表不复存在,并将表的属性及其内容以及其他的附加属性;而DELETE 删除的是表中的记录,该操作不改变表的属性,操作完成后表仍然存在。
实验四: 数据的检索
一、实验目的
学习SELECT 语句的使用。
二、实验内容
在实验三的基础上,熟悉使用SELECT 语句,检索所需信息。
三、实验要求
设计并实现符合以下要求的SELECT 语句:
单表的简单查询(含:group by……having和order by 子句)
涉及多表的连接查询:
子查询
带聚合运算的查询
所用的执行语句如下:
SELECT MovieStar.*
FROM MovieStar
四、实验步骤
单表的简单查询(含:group by……having和order by 子句),之后是 涉及多表的子查询,带聚合运算的查询,执行语句并记录结果。
五、实验数据及处理
实验过程中出现的问题和系统信息
name address gender birthday
------------------------------ -------------------------------------------------------------------------------------- FEIWENLI WASHINGTON STREET 45 F 1930-04-05 00:00:00.000
高曙光 上海中山 M 1950-08-15 00:00:00.000
蒋雯莉 北京朝阳 F 1945-04-05 00:00:00.000
王刚 香港九龙 M 1942-10-24 00:00:00.000
六、 思考题:使用聚合运算符应注意什么?
聚合运算是应用于表的指定列,要用于任何可比类型(例如算术值或者字符串)的聚集。使用聚组函数时,可用GROUP BY 子句对查询结果进行分组计算,用HAVING 子句选择满足条件的组,分组的原则:指定列相等的分为一组,只有在GROUP BY 子句中出现的属性,才能以非聚组的形式出现。
2013级硕士研究生
《数据库技术与应用》
实验报告
姓 名: 王xxxx
学 号: s2012000
专 业: xxxx 工程
任课老师: 孙静宇
完成时间: 2014.05.xx
太原理工大学 研究生院
实验一: 创建和删除数据库
一、 实验目的
学习建立数据库、删除数据库的SQL 语句的使用;学会排错技术。
了解有关概念(如数据文件、日志文件等相关概念)
二、 实验内容
建立数据库、删除数据库的SQL 语句的使用
三、 实验要求
成功建立数据库,供后面实验使用,并学会删除数据库。
所用的执行语句如下:
1、创建数据库:
USE master
CREATE DATABASE DB99070135
ON
( NAME = DB99070135_DATA, /*数据文件*/
FILENAME = 'E:\9901student\DB99070135.mdf',
SIZE = 1,
MAXSIZE = 3,
FILEGROWTH = 1 )
LOG ON
( NAME = DB99070135_LOG, /*日志文件*/
FILENAME = 'E:\9901student\DB99070135.ldf',
SIZE = 1,
MAXSIZE = 3,
FILEGROWTH = 1 )
2、删除数据库:
USE master
DROP DATABASE DB99070135
四、 实验装置
在客户机上登陆至服务器server-1,用户名使用9901。
五、 实验步骤
创建一个 数据库,其数据文件和日志文件的初始大小都为1M ,最大都允许增加到3M ,每次增量都为1M 。数据文件和日志文件存放在指定目录之下。
六、 实验数据及处理
实验过程中出现的问题和系统信息:
实验过程中准确登陆,但是开始时使用FILENAME = ‘D:\9901student\DB99070135.ldf’, 由于服务器的D 盘没有足够的空间,运行时有磁盘空间不足的提示,后来改变路经解决此问题,运行结果为:
1、 创建数据库
CREATE DATABASE 进程正在磁盘 'DB99070135_DATA' 上分配 1.00 MB 的空间。
CREATE DATABASE 进程正在磁盘 'DB99070135_LOG' 上分配 1.00 MB 的空间。
2、 删除数据库
正在删除数据库文件 'E:\9901student\DB99070135.ldf'。
正在删除数据库文件 'E:\9901student\DB99070135.mdf'。
七、思考题:日志文件的作用是什么?
在建库时要同时建立日志文件,日志文件的主要作用是记录下每一步操作,便于查看各个动作,在有错误操作时可以方便地更改。
实验二: 创建和删除基本表
一、 实验目的
学习建立基本表、修改表结构、删除基本表的SQL 语句的使用
了解有关概念(如主码、外码、完整性约束)
二、 实验内容
建立基本表、修改表结构、删除表的SQL 语句的使用
三、 实验要求
成功建立一组基本表(含主码、外码、完整性约束的定义),供后面实验使用,并学会修改表结构、删除表。
所用的执行语句如下:
USE DB99070135
CREATE TABLE MovieStar(
name CHAR(30) PRIMARY KEY,
address VARCHAR(100),
gender CHAR(1),
birthday DATETIME DEFAULT 0000
)
CREATE TABLE MovieExec(
name CHAR(30),
cert# INT PRIMARY KEY,
address VARCHAR(100),
netWorth INT
)
CREATE TABLE Studio(
name CHAR(30)PRIMARY KEY,
address VARCHAR(100),
presc# INT REFERENCES MovieExec(cert#)
)
CREATE TABLE Movie(
title VARCHAR(100),
year INT CHECK(year>=1895),
length INT CHECK (length >=60 AND length
Incolor INT,
studioName CHAR(30) REFERENCES Studio(name),
producerC# INT REFERENCES MovieExec(cert#)NOT NULL,
PRIMARY KEY(title,year)
)
CREATE TABLE StarsIN(
Movietitle VARCHAR(100) NOT NULL,
Movieyear INT /*CHECK(year>=1895)*/NOT NULL,
StarName CHAR(30) REFERENCES MovieStar(name),
PRIMARY KEY(Movietitle,Movieyear,StarName),
FOREIGN KEY (Movietitle,Movieyear)
REFERENCES Movie(title,year)
)
ALTER TABLE Studio
ALTER COLUMN address CHAR (50)
ALTER TABLE Studio
ADD execname CHAR(30)
DROP TABLE StarsIN
DROP TABLE Movie
DROP TABLE studio
DROP TABLE MovieExec
DROP TABLE MovieStar
四、 实验步骤
选择课题,画出E-R 图,并设计出数据库模式,然后使用CREATE TABLE 语句创建基本表,并练习ALTER TABLE 语句的使用。各表中要求设计适当的约束(主码、外码、 check 约束等)。
五、 实验数据及处理
实验中出现的问题和系统信息
1、服务器: 消息 8141,级别 16,状态 1,行 28
列 CHECK 约束(属于列 'Movieyear' )引用了另一列,表 'StarsIN' 。
服务器: 消息 1759,级别 16,状态 1,行 28
在约束或计算列的定义中指定了无效的列 'year' 。
服务器: 消息 1750,级别 16,状态 1,行 28
未能创建约束。请参阅前面的错误信息。
2、服务器: 消息 1770,级别 16,状态 1,行 14
外键 'FK__Studio__presc#__3C69FB99' 引用了位于被引用表 'MovieExec' 中的无效列 'cret#'。
服务器: 消息 1750,级别 16,状态 1,行 14
未能创建约束。请参阅前面的错误信息。
原因是列名写错了,应为cert#。
3、 第一次执行命令
ALTER TABLE Studio
ALTER COLUMN address CHAR (50)
显示影响行数为零的提示,之后运行会显示命令已完成。
4、 执行命令
ALTER TABLE Studio
ADD execname CHAR(30)
显示命令已成功完成。
5、 执行命令
DROP TABLE MovieStar
DROP TABLE MovieExec
DROP TABLE studio
DROP TABLE Movie
DROP TABLE StarsIN
有如下信息:
服务器: 消息 3726,级别 16,状态 1,行 1
未能除去对象 'MovieStar' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 2
未能除去对象 'MovieExec' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 3
未能除去对象 'studio' ,因为该对象正由一个 FOREIGN KEY 约束引用。
服务器: 消息 3726,级别 16,状态 1,行 4
未能除去对象 'Movie' ,因为该对象正由一个 FOREIGN KEY 约束引用。
6、 更改执行顺序为
DROP TABLE StarsIN
DROP TABLE Movie
DROP TABLE studio
DROP TABLE MovieExec
DROP TABLE MovieStar
可解决此问题,结果为The command(s) completed successfully.
六、 思考题:什么是外码?它的作用是什么?
外码即外键码,若关系R 的一个属性(或属性组) X,不是R 的主键码,而是(/对应) 另一个关系S 的主键码,则称X 为关系R 的外键码。他参照第二个关系(可以是同一个关系)的某个(些)属性。他有两方面的含义:1,必须说明第二个关系的被参照属性为该关系的主键码;2,出现在第一个关系的外键码属性中的任何值也必须在第二个关系的相应属性中,也就是存在连接这两个属性或属性集的参照完整性。
从其定义可以看出外码的最重要的作用是保证这两个属性或属性集的参照完整性。
实验三: 数据的增删改
一、实验目的
学习基本表数据增删改的SQL 语句的使用,为以后的实验准备数据。
二、实验内容
在实验二的基础上,向各表中添加数据,并做适当的修改与更新,以供查询使用。数据自己设定。
三、实验要求
添加足够数据供后面实验使用。
所用的执行的语句如下:
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('FEIWENLI','WASHINGTON STREET 45','F','19300405') INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('蒋雯莉',' 北京朝阳','F','19450405')
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('王刚',' 香港九龙','M','19421024')
INSERT INTO MovieStar(name,address,gender,birthday)
VALUES('高曙光',' 上海' 中山,'M','19500815')
DELETE MovieStar
FROM MovieStar
WHERE name='蒋雯莉'
四、实验步骤
选择实验数据,依次插入表内,之后用DELETE 语句删除表内记录,用DROP TABLE删除表结构,之后重新执行建表和插入语句,使表内保存足够的记录。
五、实验数据及处理
实验中出现的问题和系统信息
1、运行第一句的结果:
(1 row(s) affected) 成功插入几行会有几行这样的结果出现。
2、运行 DELETE MovieStar
FROM MovieStar
WHERE name='蒋雯莉'
(1 row(s) affected) 成功插入几行会有几行这样的结果出现。
六、 思考题:DELETE 语句与DROP TABLE语句有何不同?
DROP TABLE删除的是表的定义,即完成该操作后表不复存在,并将表的属性及其内容以及其他的附加属性;而DELETE 删除的是表中的记录,该操作不改变表的属性,操作完成后表仍然存在。
实验四: 数据的检索
一、实验目的
学习SELECT 语句的使用。
二、实验内容
在实验三的基础上,熟悉使用SELECT 语句,检索所需信息。
三、实验要求
设计并实现符合以下要求的SELECT 语句:
单表的简单查询(含:group by……having和order by 子句)
涉及多表的连接查询:
子查询
带聚合运算的查询
所用的执行语句如下:
SELECT MovieStar.*
FROM MovieStar
四、实验步骤
单表的简单查询(含:group by……having和order by 子句),之后是 涉及多表的子查询,带聚合运算的查询,执行语句并记录结果。
五、实验数据及处理
实验过程中出现的问题和系统信息
name address gender birthday
------------------------------ -------------------------------------------------------------------------------------- FEIWENLI WASHINGTON STREET 45 F 1930-04-05 00:00:00.000
高曙光 上海中山 M 1950-08-15 00:00:00.000
蒋雯莉 北京朝阳 F 1945-04-05 00:00:00.000
王刚 香港九龙 M 1942-10-24 00:00:00.000
六、 思考题:使用聚合运算符应注意什么?
聚合运算是应用于表的指定列,要用于任何可比类型(例如算术值或者字符串)的聚集。使用聚组函数时,可用GROUP BY 子句对查询结果进行分组计算,用HAVING 子句选择满足条件的组,分组的原则:指定列相等的分为一组,只有在GROUP BY 子句中出现的属性,才能以非聚组的形式出现。