实验一创建数据库和表以及数据操作
1. 实验目的
(1) 了解SQL Server 数据库的逻辑结构和物理结构。
(2) 了解SQL Server 的基本数据类型。
(3) 掌握在SQL Server Management Studio中创建数据库和数据表的方法。
(4) 掌握使用T-SQL语句创建数据库和数据表。
(5) 掌握在SQL Server Management Studio查看、修改数据表的结构。
(6) 掌握在SQL Server Management Studio中添加数据的方法。
(7) 掌握使用T-SQL语句对数据库表进行插入、修改、删除的操作。
2. 实验准备
(1) 明确能够创建数据库的用户必须是系统管理员,或是被授权使用CREATE DATABASE语句的用户。
(2) 创建数据库必须要确定数据库名、所有者、数据库大小(最初的大小、最小的大小、是否允许增长及增长的方式)和存储数据的文件。
(3) 了解使用T-SQL创建数据库的语句结构。
(4) 创建数据表时要确定表中各个字段的字段名、数据类型、长度等。
(5) 学会创建和修改表的结构。
(6) 学会向表中插入、删除、修改数据
3. 实验内容
(1) 使用SQL Server Management Studio控制台界面创建计算机计费系统,数据库manager。数据库的逻辑文件名和物理文件名均采用默认值。路径改为E:\manager。
(2) 使用T-SQL语句创建学生选课管理的数据库,数据库名为"student",采用多文件组的形式创建,除了主文件组包含两个文件之外,另外一个文件组也包含两个文件。
(3) 使用T-SQL语句在"manager"数据库中创建各表,"department"表、"manager"表、"planging"表。
(4)在SQL SERVR 2005环境下利用图形操作界面(非SQL语句)实现以下操作:创建用于学生管理数据库,数据库名为对表中的记录进行浏览、修改、删除操作。本信息,课程信息和选课信息。
数据库XSGL包含下列3 个表:
(l) student:学生基本信息。
(2)course:课程信息表。
(3)sc:学生选课表。
各表的结构分别如表1、表2和表3 所示。
—关系)和SQL SERVER 2005中的数据库关系图(数据库节点展开—数据库关系图)实现外键的创建。外键字段和参照字段之间的数据类型以及长度要保持一致。
2、输入表中的记录
楚先输入那些表中记录,为什么?
3、对表中的记录进行浏览、修改、删除操作。
实验二数据库的查询和视图
SQL语言(一)SQL定义语言
目的:
会用SQL语言进行基本表的结构的定义、修改、删除,会建立与删除索引;
内容:
用SQL语言进行基本表结构的定义、修改、删除,索引的建立和删除
步骤:
1、在SQL SERVER 2005中新建查询,建立到服务器的连接
2、用SQL语言CREATE TABLE语句创建实验一中学生表student、课程表course
和选课表sc及其相应约束,
具体约束如下:
表3 学生选课表:sc
3、向创建的表中输入数据,测试所创建的完整性约束是否起作用
4、用SQL语言ALTER语句修改表结构;
1)STUDENT表中增加一个字段入学时间scome,
2)删除STUDENT表中sdept字段;
3)删除创建的SC表中CNO字段和COURSE表CNO字段之间的外键约束;
4)重建3)中删除的约束
5、重新定义一个简单表,然后用SQL语言DROP语句删除该表结构;
6、用SQL语言CREATE INDEX语句定义表STUDENT的SNAME字段的降序唯一索引;
7、用SQL语言DROP语句删除索引;
SQL(二)SQL语言进行简单查询
目的:
掌握简单数据查询操作。
内容:
使用各种查询条件完成指定的查询操作
步骤:
1)创建学生表student、课程表course和选课表SC,并输入数据(注意数据的完整性。);(可以使用实验一中已经建立的表和数据)
2) 对各表中的数据进行不同条件的查询;
包括的运算:投影、选择、比较运算符、逻辑运算符、字符匹配运算符、匹配列表范围、算术运算符、内部函数、排序、分组、分组函数使用(1)查询全体学生的学号和姓名
(2)查询全体学生的详细记录
(3)查询软件学院的学生姓名、年龄、系别
(4)查询所有选修过课程的学生学号(不重复)
(5)查询考试不及格的学生学号(不重复)
(6)查询不是软件学院、计算机系的学生性别、年龄、系别
(7)查询年龄18-20岁的学生学号、姓名、系别、年龄;
(8)查询姓刘的学生情况
(9)查询姓刘或姓李的学生情况
(10)查询姓刘且名字为两个字的学生情况
(11)查询1983年以后出生的学生姓名。
(12)创建表 studentgrad(sno,mathgrade,englishigrade,chinesegrade)
计算学生各科总成绩并赋予别名
(13)利用内部函数year()查找软件学院学生的出生年份
(14)利用字符转换函数实现字符联接。
Select sname + ‘年龄为’+cast(sage as char(2))+’岁’
From student
(15)查询全体学生情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
(16)查询学生总人数。
(17)查询选修了课程的学生人数。
(18)查询选修了7号课程的学生总人数和平均成绩
(19)查询选修6号课程学生的最好成绩
(20)查询每个系的系名及学生人数。
(21)查找每门课的选修人数及平均成绩
(22)查找没有先修课的课程情况
SQL(三)SQL进行复杂查询
目的:
掌握复杂数据查询操作。
内容:
掌握各种连接查询、嵌套查询的使用
步骤:
1)实验一中的数据为基础
2) 对各表中的数据进行不同条件的连接查询和嵌套查询;
●查询每个学生及其选课情况;
●查询每门课的间接先修课
●将STUDENT,SC进行右连接
●查询既选修了2号课程又选修了3号课程的学生姓名、学号;
●查询和刘晨同一年龄的学生
●选修了课程名为“数据库”的学生姓名和年龄
●查询其他系比IS系任一学生年龄小的学生名单
●查询其他系中比IS系所有学生年龄都小的学生名单
●查询选修了全部课程的学生姓名
●查询计算机系学生及其性别是男的学生
●查询选修课程1的学生集合和选修2号课程学生集合的差集
●查询李丽同学不学的课程的课程号
●查询选修了3号课程的学生平均年龄
●求每门课程学生的平均成绩
●统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和
选修人数,结果按人数降序排列,若人数相同,按课程号升序排列
●查询学号比刘晨大,而年龄比他小的学生姓名。
●求年龄大于所有女同学年龄的男同学姓名和年龄
SQL(四)SQL的常用数据更新操作
目的:
掌握SQL的常用数据更新操作,熟练应用INSERT,UPDATE,DELETE语句。内容:
1)应用INSERT,UPDATE,DELETE语句进行更新操作;
a)插入如下学生记录(学号:95030,姓名:李莉,年龄:18)
b)插入如下选课记录(95030,1)
c)计算机系学生年龄改成20
d)把数学系所有学生成绩改成0
e)把低于总平均成绩的女同学成绩提高5分
f)修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高
4%(两个语句实现,注意顺序)
g)删除95030学生信息
h)删除SC表中无成绩的记录
i)删除张娜的选课记录
j)删除不及格的学生选课记录
k)删除数学系所有学生选课记录
l)删除所有未被选修的课程
m)查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中n)建立一个sdeptgrade 表,包含(sdept,avggrade)字段,对每一个系,求学生的成绩,并把结果存入sdeptgrade
2)熟练掌握INSERT,UPDATE,DELETE语句并能综合应用;
实验三存储过程和触发器
一、实验目的
(1)理解存储过程和触发器的功能和特点;
(2)学会使用Transact-SQL编写存储过程和触发器的方法;
(3)学会如何使用管理平台创建存储过程和触发器;
(4)掌握存储过程的创建、执行与删除;
(5)掌握触发器的创建、修改和删除操作;
(6)理解可以使用存储过程和触发器来维护数据完整性。
二、实验准备
(1)了解存储过程的基本概念和类型。
(2)了解创建存储过程的Transact —SQL语句的基本语法。
(3)了解查看、执行、修改和删除存储过程的基本语法。
(4)了解触发器的基本概念和类型。
(5)了解创建触发器的Transact —SQL语句基本用法。
(6)了解查看、修改和删除触发器的Transact —SQL语句的用法。
(7)了解创建事务,处理事务的方法和过程。
(8)了解锁机制。
三、实验内容和步骤
1.输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
CREATE PROCEDURE stu_info
@name varchar(40)
AS
SELECT a.sno,sname,cno,grade
FROM student a, sc b
where a.sno=b.sno
and sname=@name
使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。
如果存储过程stu_info执行时没有提供参数,能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义?
2. 使用studentsdb数据库中的student表,course表、sc表。
(1)创建一个存储过程stu_score,查询学号为2012001的学生的姓名,课程名称,分数。
CREATE PROCEDURE stu_score
@sno varchar(40)
AS
SELECT a.sno,sname,cname,grade
FROM student a, sc b,course c
where a.sno=b.sno and https://www.wendangku.net/doc/0b1003799.html,o=https://www.wendangku.net/doc/0b1003799.html,o
and a.sno=@sno
(2)执行存储过程stu_score,查询2012001学生的姓名,课程名称,分数。
3. 使用student表,course表、sc表。
(1)创建一个带参数的存储过程stu_p_g,当任意输入一个学生的姓名时,将从3个表中返回该学生的学号,选修的课程名称和课程成绩。
(2)执行存储过程stu_g_p,查询“刘卫平”的学号,选修课程和课程成绩。
CREATE PROCEDURE stu_p_g
@sname varchar(40)
AS
SELECT a.sno,sname,cname,grade
FROM student a, sc b,course c
where a.sno=b.sno and https://www.wendangku.net/doc/0b1003799.html,o=https://www.wendangku.net/doc/0b1003799.html,o
and a.sname=@sname
4.使用student表。
(1)执行存储过程stu_en,查看返回学生情况。
CREATE PROCEDURE stu_en
AS
SELECT *
FROM student
(2)使用Transact —SQL语句DROP PROCEDURE删除存储过程stu_en。
5.使用sc表。
(1)创建一个存储过程stu_g_r,当输入一个学生学号,通过返回输出参数获取该学生各门课程的平均成绩。
CREATE PROCEDURE stu_g_r,
@sno varchar(50)
AS
SELECT avg(grade)
FROM sc
Group by sno
Where sno=@sno
(2)执行存储过程stu_g_r,输入学号2012002。
(3)使用Transact—SQL语句DROP PROCDURE删除存储过程stu_en.
6.为sc表建立一个名为insert_g_tr的INSERT触发器,当用户向sc表中插入记录时,如果插入的是在course表中没有的课程编号,则提示用户不能插入记录,否则提示记录插入成功。请进行插入测试,分别输入以下数据:
学号课程编号分数
2012003 003 76
2012111 009 69
观察插入数据时的运行情况,说明什么?
create trigger insert_g_tr
on sc instead of insert
as
begin
declare @sno varchar(50),@cno varchar(50),@grade int
select @cno=cno,@sno=sno,@grade=grade from inserted
if not exists(select*from course where cno=@cno)
print'没有该课程编号,不能插入记录'
else
insert into sc values(@sno,@cno,@grade)
end
测试
insert into sc values('2012111','009',69)
7.为course表创建一个名为del_c_tr的DELETE触发器,该触发器作用是如果在sc表中有该课程的记录则提示用户禁止删除course表中的记录,否则删除该课程记录并提示删除成功。
create trigger del_c_tr
on course instead of delete
as
begin
declare @cno varchar(50)
select @cno=cno from deleted
if exists(select*from course where cno=@cno)
print'成绩表中有记录,不能删除记录'
else
delete from course where cno=@cno
end
测试:
delete from course where cno='003'
8.为student表创建一个名为update_s_tr的UPDATE触发器,该触发器作用是如果sc表中有该学生的记录,则提示用户禁止更新student表中的“学号”字段的内容,否则更改用户学号,并提示更改成功。
create trigger update_s_tr
on student instead of update
as
begin
declare @oldsno varchar(50),@newsno varchar(50)
if update(sno)
select @oldsno=sno from deleted
select @newsno=sno from inserted
if exists(select*from sc where sno=@oldsno)
print'禁止修改'
else
update student set sno=@newsno where sno=@oldsno
end
测试:
update student set sno='2012112'where sno='2012111'
9.使用Transact—SQL语句DROP TRIGGER删除update_s_ tr触发器。
10.为student表建立删除触发器del_s_tr,要求当student_info表的记录被删除后,sc表中相应的记录也能自动删除。
11 .为course表创建一个名为update_sc的触发器,要求当修改course表的课程号时,sc 表中相应的记录也自动修改。
12.使用Transact—SQL语句DROP TRIGGER删除update_sc触发器。
13.创建触发器,当修改或删除sc表中的成绩时,显示其原来的成绩。
(1)--创建触发器
CREATE TRIGGER tri_UPDATE_DELETE_SC
ON SC
FOR UPDATE,DELETE
AS
--检测成绩列表是否被更新
IF UPDATE(grade)
BEGIN
--显示学号、课程号、原成绩和新成绩信息
SELECT https://www.wendangku.net/doc/0b1003799.html,o,DELETED.grade AS原成绩,
INSERTED.grade AS原成绩
FROM DELETED,INSERTED
WHERE DELETED.Sno=INSERTED.Sno
END
--检测是更新还是删除操作
ELSE IF COLUMNS_UPDATED( )=0
BEGIN
--显示被删除的学号、课程号和成绩信号
SELECT 被删除的学号=DELETED.Sno,https://www.wendangku.net/doc/0b1003799.html,o
DELETED.grade AS 原成绩
FROM DELETED
END
ELSE
--返回提示信息
PRIN T ‘更新了非成绩列!’
(3)单击“确定”按钮,完成触发器的创建。
(2).触发触发器
(1)在查询分析器窗口中输入以下UPDATE SC语句,修改成绩列,激发触发器。UPDATE SC SET grade=grade+5
WHERE Cno=’001’
(2)在查询分析器窗口中输入以下UPDATE SC语句修改非成绩列,激发触发器。UPDATE SC SET Cno=’013’
WHERE Cno=’003’
(3)在查询命令窗口中输入以下DELETE SC语句,删除成绩记录,激发触发器。
DELETE SC WHERE Cno=’002’
实验四索引,数据完整性和安全性
一、实验目的
使学生加深对数据安全性和完整性的理解.并掌握SQL Server中有关用户、角色及操作权限的管理方法,学会创建和使用规则、缺省和触发器。
二、实验内容
1 数据库的安全性实验、在SQL Server管理平台中,设置SQL Server的安全认证模式.实现对SQL Server的用户和角色管理,设置和管理数据操作权限.
2数据库的完整性实验。使用Transact-SQL设计规则、缺省、约束.通过SQLServer 管理平台定义它们。
三、实验步骤
1.设置SQL Server的安全认证模式
1)在管理平台中展开SQL服务器组。用鼠标右键单击需要设置的SQL服务器,在弹出的菜单中选择“属性”项,如图3-39所示。
2)在弹出的SQL服务器属性对话框中,选择“安全性”选项卡,如图3-40所示。3)在安全性选项卡中有一个安全性栏,它包括两个单选钮:单击“SQL Server和Windows(S)为选择混合安全认证模式;单击“Windows安全认证模式。
图3-39 SQL服务器的弹出菜单
图3-40 SQL Server属性的安全性页面
2.登录的管理
(1)创建一个登录用户
1)用鼠标右键单击登录文件夹,出现如图3-42所示的弹出菜单、在弹出的菜单中选
在对话框中有常规选项卡、服务器角色选项卡和数据库访问选项卡。
2)选择常规选项卡输入用户的一般特征、常规选项卡界面如图3-43。所示,在常规选项卡中要输入用户名。选择该用户的安全认证模式。选择默认数据库和默认语言。如果选择Windows身份验证,需要单击名称右边的“….”按钮,调出windows已有的登录用户,如图3-44所示,从中选择新建的登录名称,并在下面的栏目中输入新的登录密码,
图3-44 Windows系统具有的默认登录用户
3)选择服务器角色选项卡,确定用户所属服务器角色。服务器角色选项卡的服务器角色列表中列出了系统的固定服务器角色,在这些固定服务器角色的左端有相应的复选框,该登录用户就成为相应的服务器角色成员了。在下面描述栏目中,列出了当前被选中的服务器角色的权限。
4)选择用户映射选项卡,确定用户能访问的数据库,并确定用户所属的数据库角色。数据库访问选项卡界面如图3-46所示在数据库访问选项卡中有两个列表框,上面的列表框中列出了SQL服务器全部的数据库,单击某个数据库左端的复选框,表示允许该登录用户访问相应的数据库,他右边为该登录用户在数据库中使用的用户名可以对其进行修改;下面为当前被选种数据库的数据库角色清单,单击某个数据库角色左端复选框,表示是该登录用户成为它的一个成员。
图3-45新建登录服务器角色选项卡图3-46 新建登录的数据库访问选项卡
5)操作完成后,单击“确定”按钮,即完成了创建登录用户的工作。
3.数据库用户的管理
登录用户只有成为数据库用户(Database User)后才能访问数据库。SQL Server的数据库中都有两个默认用户:dbo(数据库拥有者用户)和(客户用户)。通过系统存储过程或管理平台可以创建新的数据库用户。
(1)dbo用户
dbo用户即数据库拥有或数据库创建者,在其所拥有的数据库中拥有所有的操作权限。Dbo的身份可被重新分配给另一个用户,系统管理员Sa可以做为他所管理系统的任何数据库的dbo用户。
(2)guest用户
如果guest用户在数据库的SQL服务器用户。除系统数据库master和临时数据库tempdb 的guest用户不能被删除外,其它数据库都可以将自己的guest用户删除,以防止非数据库用户的登录用户对数据库进行访问。
(3)创建新的数据库用户
要在studentdb中创建一个“User1”数据库用户,可以按下面的步骤创建新数据库用户。
1)在企业管理其中扩展SQL服务器及数据库文件夹。用鼠标右键单击用户文件夹,弹出一个快捷菜单,如图3-47所示,在弹出的菜单中选择“新建数据库用户”项,会出现如图3-48所示的信件诗句库用户属性对话框。
2) 在对话框的登录名栏中选择一个SQL 服务器登陆用户名,本例为“login1”,并在他下面的用户名栏中输入数据库用户参加的角色。 3) 单击“确定”按钮。 4) 服务器及角色的管理
登录用户可以通过两种方法加入到服务器角色中:一种方法是在创建登陆时,通过服务器角色页面中的服务器角色选项,确定登录用户应属于的角色;另一种方法是对已有的登录,通过参加或移出服务器角色的方法。
使登录用户加入服务器角色的具体步骤为: l )对着登录名单击鼠标右键 2)选中一个服务器级角色
图3-49SQL server的服务器级角色5 数据库角色的管理
(1)在数据库角色中增加或移去用户
6.实体完整性
把表中的每行看做一个实体,它要求所有行都具有惟一标识通过建立索引、PRIMARY KEY 约束、UNIQUE约束以及列的IDENTITY来实现。
例1:
CREATE table employee
( job_id smallint PRIMARY KEY,
job_name char(20) not null
)
例2:
CREATE table student
(sname char(10),
Sno int not null,
Primary key(sno)
)
例3:
create table ii
(a int not null IDENTITY(1,3),
b char
)
7.参照完整性
维护被参照表与参照表之间的数据一致性,通过主键(PRIMARY KEY)和外键(FOREIGN KEY)约束实现。使用FOREIGN KEY约束需注意:FOREIGN KEY约束只参照同一个数据库中的其它表,跨数据库表的参照只能通过触发器来实现。
例:
CREATE table PR
(id int not null primary key,
Name char(10)
)
CREATE table FR
(id int not null References PR(id),
Score int not null)
从关系图可以看出结果:
8.域完整性(用户定义)
要求表中指定列的数据具有正确的数据类型、格式和有效的数据范围。通过默认值、CHECK、规则等约束实现
例1:CHECK约束
CREATE table example
(id int not null,
Score int not null check(score>=0and score<=100)
)
例2:对计算列使用表达式
CREATE TABLE mytable
(
low int,
high int,
myavg AS (low + high)/2
)
9.使用对象资源管理器和Transact-SQL语句,在数据库studentdb中基于表Student和sc完成有关索引操作。
(1)使用对象资源管理器为Student表的SName字段建立索引。
(2)使用Transact-SQL语句为sc的cno建立索引.
(3)使用对象资源管理器删除Student表的索引。
(4)使用Transact-SQL语句删除sc的索引。
步骤:
(1)使用对象资源管理器建立索引。
1)在对象资源管理器中打开Student表所在的树状菜单,在索引一项上右击,在弹出
的快捷菜单中执行“新建索引(N)”命令。
2)在弹出的如下图所示的“新建索引”对话框中为该索引命名。
《数据库原理及使用》实验指导书 (适用于计算机科学和技术、软件工程专业) 热风器4 计算机科学和技术学院 2011年12月 ⒈本课程的教学目的和要求 数据库系统产生于20世纪60年代末。30多年来,数据库技术得到迅速发展,已形成较为完整的理论体系和一大批实用系统,现已成为计算机软件领域的一个重要分支。数据库原理是计算科学和技术专业重要的专业课程。 本课程实验教学的目的和任务是使学生通过实践环节深入理解和掌握课堂教学内容,使学生得到数据库使用的基本训练,提高其解决实际问题的能力。 ⒉实验教学的主要内容 数据库、基本表、视图、索引的建立和数据的更新;关系数据库的查询,包括单表查询、连接查询、嵌套查询等;数据库系统的实现技术,包括事务的概念及并发控制、恢复、完整性和安全性实现机制;简单数据库使用系统的设计实现。 ⒊实验教学重点 本课程的实验教学重点包括: ⑴数据库、基本表、视图、索引的建立和数据的更新; ⑵SQL的数据查询; ⑶恢复、完整性和安全性实现机制; ⑷简单数据库使用系统的设计实现; 4教材的选用 萨师煊,王珊.数据库系统概论(第四版).北京:高等教育出版社.2006,5 实验1创建数据库(2学时) 实验目的 1.学会数据表的创建; 2.加深对表间关系的理解; 3.理解数据库中数据的简单查询方法和使用。 实验内容 一、给定一个实际问题,实际使用问题的模式设计中至少要包括3个基本表。使用问题是供应商给工程供应零件(课本P74)。 1.按照下面的要求建立数据库: 创建一个数据库,数据库名称可以自己命名,其包含一个主数据文件和一个事务日志文件。注意主数据文件和事务日志文件的逻辑名和操作系统文件名,初始容量大小为5MB,
苏州市职业大学 计算机网络与WebGIS实验报告 姓名: 学号: 学院: 班级:
实验一利用HTML制作表单 1.实验目的 了解掌握HTML语言:基础知识、编辑文档、超链接;图像与多媒体、表格、框架和表单 2.实验要求 硬件:GIS机房配置已达到要求; 软件:Win2000/WIN XP、记事本 3.实验内容 利用所学HTML语言完成表单制作,界面可参考图1,在制作过程中了解HTML文档的基本格式,尤其是表单标签