数据库实验4
数据库实验四
数据库实验四在学习数据库的过程中,实验是帮助我们深入理解和掌握相关知识的重要环节。
本次数据库实验四主要围绕着数据库的查询、更新以及数据完整性等方面展开。
实验的目的是让我们通过实际操作,更加熟练地运用 SQL 语句来处理数据库中的数据,同时加深对数据库原理和概念的理解。
在实验开始之前,我们首先需要准备好相关的数据库环境。
这包括安装数据库管理系统,如 MySQL 或 SQL Server 等,并创建好实验所需的数据库和数据表。
本次实验中,我们创建了一个名为“students”的数据库表,用于存储学生的基本信息,如学号、姓名、年龄、性别和所在班级等。
同时,还创建了一个名为“courses”的表,用于存储课程的信息,包括课程编号、课程名称和授课教师等。
接下来,就是实验的核心部分——数据查询操作。
通过使用 SQL 的 SELECT 语句,我们可以从数据库中获取所需的数据。
例如,要查询所有年龄大于 20 岁的学生信息,可以使用以下语句:```sqlSELECT FROM students WHERE age > 20;```除了简单的条件查询,我们还学习了如何进行多表连接查询。
比如,要获取同时选修了“数据库原理”和“操作系统”两门课程的学生信息,就需要将“students”表、“courses”表以及选课关系表进行连接查询。
数据更新操作也是实验中的重要内容。
通过使用 UPDATE 语句,我们可以对数据库中的数据进行修改。
但在进行数据更新时,一定要谨慎操作,确保更新的结果符合预期,避免造成数据的错误或丢失。
例如,如果要将某个学生的年龄增加一岁,可以使用以下语句:```sqlUPDATE students SET age = age + 1 WHERE student_id ='_____';```在实验过程中,数据完整性的维护也是至关重要的。
我们通过设置主键、外键以及各种约束条件,来确保数据的准确性和一致性。
数据库运维形考实验4
数据库运维形考实验4实验训练4:数据库系统维护作业实验目的:本实验旨在通过创建和维护数据库,掌握Mysql数据库的创建和维护的不同方法和途径,并理解实际数据库所包含的各要素。
实验内容:1.数据库创建与维护1)创建学生选课数据库中所包含的数据库表,包括学生、课程和选修表,要求为各数据库表属性选择合适的数据类型,并确定列名、数据类型、是否允许空值等。
2)查看和修改表结构,选择一个数据库表,练对其表结构进行相应的修改。
3)练用交互式的SQL语句分别完成以上操作。
4)对学生数据库中的三张表分别插入数据。
5)对表中的数据进行修改。
6)对表中的数据进行删除操作。
2.建立视图1)建立学生选修课程信息视图,包括学生学号、姓名、所在系、选修的课程编号、课程名称、成绩。
2)修改以上视图,增加学生所在班级信息。
3)对以上视图进行删除。
实验要求:1.利用SQL Server相关机制,根据具体应用领域创建并维护数据库系统,为后续各个实验提供前期准备。
2.独立完成以上实验内容,并在安装和数据库运行后熟悉SQL SERVER的各种运行管理。
3.完成实验报告。
实验环境:Windows 8 PC机、Mysql配置的环境、Mysql命令行工具、Workbench可视化工具。
实验步骤及结果分析:1.创建student数据库,通过命令行工具输入密码,使用相应数据库,使用create table语句创建数据库表,解决中文乱码问题。
2.进行属性查询操作,通过select语句查询数据库表的属性信息,包括列名、数据类型、约束等。
查询表结构,即查看各个属性和属性的完整性约束等。
使用desc student语句可以展示我们创建的数据的所有信息,包括属性名、类型、默认初始情况和约束等。
在默认数据库中,发现最后一个属性classno的属性为varchar(3),而实际数据中classno是4位数,导致存储时与原数据不匹配。
因此,需要修改该属性为4位长度。
数据库实验4_数据库查询与视图
数据库实验4_数据库查询与视图在学⽣选课数据库中完成规定查询,并创建视图。
1.查询线性代数不及格的同学的学号和姓名;SQL语句为:SELECT名单$.学号,姓名FROM名单$,学⽣选课信息和成绩$,课程$WHERE名单$.学号=学⽣选课信息和成绩$.学号AND课程$.课号=学⽣选课信息和成绩$.课号AND 课程$.课程名='线性代数'AND学⽣选课信息和成绩$.成绩<60;执⾏后结果为:2.查询没有选课记录的同学的所有基本信息;SQL语句为:SELECT*FROM名单$WHERE NOTEXISTS(SELECT*FROM学⽣选课信息和成绩$WHERE学号=名单$.学号);执⾏后结果为:3.查询具有简介先修课的课程信息及对应的先修课名;SQL语句为:SELECTFIRST.课号,SECOND.课程名FROM课程$FIRST,课程$SECONDWHEREFIRST.先修课号=SECOND.课号;执⾏后结果如下:4.统计⾼等数学(1)的平均成绩;SQL语句为:SELECT AVG(成绩)FROM学⽣选课信息和成绩$,课程$WHERE学⽣选课信息和成绩$.课号=课程$.课号AND课程$.课程名='⾼等数学(1)'; 执⾏后结果如下:5.统计各门课的选课⼈数;SQL语句为:SELECT课号,COUNT(学号)FROM学⽣选课信息和成绩$GROUPBY课号;执⾏后结果为:6.查询选修5门课以上的学⽣的学号;SQL语句为:SELECT学号FROM学⽣选课信息和成绩$GROUPBY学号HAVING COUNT(*)>5;执⾏后结果为:7.⽤你的学号查询和你⼀个班的同学的学号和姓名;SQL语句为:SELECT学号,姓名FROM名单$WHERE班级IN(SELECT班级FROM名单$WHERE学号='201000800145');执⾏后结果如下:8.查询⾼等数学(1)成绩⽐你⾼出10分以上的同学的姓名和对应成绩;SQL语句为:SELECT姓名,成绩FROM名单$,学⽣选课信息和成绩$WHERE名单$.学号=学⽣选课信息和成绩$.学号AND学⽣选课信息和成绩$.课号='82006010'AND成绩>(SELECT成绩+10FROM学⽣选课信息和成绩$,课程$WHERE学⽣选课信息和成绩$.课号=课程$.课号AND课程$.课程名='⾼等数学(1)' AND学⽣选课信息和成绩$.学号='201000800145')执⾏后结果为:9.找到每门课获得最⾼成绩的同学的学号、姓名、课名和成绩;选做。
数据库实验4实验报告
淮海工学院计算机工程学院实验报告书课程名:《数据库原理及应用》题目:T-SQL高级应用班级:软件132学号:***********名:***一.目的与要求1.掌握复杂查询的使用方法;2.掌握多表连接的方法;3.掌握SELECT语句在多表查询中的应用。
4.掌握数据汇总、外连接查询的使用方法;5.掌握事务定义的一般方法二.实验内容1.给出教材14-16的程序运行结果。
2.编写程序,查询“1033”班的最高分的学生的学号、姓名、班号、课程号和分数。
3.编写程序,创建一个新表,包含所有学生的姓名、课程名和分数,并以姓名排序。
4.编写程序,输出每个班最高分的课程名和分数。
5.在上次实验建立的factory数据库的基础上,完成如下各题:●删除factory数据库上各个表之间建立的关系;●显示各职工的工资记录和相应的工资小计。
●按性别和部门名的所有组合方式列出相应的平均工资。
●在worker表中使用以下语句插入一个职工记录:insert into worker values(20,’陈立’,‘女’,’55/03/08’,1,’75/10/10’,4),在depart表中使用以下语句插入一个部门记录:insert into depart values(5,’设备处’)。
再对worker和depart表进行全外连接显示职工的职工号,姓名和部门名。
然后删除这两个插入的记录。
●显示最高工资的职工的职工号、姓名、部门名、工资发放日期和工资。
●显示最高工资的职工所在的部门名。
●显示所有平均工资低于全部职工平均工资的职工的职工号和姓名。
●先显示worker表中的职工人数,开始一个事务,插入一个职工记录,再显示worker表中的职工人数,回滚该事务,最后显示worker表中的职工人数。
三.实验步骤删除factory数据库上各个表之间建立的关系的操作步骤如下:①启动SQL Server管理控制器。
②在“对象资源管理器”中展开LCB-PC服务器节点。
数据库实验四答案
数据库实验四答案--实验四----1.定义“IS”系学生基本情况视图V_IS 并查询结果;create view V_ISasselect *from Swhere Sdept='IS'with check option;select *from V_IS;--2.将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果;create view V_S_C_Gasselect S.Sno,Sname,o,Cnamefrom S,C,SCwhere S.Sno=SC.Sno and o=o;select *from V_S_C_G;--3.将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果; create view V_NUM_AVGasselect count(Sno) DeptNum ,avg(Sage) DeptAvgAge,Sdeptfrom Sgroup by Sdept;select *from V_NUM_AVG;--4.定义一个反映学生出生年份的视图V_YEAR并查询结果;create view V_YEARasselect Sno,2012-Sage birthdayfrom S;select *from V_YEAR;--5.将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;create view V_AVG_S_Gasselect SC.Sno,count(o) CountCno,avg(Grade) AvgGradefrom S,C,SCwhere S.Sno=SC.Sno and o=ogroup by SC.Sno;select *from V_AVG_S_G;--6.将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果; create view V_AVG_C_Gasselect count(SC.Sno) Cnum,avg(Grade) AvgGradefrom S,C,SCwhere S.Sno=SC.Sno and o=ogroup by o;select *from V_AVG_C_G;--7.查询平均成绩为90分以上的学生学号、姓名和成绩;select SC.Sno,Sname,avg(Grade) AvgGradefrom S,SCwhere S.Sno=SC.Snogroup by SC.Sno,Snamehaving avg(Grade) >90;--8.查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;create view V_AVGasselect o,avg(Grade) AvgGradefrom C,SCwhere o=ogroup by o;selectdistinct S.Sno,Sname,o,Gradefrom S,SC,C,V_AVGwhere S.Sno=SC.Sno and o=V_o and Grade >V_AVG.AvgGrade ;--9.按系统计各系平均成绩在80分以上的人数,结果按降序排列;select Sdept,count(AvgGrade) Numfrom S,V_AVG_S_Gwhere S.Sno=V_AVG_S_G.Sno and AvgGrade > 80group by Sdeptorder by Num desc;--10通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM”并查询结果;insert into S(Sno,Sname,Ssex,Sage,Sdept) values('200215121','三毛','男',21,'IS');insert into S(Sno,Sname,Ssex,Sage,Sdept) values('200215124','紫薇','女',19,'IS');update V_IS set Sno='S1_MMM' where Sno='200215121'; update V_IS set Sno='S4_MMM' where Sno='200215124'; select *from V_IS;--11.通过视图V_IS,新增加一个学生记录('S12','YAN XI',19,'IS'),并查询结果;insert into V_IS(Sno,Sname,Sage,Sdept) values('S12','YAN XI',19,'IS');select *from V_ISwhere Sno='S12';--11.通过视图V_IS,新增加一个学生记录('S13','YAN XI',19,'MA'),并查询结果;insert into V_IS(Sno,Sname,Sage,Sdept) values('S13','YAN XI',19,'MA');-- Tip:由于该学生是MA系的,当有check约束时将会产生更新错误。
数据库实验四报告
《数据库原理与应用》实验报告实验名称:班级:学号:姓名:一、实验目的(1)了解Oracle数据库中的用户管理,模式,权限管理和角色管理。
(2)掌握为用户分配权限的方法。
(3)了解为不同用户分配不同权限的目的及原因。
二、实验过程1.用系统帐户sys登录数据库,分别创建数据库内部用户user_one和user_two,创建时自己为用户分配帐户口令。
语句:create user user_oneidentified by 123456default tablespace userstemporary tablespace tempquota unlimited on users;create user user_twoidentified by 123456default tablespace userstemporary tablespace tempquota unlimited on users;执行结果:2.为了使两位用户登录数据库请为其授予相应的权限。
语句:grant create session to user_one;grant create session to user_two;执行结果:3.授予用户user_one在自己模式下创建表的权限,在任何模式下删除表的权限,授予用户user_two可以在任何模式下创建表的权限,查询任何模式下表中数据的权限和在任何模式下创建视图的权限。
语句:grant create table,drop any table to user_one;grant create any table,create any view,select any table to user_two;执行结果:4.分别用user_one和user_two登录,写出相应的SQL语句验证为其授予的权限。
(如果建立的表中有主键约束,需要预先授予user_one和user_two用户create any index的权限。
大学生数据库实验课实验四报告
《数据库技术及应用》实验四、SQL语言数据定义语言DDL学生姓名学生班级学生学号指导老师重庆邮电大学计算机学院一.实验内容在Navicat for MySQL 中使用CREATE 命令完成对表、索引、视图、同义词的创建,使用DROP 命令完成对表、索引、视图、同义词的删除,使用ALTER 命令对表结构进行修改及完整性约束的增加、删除。
二.实验步骤1.启动Navicat for MySQL,在MySQL –新建连接中完成连接参数配置。
2.登录到本地数据库服务器后,连接到test 数据库上。
3.用SQL 语句(如下),建立如下所示的表student;4.同理5.同理6. 用Drop Table 语句删除表CourseAa。
7. 用Alter Table 语句更新表ChooseBb,添加一个属性名Bb4,类型Varchar, 长度20,完整性约束设为非空值,缺省值设为字符“系统测试值”。
8. 用Alter Table 语句更新表ChooseBb,添加一个属性名Bb5,类型Varchar, 长度10,完整性约束设为主码。
完成后,表ChooseBb 的设计如下所示。
9. 用Create View 语句建立一个视图View_Choosebb,生成的视图属性名(View_bb1,View_bb2,view_bb3), 其中View_bb1 对应于基表ChooseBb 的Bb1、View_bb2 对应于基表ChooseBb 的Bb4、view_bb3 对应于基表ChooseBb 的Bb5。
完成后,视图View_Choosebb 的设计如下所示。
10.用Drop View 语句删除视图View_Choosebb。
11. 用Create Index 语句对表ChooseBb 的Bb2 属性建立一个升序索引,索引名Index_bb2。
用Create Index 语句对表ChooseBb 的Bb4 属性建立一个降序索引,索引名Index_bb4。
数据库实验4实验报告
数据库实验4实验报告一、实验目的本次数据库实验 4 的主要目的是深入了解和掌握数据库中的索引、存储过程以及事务处理等关键技术,通过实际操作和实践,提高对数据库管理系统的运用能力,以及解决实际问题的能力。
二、实验环境本次实验使用的数据库管理系统为 MySQL 80,操作系统为Windows 10。
实验在个人电脑上进行,配置为英特尔酷睿 i5 处理器,8GB 内存。
三、实验内容与步骤(一)索引的创建与使用1、首先,创建了一个名为`students` 的表,包含`id`(主键,自增)、`name`(姓名)、`age`(年龄)、`grade`(年级)等字段。
```sqlCREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,grade VARCHAR(20));```2、向表中插入了一些示例数据,用于后续的实验操作。
```sqlINSERT INTO students (name, age, grade)VALUES ('张三', 18, '大一'),('李四', 19, '大二'),('王五', 20, '大三'),('赵六', 21, '大四');```3、为`name` 字段创建了一个普通索引,观察查询性能的变化。
```sqlCREATE INDEX idx_name ON students (name);```4、执行查询语句,对比创建索引前后的查询时间。
```sqlSELECT FROM students WHERE name ='张三';```(二)存储过程的创建与调用1、创建了一个简单的存储过程,用于计算两个数的和。
```sqlDELIMITER //CREATE PROCEDURE add_numbers(IN num1 INT, IN num2 INT, OUT result INT)BEGINSET result = num1 + num2;END//DELIMITER ;```2、调用存储过程,传递参数并获取结果。
数据库实验4 数据查询
实验4:数据查询1.实验目的:熟练掌握SQL SELECT语句,能够运用该语句完成各种查询。
2.实验要求:熟练掌握SQL SELECT语句,完成各个实验的内容,能够举一反三,灵活运用,能够通过本章介绍的一些基本语句,构造各种各样的查询。
3.实验环境与实验器材:实验环境:计算机,网络环境,投影设备。
实验相关软件:Window XP、SQL Server 2000。
4. 实验内容与步骤本实验通过使用Transact-SQL语句,对已经建立的数据库进行查询操作。
4.1 查询指定字段编写select语句,显示“学生档案表”中的学号、姓名、籍贯、专业以及班级字段。
第一步:打开“SQL查询分析器”,在界面上方选中“教学管理”数据库,在查询窗口编写如下语句:select 学号,姓名,籍贯,专业,班级from 学生档案表如图:第二步:单击“SQL查询分析器”界面上部的绿色三角形“执行查询”按钮,查询对话框下半部分显示查询结果,如图:4.2 通配符“*”的使用编写select语句,显示“学生选课表”中的所有字段。
第一步:打开“SQL查询分析器”,在界面上方选中“教学管理”数据库,在查询窗口编写如下语句:select * from 学生选课表如图:查询对话框下半部分显示查询结果,如图:4.3 基于字段的表达式在学生档案表中,按“XXXX年XX月XX日”的格式显示出生日期。
使用year 函数从“出生日期”字段中取得年份数据,再使用str函数将数值型的年份数据转换成字符型,最后使用“+”将字符串拼接起来。
第一步:打开“SQL查询分析器”,在界面上方选中“教学管理”数据库,在查询窗口编写如下语句:select 学号,姓名,性别,str(year(出生日期),4)+'年'+str(month(出生日期),2)+'月'+str(day(出生日期),2)+'日' as 出生日期from 学生档案表如图:查询对话框下半部分显示查询结果,如图:4.4 用WHERE子句过滤记录在学生档案表中查询所有出生日期在“1983-01-01”至“1984-12-31”之间的所有学生的信息。
《数据库实验四》实验报告
insert into v_cus values('C012','Google')
--在视图上更新
update v_order set订购日期='2011-11-29'
--在视图上删除
delete from v_cus
where客户号='C012'
《数据库》实验报告
题目:视图的定义和操作
学号
姓名
日期:
实验内容与完成情况:
一、实验目的:理解视图的概念,掌握视图的使用方法。
二、实验内容:定义视图,并在视图上完成查询、插入、更新和删除操作。
三.、程序源代码:
--1
--1)、基于单个表按投影操作定义视图
create view v_cus as
select客户号,客户名称
from客户
--使用
select * from v_cus
--2)、基于单个表按选择操作定义视图
create view v_order as
select *
from订购单
where客户号='C001'
--使用
select * from v_order
--3)、基于单个表按选择和投影操作定义视图
create view v_cuss as
select客户名称,联系人,电话
from客户
where客户号='C003'
--使用
select * from v_cuss
--4)、基于多个表根据连接操作定义视图
create view v_join as
t客户.*,订单号,订购日期
数据库实验报告四
数据库实验报告四实验目的要求学生熟练掌据视阅创建和修改的方法,掌握视图中数据的操作方法,掌握索引的创建方法。
二.实验内容(1)利用SSMS管理器实现视图的创建,对视图中数据的操作。
(2)在查询分析器中,利用SQL语句实现视图的创建。
(3)利用SSMS管理器实现索引的创建。
(4)在查询分析器中,利用SQL语句实现索引的创建三.实验要求(1)从FTP中下载实验需要的JXGL数据库并将它附加或还原到SSMS管理器中(2)利用SSMS管理器和SQL语句,按题目要求创建视图和索引。
(3)在实验报告中需要有题目,对应的语句(不要截图,直接在word文档中输入)。
对于每道涉及视图的题需要一一个执行对视图进行查询的结果截图,截图样式看补充部分。
涉及索引的题只需实现的语句。
四.实验练习实验9.1使用SQL server management studio 直接创建视图SELECT dbo.S.SNO, dbo.SC.GRADE, dbo.S.SNAME, AMEFROM dbo.C INNER JOINdbo.SC ON O = O INNER JOINdbo.S ON dbo.SC.SNO = dbo.S.SNO实验9.2使用T-SQL语句创建与使用视图(1)在JXGL语句数据库中创建视图 view_s_grade,查询‘数据结构’考试成绩大于80的学生的SNO,SNAME,SDEPT。
USE JXGLIF EXISTS(SELECT NAME FROM Sysobjectswhere name ='view_s_grade' and xtype='v')DROP VIEW view_s_gradegocreate VIEW view_s_gradeASSELECT S.SNO,SNAME,SDEPTFROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON O=OWHERE AME='数据结构' and sc.GRADE>80go(2)利用数据库view_s_grade查看数据信息select*from view_s_grade(3)修改视图alter VIEW view_s_gradeas select S.SNO,SNAME,SDEPTFROM S JOIN SC ON S.SNO=SC.SNO JOIN C ON O=OWHERE AME='数据结构'(4)删除数据库use JXGLgodropVIEW view_s_gradeGO实验9.5,使用sql sever management studio直接创建索引文件实验9.6,使用T-SQL 语句创建索引文件1. 创建索引文件ix_dept,关键字段为sdept ,升序 use JXGL gocreate INDEX IX_sdept on s(sdept) go∙利用视图完成下列查询∙查询平均成绩为90分以上的学号,姓名和成绩新建视图查询语句SELECTdbo.S.SNO, dbo.S.SNAME, dbo.SC.GRADE FROMdbo.S INNER JOINdbo.SC ON dbo.S.SNO = dbo.SC.SNOGROUP BY dbo.S.SNO, dbo.S.SNAME, dbo.SC.GRADE HAVING (AVG(dbo.SC.GRADE) > 90)(2)查询各科成绩均高于平均成绩的学生的学号,姓名,课程和成绩SELECT dbo.S.SNO, dbo.S.SNAME,Odbo.SC.GRADEFROM dbo.S INNER JOIN dbo.SC ON dbo.S.SNO =dbo.SC.SNO GROUP BY dbo.S.SNO, dbo.S.SNAME,O,dbo.SC.GRADEHAVING (dbo.SC.GRADE > AVG(dbo.SC.GRADE)(3)按系统记各系平均成绩在80分以上的人数,结果按降序排列创建视图CREATE VIEW V_AVG_S_GAS SELECT SC.SNO,COUNT(O)CONUTCNO,AVG(GRADE)AVGGRADEFROM S,C,SC WHERE S.SNO=SC.SNOAND O=OGROUP BY SC.SNO查询语句SELECT SDEPT,COUNT(AVGGRADE)NUM FROM S,V_AVG_S_GWHERES.SNO=V_AVG_S_G.SNOANDAVGGRADE>80GROUP BY SDEPTORDER BY NUM DESC五、实验结果与分析、总结与思考:在这过程中,我对视图更加了解了,明白只有创建好一个正确的视图,我们才能进行下一步的查询工作,准备工作非常重要。
数据库实验报告4
数据库实验报告4数据库实验报告4引言:数据库是现代信息管理的重要工具,广泛应用于各个领域。
本实验报告将介绍数据库实验4的内容,主要包括数据库的备份与恢复、数据库的性能优化以及数据库的安全性。
一、数据库的备份与恢复数据库的备份与恢复是数据库管理中非常重要的一环。
在实验中,我们使用了MySQL数据库,通过备份和恢复操作来保障数据的安全性。
1. 数据库的备份数据库的备份可以通过多种方式实现,常见的有物理备份和逻辑备份。
物理备份是将数据库的物理文件进行拷贝,包括数据文件、日志文件等;逻辑备份则是将数据库的逻辑结构进行导出,如SQL语句等。
2. 数据库的恢复数据库的恢复是在数据库出现故障或数据丢失时进行的操作。
在实验中,我们使用了MySQL提供的恢复工具来进行数据库的恢复操作。
二、数据库的性能优化数据库的性能优化是提高数据库查询和操作效率的关键。
在实验中,我们通过索引的创建和查询优化来优化数据库的性能。
1. 索引的创建索引是数据库中用于提高查询效率的重要手段。
在实验中,我们通过创建合适的索引来加快数据库的查询速度。
索引的创建需要考虑字段的选择、索引类型的选择以及索引的维护等因素。
2. 查询优化查询优化是通过调整查询语句和数据库的结构来提高查询效率的方法。
在实验中,我们通过分析慢查询日志和使用数据库的性能监控工具来进行查询优化。
通过调整查询语句的写法、添加合适的索引以及优化数据库的配置参数等方式,可以显著提高数据库的查询性能。
三、数据库的安全性数据库的安全性是保护数据库中数据不受非法访问和恶意操作的重要保障。
在实验中,我们通过用户权限管理和数据加密来提高数据库的安全性。
1. 用户权限管理用户权限管理是通过为用户分配合适的权限来控制其对数据库的访问和操作。
在实验中,我们通过创建不同的用户并为其分配不同的权限来实现数据库的安全管理。
2. 数据加密数据加密是通过对数据库中的敏感数据进行加密处理,确保数据在传输和存储过程中不被窃取或篡改。
数据库实验报告 (4)
一实验题目1.索引的建立和删除操作2.视图的创建、修改、更新和查询操作二实验目的1.掌握数据库索引建立与删除操作,掌握数据库索引的分类,并了解建立数据库索引的意义、作用。
2.掌握视图的创建和查询操作,理解视图的使用,理解实图在数据库安全性中的作用。
三实验内容1.索引的建立和删除操作(1)在S表中,建立按照sno升序的惟一性索引snoIDX。
(2)在SC表中,建立按照学号升序和课程号降序的唯一性索引scIDX。
(3)在S表中,按照生日建立一个非聚簇索引birthdayIDX。
(4)在C表中,建立一个按照课程名升序的聚簇索引cnameIDX。
(5)删除索引cnameIDX。
2.视图的创建、修改、更新和查询操作(1)建立一个关于所有女生信息的视图S_GIRL。
(2)将各系学生人数,平均年龄定义为视图V_NUM_A VG(3)建立一个视图反映学生所选课程的总学分情况TOTAL_CREDIT。
(4)建立一个所有学生课程成绩的视图S_GRADE,包括基本学生信息,课程信息和成绩。
(5)在视图S_GRADE基础之上,建立一个两门课以上成绩不及格的学生情况视图FAIL_GRADE。
(6)建立一个至少选修了4门课及4门课以上的学生信息的视图SC_FOUR。
(7)修改视图S_GIRL,要求只显示1997年以前出生的女生信息。
(8)在视图FAIL_GRADE查询不及格超过2门课的学生信息。
(9)删除视图S_GRADE。
(10)通过视图S_GIRL,将“王丹”的名字修改为“汪丹”,并查询结果。
(11)通过视图S_GIRL,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,1996-8-8),并查询结果。
(12)通过视图S_GIRL,删除1995年出生的女生信息,并查询结果。
(13)通过视图S_GRADE,将“汪丹”的名字修改为“王丹”,是否可以实现,请说明原因。
(14)通过视图COMPUTE_A VG_GRADE,将“4121090301”学生的平均分改为90分,是否可以实现,请说明原因。
数据库实验4-数据完整性控制
5.触发器 触发器可以看成是一类特殊的存储过程,在满足某个特定条件时自
动触发执行,是提高数据库服务器性能的有力工具。 触发器分为三类,更新触发器、插入触发器和删除触发器。 能够定义触发器的用户有表的所有者、系统管理员、拥有创建触发
器权限且拥有对操作对象相应操作权限的用户。 1) 定义表TAB,并在其上定义触发器TR1,在对TAB的插入和更新前
SAGE NUMERIC(3) CONSTRAINT C4 CHECK(SAGE<30),
CONSTRAINT STUDENTKEY PRIMARY KEY(SNO) );
2) 修改表student中的完整性约束,去掉对性别的限制,并将对年龄 的限制由小于30改为小于40。
ALTER TABLE STUDENT DROP CONSTRAINT C3; ALTER TABLE STUDENT DROP CONSTRAINT C4; ALTER TABLE STUDENT ADD CONSTRAINT C4 CHECK(SAGE<40);
的值只允许取“男”或“女”;定义表sc,属性GRADE的值在0~100之 间 Student表和sc表的其他信息参加上面的例子 4) 用户定义的元组上约束条件 CHECK短语不仅能够定义属性上的约束条件,而且还能允许用户 定义元组级的约束条件。 定义表student,要求当学生性别为男时,其名字不能以Ms.打头。其 他信息如之前的例子。 4.CONSTRAINT完整性约束命名子句 在定义表时利用约束命名子句对完整性约束条件命名,能够灵活地 增加或删除一个完整性约束条件。 1) 定义表student,要求学号在90000~99999之间,姓名不能取空值, 年龄小于30,性别只能是“男”或“女”。要求全部用约束命名子句 实现,主码约束也要用约束命名子句实现,列信息见之前例子 2) 修改表student中的完整性约束,去掉对性别的限制,并将对年龄 的限制由小于30改为小于40。
数据库实验4 数据查询
实验4:数据查询1.实验目的与要求:1.1 了解、理解、掌握1.2 了解、理解、掌握1.3 了解、理解、掌握2.实验环境与实验器材:计算机,网络环境,投影设备。
实验相关软件:Window xp、SQL Server 2000。
2*.实验预备知识2.1 SELECT语句的基本语法如下:SELECT [ALL|DISTINCT][TOP n1 [PERCENT] [WITH TIES]]<select_list><select_list>::={*|{table_name|view_name|table_alias}.*|{column_name}[[AS]column_alias]}[, (2)说明:ALL:默认设置,指定在结果集中可以显示重复行。
DISTINCT:指定在结果集中只能显示唯一行,空值被认为相等。
TOP n1:指定只从查询结果集中输出前n1行。
n1是介于0—4294967295之间的整数。
PERCENT:从结果集中输出前百分之n行,当指定时带PERCENT,n的值必须介于0—100之间。
WITH TIES:指定从基本结果集中返回附加的行,这些行包含与出现在TOP n(PERCENT)行最后的ORDER BY列中的值相等的值。
如果指定了ORDER BY字句,则只能指定TOP…WITH TIES。
<select_list>:为结果选择的列。
选择列表是以逗号分隔的一系列表达式。
*:指定在子句内返回所有表和视图内的所有列,或者是返回指定的表或视图的列,并按它们在表或视图中的顺序返回。
column_name:要返回的列名,必要时限定column_name以避免二义性引用,当FROM子句中的两个表内包含重复名的列时会出现该情况。
column_alias:是查询结果集内替换列名的可选名。
2.2 数据库的备份与恢复1)创建备份设备在根目录下选择“管理”-“备份”项目,右击鼠标,从弹出的快捷菜单中选择“新建备份设备”,此时弹出“备份设备属性-新设备”对话框。
数据库实验报告4
引言:正文内容:1.实验环境1.1数据库系统本次实验使用MySQL数据库系统,版本号为8.0。
MySQL是一种开源的关系型数据库管理系统,广泛应用于大型企业和互联网应用中。
1.2实验数据实验数据采用了一个包含500万条记录的学生信息表。
该表包括学生ID、姓名、年龄、性别等字段,用于模拟真实的数据库环境。
2.查询优化2.1查询优化的概念查询优化是指通过调整查询语句和索引设计,使得查询能够以更高效和更快速的方式执行。
查询优化是数据库性能优化的重要手段,可以提高数据库查询的响应时间和吞吐量。
2.2查询优化技术2.2.1索引优化索引是数据库中用于加快查询速度的数据结构。
可以通过创建适当的索引,优化查询的性能。
在本次实验中,我们对学生信息表的姓名字段创建了B+树索引,以加速按姓名查询的速度。
2.2.2查询重写查询重写是指通过改变查询语句的结构,使得查询能够以更高效的方式执行。
例如,可以将一个复杂的查询拆分成多个简单的查询,或者使用子查询替代复杂的关联查询。
2.2.3统计信息收集统计信息包括表的行数、列的唯一值数量、列的最大值和最小值等。
数据库系统可以根据统计信息来选择查询执行的最优路径。
在本次实验中,我们使用了MySQL的统计信息收集工具对学生信息表进行统计信息收集。
3.索引设计3.1索引的概念索引是数据库中对表中一列或多列的值进行排序的数据结构。
通过使用索引,可以加快对表的查询和排序操作的速度。
3.2索引的种类3.2.1B+树索引B+树索引是一种高效的索引结构,适用于范围查询和排序操作。
在本次实验中,我们使用B+树索引对学生信息表的姓名字段进行了索引设计。
3.2.2哈希索引哈希索引是一种适用于等值查询的索引结构,适用于对主键或唯一键进行查询。
在本次实验中,我们未对学生信息表的其他字段创建哈希索引。
3.3索引设计原则3.3.1选择适当的索引列选择适当的索引列是索引设计的关键。
通常应选择具有高选择性和频繁查询需求的列作为索引列。
数据库实验4-实验报告
数据库实验4-实验报告数据库实验 4 实验报告一、实验目的本次数据库实验 4 的主要目的是深入理解和掌握数据库中的某些关键概念和操作,通过实际的操作和实践,提高对数据库管理系统的应用能力,增强解决实际问题的技能。
二、实验环境本次实验使用的数据库管理系统为_____,运行环境为_____操作系统,使用的开发工具为_____。
三、实验内容与步骤(一)创建数据库首先,打开数据库管理系统,使用相应的命令或操作界面创建了一个名为“_____”的数据库。
在创建过程中,指定了数据库的一些基本属性,如字符集、排序规则等,以满足后续数据存储和处理的需求。
(二)创建数据表在创建好的数据库中,根据实验要求创建了若干个数据表。
例如,创建了一个名为“students”的表,用于存储学生的信息,包括学号(student_id)、姓名(student_name)、年龄(age)等字段。
创建表时,仔细定义了每个字段的数据类型、长度、是否允许为空等属性,以确保数据的准确性和完整性。
(三)数据插入接下来,向创建的数据表中插入了一些测试数据。
通过执行相应的插入语句,将学生的具体信息逐个插入到“students”表中。
在插入数据的过程中,特别注意了数据的格式和合法性,避免了因数据错误导致的插入失败。
(四)数据查询完成数据插入后,进行了各种查询操作。
使用了简单的查询语句,如“SELECT FROM students”来获取所有学生的信息。
还使用了条件查询,如“SELECT FROM students WHERE age >18”来获取年龄大于 18 岁的学生信息。
通过这些查询操作,熟悉了如何从数据库中获取所需的数据。
(五)数据更新对已有的数据进行了更新操作。
例如,通过执行“UPDATE students SET age = 20 WHERE student_id =1”的语句,将学号为 1 的学生的年龄更新为20 岁。
在更新数据时,谨慎操作,确保只更新了预期的记录。
万常选版-数据库实验报告-4-数据库完整性
实验4:数据库完整性第1个实验.完整性定义——第6章实验十重新创建BookDB数据库中5张基本表,要求完成以下完整性约束:(1)创建列级约束:分别为BookClass表、Book表、Reader表建立主键。
(2)创建列级约束:为Borrow表的借阅日期设置默认值为系统当前日期。
(3) 创建列级约束:给Reader表创建约束,要求读者编号共8位,以R开头,后续四位为当前系统时间的年份,最后三位为流水号,如R。
(4)创建列级约束:给Reader表中读者编号建立约束,要求性别为女或男。
(5)创建元组级约束:为Reader表创建约束,要求给借书数量设置默认值0,身份证号要求唯一。
(6)创建元组级约束:为Reader表创建约束,要求读者年龄在18岁以上,且读者借书数量不得超过8本。
(7)创建元组级约束:为Book表创建约束,要求图书编号共10位,以B开头,后续四位为当前系统时间的年份,最后五位为流水号,如B。
(8)创建元组级约束:为Book表创建约束,要求图书单价在10元至80元之间。
(9)创建元组级约束:为Borrow表创建约束,要求图书归还日期大于借阅日期。
(10)创建表级约束:为Borrow表创建外键。
第2个实验.完整性检查——第6章实验十一分析下列更新操作对关系完整性约束的影响,如果更新操作违背了完整性约束条件,请给出合理处理方法。
(1)给BookClass表插入元组('001','机械类')。
(2)给Reader表插入元组('R','欧阳','M','','欧氏公司',0)。
(3)给Borrow表插入元组('R','B','','',null)(4)删除读者R的信息。
(5)删除读者R的信息。
(6)将R读者所借图书B的借阅日期更新为2012年4月22日。
数据库实验4表的查询操作(4学时)
1 实验四表的查询操作(4学时)【实验目的】了解SQL 语言的使用,进一步理解关系运算,巩固数据库的基础知识。
【实验要求】掌握利用Select 语句进行各种查询操作:单表查询、多表连接及查询、嵌套查询、集合查询等。
【实验内容】在实验三创建并插入数据的表(Student ,Course ,SC ,Teacher ,TC )的基础上,完成以下操作。
1.对实验步骤中所给示例进行验证。
2.参考所给示例,完成下列各种查询操作。
(1)将教师‘罗莉’的名字改为‘罗莉莉’。
(2)将两个同学(数据自己临时设置,用后即删除)的两门课程的成绩以运行sql 程序文件的形式插入score 表中。
该题用以验证、理解和掌握关系模型的完整性规则;(3)求每门课的平均成绩,并把结果存入average 表(自行设计并创建);(4)将学生“马丽”的年龄改为2424;;(5)将所有学生的zipcode 属性列值填补上;(6)将average 表中的所有课程的平均成绩置零;(7)删除average 表中的课程号为‘表中的课程号为‘c007c007c007’的平均成绩记录;’的平均成绩记录;(8)删除所有average 表中平均成绩记录;(9)建立一个临时学生信息表()建立一个临时学生信息表(tstudent tstudent tstudent)),删除该表中的学号含‘101’的所有学生记录。
(1010)查询全体学生的学号与姓名;)查询全体学生的学号与姓名;(1111)查询全体学生的学号、姓名、所属系;)查询全体学生的学号、姓名、所属系;(1212)查询全体学生的详细记录;)查询全体学生的详细记录;(1313)查询全体学生的姓名及其年龄;)查询全体学生的姓名及其年龄;(1414)查询全体学生的姓名、出生年份;)查询全体学生的姓名、出生年份;(1515)查询所有修过课的学生的学号;)查询所有修过课的学生的学号;(1616)查询“计算机系”班全体学生名单;)查询“计算机系”班全体学生名单;(1717)查询查询所有年龄在)查询查询所有年龄在23岁以下的学生姓名及其年龄;(1818)查询考试成绩有不及格的学生的学号;)查询考试成绩有不及格的学生的学号;(1919)查询年龄在)查询年龄在20至22岁之间的学生姓名、系和年龄;(2020)查询年龄不在)查询年龄不在20至22岁之间的学生姓名、系和年龄;(2121)查询“)查询“计算机系”和“电商系”的学生的姓名;(2222)查询既不是“计)查询既不是“计1111”也不是“计”也不是“计6161”班的学生的姓名和班级信息;”班的学生的姓名和班级信息;(2323)查询学号为“)查询学号为“04262002”的学生的详细情况;(2424)查询学号以“)查询学号以“04262”打头的学生信息;(2525)查询所有姓“张”学生的学号、姓名、性别、年龄;)查询所有姓“张”学生的学号、姓名、性别、年龄;(2626)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;)查询名字中第二个字有“海”字的学生的学号、姓名、性别、年龄;(2727)查询所有不姓“刘”学生的姓名;)查询所有不姓“刘”学生的姓名;(2828)查询课程号以“)查询课程号以“C ”开头的最后两个字母为“”开头的最后两个字母为“050505”的课程号和课程名;”的课程号和课程名;(2929)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,)某些学生选修某门课程后没有参加考试,所以有选修课记录,但没有考试成绩,试查找缺少考试成绩的学生和相应的课程号;(3030)查找全部有成绩记录的学生学号、课程号;)查找全部有成绩记录的学生学号、课程号;(3131)查找“计算机系”年龄在)查找“计算机系”年龄在22岁以下的学生学号、姓名;(3232)查找选修了“)查找选修了“)查找选修了“C001C001C001”号课程的学生学号及其成绩,查询结果按分数降序排序;”号课程的学生学号及其成绩,查询结果按分数降序排序;(3333))查询全体学生情况,查询全体学生情况,查询结果按所在系升序排列,查询结果按所在系升序排列,查询结果按所在系升序排列,对同一系中的学生按年龄降序对同一系中的学生按年龄降序排列;(3434)查询学生总人数;)查询学生总人数;)查询学生总人数;(3535)查询选修了课程的学生人数;)查询选修了课程的学生人数;)查询选修了课程的学生人数;(3636)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;)在所有课程中查询最高分的学生学号和成绩;(3737)查询学习“)查询学习“)查询学习“C001C001C001”课程的学生最高分数;”课程的学生最高分数;”课程的学生最高分数;(3838)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;)计算各个课程号与相应的选课人数;(3939)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;)查询“计算机系”选修了两门课程以上的学生学号、姓名;(4040)自然连接)自然连接student 和score 表;表; (4141)使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课))使用自身连接查询每一门课程的间接先行课(即先行课的先行课)(4242)使用复合条件连接查询选修“)使用复合条件连接查询选修“)使用复合条件连接查询选修“c001c001c001”号课程且成绩在”号课程且成绩在90分以上的所有同学;分以上的所有同学;(4343)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;)使用复合条件连接查询每个学生选修的课程名及其成绩;(4444)查询选修了全部课程的学生;)查询选修了全部课程的学生;)查询选修了全部课程的学生;(4545)查询所有选修了)查询所有选修了C001号课程的学生学号、姓名;号课程的学生学号、姓名;(4646)查询选修了课程)查询选修了课程C001或c007的学生学号、姓名;的学生学号、姓名;(4747)查询“计算机系”的学生及年龄不大于)查询“计算机系”的学生及年龄不大于23岁的学生;岁的学生;(4848)查询既选修了课程)查询既选修了课程C001又选修了课程c007的所有学生学号、姓名;的所有学生学号、姓名;(4949)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;)查询选修了课程名为“数据库原理”的学生的学号、姓名、性别、年龄;(5050)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;)查询其他班中比“计算机系”所有学生年龄都小的学生名单;(5151)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;)查询与“夏天”在同一个系学习的学生学号、姓名、性别、年龄;(5252)建立“计算机系”学生的视图)建立“计算机系”学生的视图1;(5353)建立“计算机系”学生的视图)建立“计算机系”学生的视图2,并要求进行修改与插入时,仍须保证该视图只有“计算机系”班学生;有“计算机系”班学生;(54)建立“计算机系”选修了“C001”课程的学生的视图,定义视图名为“v_cs_C001_student1v_cs_C001_student1””; (5555)建立“计算机系”班选修了“)建立“计算机系”班选修了“)建立“计算机系”班选修了“C001C001C001”课程且成绩在”课程且成绩在90分以上的学生的视图,定义视图名为“义视图名为“cs_c001_student2cs_c001_student2cs_c001_student2””; (5656)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“)定义一个反映学生年龄的视图,定义视图名为“v_birth_student v_birth_student v_birth_student””; (5757)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“)将学生表中所有女生记录定义为一个视图,视图名为“v_female_student v_female_student v_female_student””; (5858)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“)将学生的学号及其平均成绩定义为一个视图,视图名为“v_average_student v_average_student v_average_student””; (5959)在“计算机系”学生视图中找出年龄小于)在“计算机系”学生视图中找出年龄小于22岁的学生;岁的学生;(6060)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“)利用视图查询“计算机系”选修了“C001C001C001”课程的学生;”课程的学生;”课程的学生;(6161)通过()通过()通过(525252)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;)中的“计算机系”视图修改某个学生的名字;(6262)通过()通过()通过(535353)中的“计算机系”视图,插入一个新学生记录。
数据库实验4-实验报告
实验四存储过程、触发器与索引一、实验目的1.熟悉大型数据库实验环境,以MS SQL SERVER为例。
2.掌握视图。
3.掌握存储过程与触发器。
4.掌握MS SQL SERVER的导入和导出。
5.掌握MS SQL SERVER的索引。
二、实验内容(1)使用“实验一”中的数据库“abc”,创建一个视图,生产厂家为“北京”且价格低于北京生产的产品的平均价格,输出产品的名称、价格和生产厂家。
(2)使用“实验一”中的数据库“abc”,创建一个带有输入参数的存储过程proc_abc,查询指定职工的销售记录,用户输入职工编号,存储过程返回职工名称、产品名称、销售日期、销售数量,假如执行存储过程时所提供的“职工编号”不存在,存储过程应给予一定的提示。
(3)使用“实验一”中的数据库“abc”,练习使用游标,写出按如下报表形式显示结果的SQL语句,该报表查询每年每种产品总销售金额,(总销售金额=价格*销量),报表显示格式如下所示:年产品号产品名销售总量总销售金额(万元)2001年 2 AAA 590 3.22001年 5 BBB 644 23.32002年 1 CCC 32 0.2(4)使用“实验一”中的数据库“abc”,练习使用触发器,在销售表上创建触发器tr_updateprice,每次新增销售记录时,自动更新产品表的单价,更新方法是:每增加一笔销售记录,就将该产品的单价减去1块钱。
(5)将100万行网络连接监控数据Netflow导入数据库,创建多个索引,观察创建索引对数据库文件大小的影响;并设计不同的查询语句来观察索引对查询效率的影响;可以尝试将100万行记录扩展为1000万行,然后再做索引和查询的实验?文件见附件。
三、实验结果和代码use abcgocreate view abcasselect CPM,JG,SCCJfrom CPBwhere SCCJ like'@北京@'andJG<(select AVG(JG)from CPBwhere SCCJ like'@北京@');create procedure proc_abc@zgh_yh nchar(6)asif exists(select zgh from xsryb where zgh=@zgh_yh)select xsryb.xm,cpb.cpm,xsqkb.xsrq,xsqkb.xsslfrom xsryb,cpb,xsqkbwhere xsqkb.cph=cpb.cph and xsqkb.zgh=xsryb.zghand xsryb.zgh=@zgh_yhprint'存在'if not exists(select zgh from xsryb where zgh=@zgh_yh)print'提供的职工号不存在'exec proc_abc@zgh_yh='G11';declare abc_cursor cursor forselect year(xsrq),cpb.cph,cpb.cpm ,xsqkb.xssl ,cpb.jg*xsqkb.xsslfrom cpb,xsqkbwhere xsqkb.cph=cpb.cphopen abc_cursordeclare@year_abc int,@cph_abc nchar(6),@cpm_abc nvarchar(20),@xszl_abc int,@xsze_abc int fetch next from abc_cursor into @year_abc, @cph_abc,@cpm_abc ,@xszl_abc,@xsze_abc while@@FETCH_STATUS= 0beginif(@year_abc in(select年from nxsb)and @cph_abc in(select产品号from nxsb where年=@year_abc))beginupdate nxsb set销售总量=销售总量+@xszl_abcwhere年=@year_abc and产品号=@cph_abcupdate nxsb set总销售金额=总销售金额+@xsze_abcwhere年=@year_abc and产品号=@cph_abcendif (@year_abc not in(select年from nxsb))begininsert into nxsbvalues(@year_abc,@cph_abc,@cpm_abc,@xszl_abc,@xsze_abc)endif(@year_abc in(select年from nxsb)and @cph_abc not in(select产品号from nxsb where 年=@year_abc))begininsert into nxsbvalues(@year_abc,@cph_abc,@cpm_abc,@xszl_abc,@xsze_abc)endfetch next from abc_cursor into @year_abc, @cph_abc,@cpm_abc ,@xszl_abc,@xsze_abcendcreate trigger tr_updatepriceon xsqkb after insertasupdate cpbset jg=jg-1where cph=(select cph from inserted)go(触发器插入条件:insert into xsqkb(zgh,cph,xsrq,xssl)values('G03','P02','2000-1-1','30'))create clustered index netflow_s1on [Netflow-MillionRecords](idauto)create index netflow_s2on [Netflow-MillionRecords](ipLayerProtocolCode) create index netflow_s3on [Netflow-MillionRecords](parsedDate)运行之前的产品表:运行触发器之后:创造索引前大小:创建索引后大小:查询语句:select*from[Netflow-MillionRecords] where ipLayerProtocolCode='UDP'创建netflow_s2之前需要3秒创建后时间变短查询语句:select * from [Netflow-MillionRecords]where parsedDate<'2013-04-01 12:50:00'创建netflow_s3之前需要4s四、实验报告要求这次实验让我熟悉了MS SQL Sever的使用方法,对于视图、存储过程与触发器也有了一定的了解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连海事大学数据库原理课程实验报告(2016-2017学年第二学期)实验四数据更新班级:智能科学与技术1班学号:***********名:***指导教师:**成绩:大连海事大学数据库原理课程实验大纲实验名称:实验四数据更新实验学时: 2适用专业:智能科学与技术实验环境: SQL.serve2008执笔者:刘宇轩编写日期: 2017-5-291实验目的(1)掌握SQL数据更新语句的基本使用方法,如UPDATE、DELETE、INSERT。
(2)掌握更新语句条件中的嵌套查询使用方法。
2实验内容2.1 掌握SQL更新语句的基本使用方法(1)INSERT基本语句。
(2)UPDATE基本语句。
(3)DELETE基本语句。
2.2 掌握SQL更新语句的高级使用方法(1)INSERT批量插入语句。
(2)UPDATE语句使用嵌套子查询。
(3)DELETE语句使用嵌套子查询。
3实验要求(1)深入复习教材第三章SQL有关更新语句。
(2)根据书上的例子,针对TPCH数据库模式设计各种更新语句,每种类型更新语句至少要设计一个,描述清楚数据更新要求,运行你所设计的更新语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。
也可以按照附1所列示例查询做实验。
(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。
4实验步骤4.1 掌握SQL更新语句的基本使用方法(1)INSERT基本语句(插入全部列的数据)。
插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERTINTOCUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT )VALUES(8,'剑心','北海道',5,594579,13.3,'同心','无')原图插入后图(2)INSERT基本语句(插入部分列的数据,要求随机生成某些数字列或者字符列的数据)。
插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RANDOM函数随机生成数值INSERTINTOORDERS(ORDERKEY,CUSTKEY,ORDERSTATUS,TOTALPRICE,ORDERDATE,ORDERPRIORITY,CLER K,SHIPPRIORITY,COMMENT)VALUES(8,3,RAND()*10,10000,'2015-4-4',RAND()*1000,RAND()*1000,RAND()*1000,'无')原图更新图(3)UPDATE基本语句(修改所有记录的某些列的值)。
修改所有零件的零售价,使其价格上浮10%UPDATE PARTSET retailprice=retailprice*1.1原图更新图(4)UPDATE基本语句(修改部分记录的某些列的值)。
修改顾客张三的国籍UPDATE CUSTOMERSET NATIONKEY=2WHERE NAME='张三'原图更新后图(5)DELETE基本语句(删除所有记录)。
删除所有订单记录DELETEFROM lineitemWHERE orderkey IN(SELECT orderKEYFROM orders)DELETEFROM ORDERS(6)DELETE基本语句(删除部分记录)。
删除2016年1月1日之前订单记录DELETEFROM lineitemWHERE orderkey IN(SELECT orderKEYFROM ordersWHEREORDERDATE<'2016-1-1')DELETEFROM ORDERSWHERE ORDERDATE<'2016-1-1'4.2 掌握SQL更新语句的高级使用方法(7)INSERT基本语句(插入全部列的数据)。
插入一个新顾客的记录,要求每列都给一个合理的值插入一条订单明细记录,要求每列都给一个合理的值INSERTINTOCUSTOMER(CUSTKEY,NAME,ADDRESS,NATIONKEY,PHONE,ACCTBAL,MKTSEGMENT,COMMENT )VALUES(8,'剑心','北海道',5,594579,13.3,'同心','无')原图插入后图(8)INSERT基本语句(插入部分列的数据,要求随机生成某些数字列或者字符列的数据)。
插入一条订单记录,可以只给出必要的几个字段的值,其中数值字段可以用RANDOM函数随机生成数值INSERTINTOORDERS(ORDERKEY,CUSTKEY,ORDERSTATUS,TOTALPRICE,ORDERDATE,ORDERPRIORITY,CLER K,SHIPPRIORITY,COMMENT)VALUES(8,3,RAND()*10,10000,'2015-4-4',RAND()*1000,RAND()*1000,RAND()*1000,'无')原图更新图(9)UPDATE基本语句(修改所有记录的某些列的值)。
修改所有零件的零售价,使其价格上浮10%UPDATE PARTSET retailprice=retailprice*1.1原图更新图(10)UPDATE基本语句(修改部分记录的某些列的值)。
修改顾客张三的国籍UPDATE CUSTOMERSET NATIONKEY=2WHERE NAME='张三'原图更新后图(11)DELETE基本语句(删除所有记录)。
删除所有订单记录DELETEFROM lineitemWHERE orderkey IN(SELECT orderKEYFROM orders)DELETEFROM ORDERS(12)DELETE基本语句(删除部分记录)。
删除2016年1月1日之前订单记录DELETEFROM lineitemWHERE orderkey IN(SELECT orderKEYFROM ordersWHEREORDERDATE<'2016-1-1')DELETEFROM ORDERSWHERE ORDERDATE<'2016-1-1'(13)INSERT批量插入语句(把一个查询结果插入到另外一个表中)。
创建一个顾客购物统计表,记录每个顾客及其购物总数和总价等信息CREATE TABLE CUSTORDER(CUSTKEY INT,NAME VARCHAR(25),QUANTITY REAL,TOTALPRICE REAL)INSERTINTO CUSTORDER(CUSTKEY,NAME,QUANTITY,TOTALPRICE) SELECT C.CUSTKEY,,L.QUANTITY,O.totalpriceFROM CUSTOMER C,ORDERS O,LINEITEM LWHERE C.CUSTKEY=O.CUSTKEY AND L.ORDERKEY=O.ORDERKEY(14)INSERT批量插入语句(使某个表的数据量倍增)。
把零件表的数据插入零件表中,多次重复执行,知道总记录数达到50万为止,记录下你执行了多少次?执行过程中你是如何保证实体完整性约束的INSERTINTO PART(PARTKEY,NAME,SIZE,RETAILPRICE)SELECT PARTKEY+(SELECT COUNT(*)FROM PART),NAME,SIZE,RETAILPRICEFROM PART每次把PART加原表元组数,保证完整性约束(15)UPDATE语句使用嵌套子查询(利用一个表中的数据来判断是否修改另外一个表中的数据)。
修改顾客张三的订单明细记录中111号零件的折扣UPDATE LINEITEMSET DISCOUNT=0.90WHERE ORDERKEY IN(SELECT ORDERKEYFROM ORDERS O,CUSTOMER CWHERE O.CUSTKEY=C.CUSTKEY AND='张三')原表如图更新之后张三的折扣为0.90(16)UPDATE语句使用嵌套子查询(利用一个表中的数据修改另外一个表中的数据)。
利用LINEITEM表中的详细信息修改对应订单中的totalprice利用PARTSUPP 表中的供应价格来修改LINEITEM中的EXTENDEDPRICE,假设:UPDATE LINEITEMSET EXTENDEDPRICE=PS.SUPPLYCOST*lineitem.QUANTITY*LINEITEM.DISCOUNTFROM PARTSUPP PSWHERE PS.PARTKEY=lineitem.partkey AND PS.SUPPKEY=lineitem.suppkey原图更新之后图UPDATE ORDERSSET ORDERS.TOTALPRICE=PS.SUPPLYCOST*QUANTITYFROM LINEITEM L,PARTSUPP PSWHERE L.ORDERKEY IN(SELECT L2.ORDERKEYFROM LINEITEM L2,ORDERS O,PARTSUPP PS2WHERE O.ORDERKEY=L2.ORDERKEY AND PS2.SUPPKEY=L2.partkey AND PS2.SUPPKEY=L2.suppkey)原图更新之后图(17)DELETE语句使用嵌套子查询(利用一个表中的数据来判断是否删除另外一个表中的数据)。
删除顾客张三的订单记录DELETEFROM lineitemWHERE orderkey IN(SELECT ORDERKEYFROM ORDERSWHERE ORDERKEY IN(SELECT ORDERKEYFROM CUSTOMER CWHERE ='张三'AND C.CUSTKEY=ORDERS.CUSTKEY))DELETEFROM ORDERSWHERE ORDERKEY IN(SELECT ORDERKEYFROM CUSTOMER CWHERE ='张三'AND C.CUSTKEY=ORDERS.CUSTKEY)原图更新图5总结与体会5.1 实验中出现的问题及其解决方案相对于上一次,这次实验难度比较大。
首先出现的问题是因为没有复习,知识点大量遗忘,后经过复习终于想起来了这些知识点。