数据库实验3打印
- 格式:docx
- 大小:56.84 KB
- 文档页数:7
数据库原理与应用实验报告三及答案
广东金融学院实验报告课程名称:数据库原理与应用实验编号及实验名称实验三数据库高级应用实验系别计科系姓名学号班级实验地点新电1101实验日期05月14日实验时数8指导教师同组其他成员无成绩一、实验目的及要求1、掌握SQLServer存储过程的定义和使用。
2、掌握SQLServer触发器的定义和使用。
二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1、计算机操作系统要求在windowsXP以上。
2、并要求SQLServer软件月日第3页共2页。
《数据库实验报告》word版
一、实验目的
本次实验的目的是掌握SQL Server和MySQL的基本操作和基础语法知识,能够熟练地创建和管理数据库、数据表和视图,并能实现基本的数据操作和查询。
二、实验环境
本次实验使用的工具为SQL Server Management Studio和MySQL Workbench,数据库采用的是本地安装的SQL Server 2019和MySQL 8.0。
三、实验步骤
1. 使用SQL Server Management Studio创建数据库
CREATE DATABASE TestDB;
执行该语句,即可创建名为TestDB的数据库。
2. 使用MySQL Workbench创建数据库
打开MySQL Workbench,连接本地MySQL数据库,选择“管理”菜单栏,点击“新建连接”,输入用户名和密码,点击“测试连接”,连接成功后,点击“新建模式”,输入模式名称,选择“UTF-8”编码,点击“应用”,即可创建一个新的数据库。
在TestDB数据库中创建一个名为“Student”的数据表,包含学生的姓名、学号、年龄和性别信息。
输入以下SQL语句:
USE TestDB;
CREATE TABLE Student(
Name VARCHAR(20) NOT NULL,
ID INT PRIMARY KEY,
Age INT,
Gender VARCHAR(2)
);
在Student数据表中插入三条学生信息。
输入以下SQL语句:
执行该语句,即可成功插入三条学生信息。
SELECT * FROM Student;
四、实验总结。
《数据库原理》实验报告题目:实验三数据完整性与安全性控制学号班级日期2016.10.18一、实验容、步骤以及结果1.利用图形用户界面对实验一中所创建的Student库的S表中,增加以下的约束和索引。
(18分,每小题3分)(1)非空约束:为出生日期添加非空约束。
非空约束:取消表S中sbirth的勾。
可能需要重建表。
(2)主键约束:将学号(sno)设置为主键,主键名为pk_sno。
设主键:单击数据库Student-->单击表-->单击S-->右击sno-->选择‘修改’命令-->对话框中右击sno-->选择‘设置主键’-->修改主键名为‘pk_sno’-->保存(3)唯一约束:为(sname)添加唯一约束(唯一键),约束名为uk_sname。
唯一约束:单击数据库Student-->单击表-->单击S-->右击sname-->选择‘修改’命令→右击sname-->选择‘索引和键’命令-->打开‘索引和键’框图-->添加-->是否唯一改为‘是’-->名称改为‘us_sname’-->关闭。
(4)缺省约束:为性别(ssex)添加默认值,其值为“男”。
设默认约束:单击数据库Student→单击表→单击S→右击sno→选择‘修改’命令→单击cno-->在默认值栏输入‘男’→保存(5)CHECK约束:为SC表的成绩(grade)添加CHECK约束,约束名为ck_grade,其检查条件为:成绩应该在0-100之间。
(6)外键约束:为SC表添加外键约束,将sno,cno设置为外键,其引用表分别是S表和C表,外键名称分别为fk_sno,fk_cno。
2.在图形用户界面中删除以上小题中已经创建的各种约束,用SQL语言分别重新创建第1题中的(2)-(6)小题.(15分,每小题3分,提示:alter table add constraint)删除约束:单击数据库Student-->表-->单击S-->展开键、约束。
数据库原理实验报告(3)实验三数据表的创建与管理实验南京晓庄学院《数据库原理与应⽤》课程实验报告实验三数据表的创建与管理实验所在院(系):数学与信息技术学院班级:学号::1.实验⽬的(1)理解SQL Server 2005常⽤数据类型和表结构的设计⽅法。
理解主键、外键含义,掌握建⽴各表相关属性间参照关系的⽅法。
(2)熟练掌握使⽤SQL Server Management Studio图形⼯具创建表,删除表,修改表结构,插⼊及更新数据的⽅法。
(3)熟练掌握使⽤Transact-SQL语句创建表,删除表,修改表结构,插⼊及更新数据的⽅法。
2.实验要求基本实验:(1)在实验⼆所创建的“TM”数据库中合理设计以下各表逻辑结构:学⽣信息(学号,,性别,籍贯,出⽣⽇期,民族,学院/系别号,班级号)课程信息(课程号,课程名称,课程所属模块,课程类别,学分,学时)学习信息(学号,课程号,考试成绩,平时成绩)院系信息(院系号,院系名称)要求确定各个字段的名称、类型、是否有默认值,是否主键等信息。
(2)依据你所设计的表结构,使⽤SQL Server Management Studio图形⼯具在“TM”数据库中创建学⽣信息表和课程信息表,并试验在图形界⾯中修改表结构,删除数据表,输⼊并更新数据的⽅法。
(3)依据你所设计表结构,使⽤Transact-SQL语句创建学习信息表和院系信息表,并试验使⽤T-SQL语句修改表结构,删除数据表,插⼊和更新数据的⽅法。
(4)找出已创建各表之间相关属性的参照关系,并在相关表中增加引⽤完整性约束。
(5)按要求完成实验报告。
扩展实验:(1)在“TM”数据库中补充设计以下各表结构:教师信息(教师号,,性别,出⽣⽇期,学历,学位,⼊职时间,职称,院系号)授课信息(教师号,课程号,学期)班级信息(班级号,班级名称,专业号)专业信息(专业号,专业名称,学制,学位)图书信息(图书号,书名,作者,,出版⽇期,册数,价格,分类)借书偏息(学号,图书号,借出时间,归还时间)奖励信息(学号,奖励类型,奖励⾦额)(2)设计并实现各表之间相关属性的参照关系。
实验三数据更新、视图、权限管理实验3.1 数据更新1 实验内容(1) 使用INSERT INTO语句插入数据,包括插入一个元组或将子查询的结果插入到数据库中两种方式。
(2) 使用SELECT INTO语句,产生一个新表并插入数据。
(3) 使用UPDATE语句可以修改制定表中满足WHERE子句条件的元组,有三种修改的方式:修改某个元组的值;修改多个元组的值;带子查询的修改语句。
(4) 使用DELETE语句删除数据:删除某一个元组的值;删除多个元组的值;带子查询的删除语句。
2 实验步骤在数据库School上按下列要求进行数据更新可在SQL代码前加下面两句SQL语句,用于确保当前使用的是School数据库Use Schoolgo(1)使用SQL语句向STUDENTS表中插入元组(编号:12345678 名字:LiMing EMAIL:LM@年级:2002)。
Insert into STUDENTS values('12345678','LiMing','LM@','2002')(2)对每个课程,求学生的选课人数和学生的最高成绩,并把结果存入数据库。
使用SELECTINTO和INSERT INTO两种方法实现。
Insert into:create table Courses_maxScore(cid char(20),Count_courses int,maxScore int)insert into Courses_maxScore (cid,Count_courses,maxScore)select cid,count(*)as Count_courses,max(score)as maxScore from CHOICES group by cidselect*from Courses_maxScoreSelect into:select cid,Count_courses,maxScore into cnCourses_maxScore from Courses_maxScoreselect*from cnCourses_maxScore(3)在STUDENTS表中使用SQL语句将姓名为LiMing.的学生的EMAIL改为LM@。
《数据库原理》实验报告实验五: 触发器、存储过程和函数实验六:ODBC/JDBC 数据库编程学号 姓名 班级 日期2013302534杨添文100113032015.10.31实验五:触发器、存储过程和函数一、实验内容1. 使用系统存储过程(sp_rename)将视图“V_SPJ ”更名为“V_SPJ_三建”。
(5分)(1)在原有数据库SPJ 中,建立如下语句:exec sp_rename 'V_SPJ','V_SPJ 三建' (2)结果为:2. 针对SPJ 数据库,创建并执行如下的存储过程:(共计35分)(1) 创建一个带参数的存储过程—jsearch 。
该存储过程的作用是:当任意输入一个工程代号时,将返回供应该工程零件的供应商的名称(SNAME)和零件的名称(PNAME)以及工程的名称(JNAME)。
执行jsearch 存储过程,查询“J1”对应的信息。
(10分)(1)存储过程为:create procedure jsearch (@searchingfor_jno nchar (20)) as beginselect J .JNAME ,S .SNAME ,P .PNAME from S ,P ,J ,SPJ where SPJ .JNO = @searchingfor_jno and SPJ .JNO =J .JNO and SPJ .SNO =S .SNO and SPJ .PNO =P .PNO Enduse[SPJ]go(2)执行存储过程如下:declare @solution intexec @solution = [dbo].[jsearch]@searchingfor_jno =N'J1'select'solution'= @solutiongo(3)结果:(2)使用S表,为其创建一个加密的存储过程—jmsearch。
一、(主界面)单击Form1空白处:1、在implementation处加入红色代码:implementation uses Unit2,Unit3;Procedure TForm1.Button2Click(Sender: TObject);beginUnit3.Form3.DBNavigator1.VisibleButtons:=[]; ----导航板不出现Unit3.Form3.FormCreate(Sender);Unit3.Form3.Show;end;2、双击Form1的“票务管理”按钮:在uses处添加下面红色代码。
usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls;procedure TForm1.Button1Click(Sender: TObject);BeginUnit3.Form3.DBNavigator1.VisibleButtons:=[nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh];Unit2.Form2.Show;end;二、登录界面“确定”按钮代码如下:procedure TForm2.Button1Click(Sender: TObject);beginif ((Edit1.Text='sxn')and (Edit2.Text='sxn')) thenbeginUnit3.Form3.FormCreate(Sender);Unit3.Form3.Show;endelseshowmessage(…请输入正确的用户名或密码!‟);Edit1.Text:='';Edit2.Text:='';end;三、操作界面(form3):1、procedure TForm3.FormCreate(Sender: TObject);beginADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.Active:=false;ADOQuery1.SQL.Add('select * from flight;');ADOQuery1.Prepared;ADOQuery1.Active:=true;Edit1.Text:='F001';ComboBox1.Text:='2006';ComboBox2.Text:='01';ComboBox3.Text:='01';end;2、“退出”按钮代码如下:procedure TForm3.Button2Click(Sender: TObject);beginclose;end;3、“查询”按钮代码如下:procedure TForm3.Button1Click(Sender: TObject);beginADOQuery1.Close;ADOQuery1.SQL.Clear;ADOQuery1.SQL.Add('select *');ADOQuery1.SQL.Add('from flight');ADOQuery1.SQL.Add('where 航班号='''+Edit1.Text+'''and 日期='''+ComboBox1.Text+'-'+ComboBox2.Text+'-'+ComboBox3.Text+'''');ADOQuery1.Prepared;ADOQuery1.Open;ADOQuery1.Active:=true;end;四、实验小结。
1.报告格式和内容要求:贴图时请剪裁到适当大小,要保证打印时可以看清,但也不要太
大以免“越界”。
不要在报告中写与实验无关的话,内容要有条理、完整、并能突出重点,要将遇到的主要问题说明。
2.文件格式要求:将实验成果(包括:本实验报告、数据库、查询代码)放入一个文件
夹中,文件夹以“学号姓名_S3”为文件名。
其中,S3表示这是实验3。
注意:你的学号放在姓名前,所有文件保存后关闭,然后再打包成RAR文件,以免提交的内容丢失或打不开。
3.提交方式:可以将文件包发到我邮箱*****************。
4.主动查阅资料,坚持自己亲手完成实验,弄清每个步骤和相关原理。
数据库实验报告课程:数据库原理及应用正文:一、实验目的1.理解索引和视图的概念。
2.掌握索引的使用方法。
3.掌握视图的定义和使用方法。
4.理解存储过程的概念,掌握存储过程的使用方法。
5.学习触发器的使用,体会触发器执行的时机,加深对触发器功能和作用的理解。
6.理解SQL Server2000验证用户身份的过程,掌握设置身份验证模式的方法。
7.理解登陆账号的概念,掌握混合认证模式下登陆账号的建立与取消方法。
8.掌握混合认证模式下数据库用户的建立与取消。
9.掌握数据库用户权限的设置方法。
10.理解角色的概念,掌握管理角色技术。
11.学会配制ODBC数据源。
了解使用ODBC来进行数据库应用程序设计,通过ODBC接口访问数据库并对数据库进行操作。
学习在Visual Basic中使用ADO控件访问后台的SQL Server数据库。
二、实验内容1.建立索引。
对JWGL数据库的学生选课表SC建立索引,要求按照Cno升序、Grade降序建立一个名为SC_ind的索引。
USE JWGLIF EXISTS(SELECT name FROM sysindexes WHERE name = 'SC_ind')DROP INDEX SC.SC_ind;GOUSE JWGLCREATE INDEX SC_ind ON SC (Cno,Grade DESC);2.视图的定义和操作,(1)在JWGL数据库里,完成第三章例3.54~例3.61例题中视图的定义和视图上的查询、更新操作。
(2)在Market数据库中,完成第三章习题11中(1)中建立视图的操作,然后在视图上完成第三章习题11(2)的查询操作。
3.在数据库JWGL中,完成第四章例1,例3~7中例题的创建存储过程的操作,并使用EXEC语句调用这些存储过程执行,观察他们的执行结果。
4.在Market数据库中,完成第四章习题5中(1)~(4)创建存储过程的操作。
实验七索引实验内容:1、使用企业管理器为学生表stud_info创建一个以stud_id为索引关键字的惟一聚簇索引。
USE studentGOCREATE INDEX old_index ON stud_info(stud_id)2、将上一步所建立的索引名称修改为new_index。
exec sp_rename'old_index','new_index';3、将前述所建立的new_index索引删除。
drop index student.new_index4、使用T-SQL语句为教师表teacher_info创建一个名为Teacher_Index的惟一非聚簇索引,索引关键字为教师编号teacher_id,降序,填充因子为80%。
CREATE UNIQUE NONCLUSTERED INDEX Teacher_Index ONteacher_info(teacher_id)ASC WITHPAD_INDEX,FILLFACTOR=80,5、使用T-SQL语句将教师表中的Teacher_Index删除。
drop index teacher.Teacher_Index6、为stud_info表创建一个基于“入学成绩mark,学号stud_id”组合列的非聚集、复合索引cj_xh_index。
USE studentGOCREATE INDEX cj_xh_ihdex ON stud_info(mark,stud_id)7、为lesson_info创建一个基于“课程号course_id,课程类型course_type”组合列的惟一、聚集、复合索引kc_lx_index。
USE studentGOCREATE UNIQUE CLUSTERED INDEX kc_lx_index ONlesson_info(course_id,course_type)WITHPAD_INDEX,FILLFACTOR=80,实验八T-SQL语言实验内容:在查询分析器在窗口下用T-SQL语句完成下列操作:1、从数据表stud_info中,查找学号为0401030213的学生,找到则显示:“您好!XX同学”,否则显示“未找到”。
if exists(select sno from stud_info where sno='0401030213' print'您好!XX同学'elseprint'未找到'2、从数据库teacher_info中,选取teacher_id、name、gender,如果gender 为“女”则输出“女士”,如果为“男”则输出“先生”。
select teacher_id,name,sex=case genderwhen'女'then'女士'when'男'then'男士'endfrom teacher_info3、计算1~100之间所有能被3整除的数的个数及总和。
declare @x smallint,@y smallint,@nums smallintset @x=0set @y=1set @nums=0while(@y<=100)beginif(@y%3=0)beginset @x=@x+@yset @nums=@nums+1endset @y=@y+1endprint str(@x)+','+str(@nums)1、计算s=1!+2!+…+10!。
declare @a int,@b int,@x int,@y intselect @a=1,@b=1,@x=0,@y=1while @a<=11beginset @x=@x+@ywhile @b<=@abeginset @y=@y*@bset @b=@b+1endset @a=@a+1endprint'1到的阶乘的和为'+cast(@x as char(10))2、输出字符串“School”中每一个字符的ASCII值和字符。
SET TEXTSIZE 0DECLARE @position int, @string char(8)SET @position = 1SET @string ='School'WHILE @position <=DATALENGTH(@string)BEGINSELECT ASCII(SUBSTRING(@string, @position, 1)),CHAR(ASCII(SUBSTRING(@string, @position, 1)))SET @position = @position + 1ENDGO6、从stud_grad表中查询所有同学考试成绩情况,凡成绩为空者输出“未考”,小于60分输出“不及格”,60分(含60分)至70分输出“及格”,70分(含70分)至80分输出“良好”,大于等于80分输出“优秀”。
select stud_id,name,score=case when grade is null then'未考'when grade<60 then'不及格'when grade>=60 and grade<70 then'及格'when grade>=70 and grade<80 then'良好'when grade>=80 then'优秀'endfrom stud_grade7、查询pubs数据库的employee表,如果表中雇员的平均服务时间长于10年,则打印信息:‘我们的雇员都很忠诚:)’,否则打印信息:‘我们的雇员经常跳槽:(’。
use pubsgoif(select avg(datediff(year,hire_date,getdate()))from employee)>10 print'我们的雇员都很忠诚:)'elseprint'我们的雇员经常跳槽:('8、查询pubs数据库中employee表,显示相关雇员信息(id,姓名,服务时间等),其中增加一个‘雇员类型’列:如果雇佣时间长于12年,则显示他为‘新雇员’,否则显示他为‘老雇员’。
use pubsgoselectEmp_ID,LName +'.'+ FName '姓名',datediff(year,hire_date,getdate())as'age','雇员类型'=casewhen datediff(year,hire_date,getdate())< 12 then'新雇员'when datediff(year,hire_date,getdate())>= 12 then'老雇员'endFrom employeeOrder by age9、创建一个游标,它所包含的结果集是pubs数据库中titles表中的所有书名(title)。
把所有的书名以下面的格式打印出来:Title: The Busy Executive's Database GuideUSE pubsGO-- Declare the variables to store the values returned by FETCH. DECLARE @title varchar(40)--声明变量存放数据DECLARE title_cursor CURSOR FORSELECT title FROM titlesORDER BY titleOPEN title_cursor-- Perform the first fetch and store the values in variables.-- Note: The variables are in the same order as the columns-- in the SELECT statement.FETCH NEXT FROM title_cursor --取得数据,存入变量中INTO @title-- Check @@FETCH_STATUS to see if there are any more rows to fetch. WHILE@@FETCH_STATUS= 0 --循环执行下面的语句BEGIN-- Concatenate and display the current values in the variables.PRINT'title: '+ @title --打印变量中的数据-- This is executed as long as the previous fetch succeeds.FETCH NEXT FROM title_cursor --取下一个值,存入变量INTO @titleENDCLOSE title_cursorDEALLOCATE title_cursorGO实验九存储过程实验内容:1、创建一个名为“proc_1”的存储过程,用于查看学生表的所有信息。
然后调用该存储过程。
2、创建一个名为“proc_2”的存储过程,用于向学生表的所有字段添加一条记录,记录内容由调用时决定。
然后调用该存储过程。
3、创建一个名为“proc_3”的存储过程,用于删除学生表中指定学号的记录,具体学号由调用时决定。
然后调用该存储过程。
4、修改存储过程“proc_4”,用于查询不小于指定成绩的学生的基本信息,具体成绩由调用时决定。
5、创建一个名为“proc_5”的存储过程,用于求一个3位整数的反序数。
例如123的反序数为321。
create proc proc_4@a intasdeclare @b int,@c int,@t int,@s intbeginset @t=@a % 10select @b=@a/10,@b=@b % 10set @c=@a/100set @s=@t*100+@b*10+@cselect @sendgoexec proc_4 123实验十数据库的备份与恢复实验内容:1、使用企业管理器创建一个名为“stubak”的备份设备(文件路径及文件名自定),然后把“学生”数据库完全备份到该备份设备中。
备份完毕后使用备份对该数据库进行恢复。
use studentgoExec sp_addumpdevice'disk','stubak','c:\test\database\stu.bak'gobackup database pubs to pubsbak With Init2、使用企业管理器在以上数据库完全备份的基础上对该数据库进行差异备份,并且追加到上述备份设备中。