数据库实验-数据库索引、视图与触发器
- 格式:doc
- 大小:2.22 MB
- 文档页数:13
数据库管理系统中的索引和视数据库管理系统中的索引和视图随着信息时代的到来,数据库的应用越来越广泛,成为企业管理和决策的重要工具。
而数据库管理系统(Database Management System,简称DBMS)就是针对数据库进行管理、组织、存储和查询的软件系统。
在DBMS中,索引和视图是两个重要的概念和技术,本文将重点介绍数据库管理系统中的索引和视图。
一、索引索引是一种数据结构,用于加快数据库中数据的检索速度。
它可以理解为数据库中存储了某一列或多列的值,并按照某种顺序进行排序,以便快速定位相应的数据。
在实际应用中,索引可以大大提高数据库查询的效率,减少系统的响应时间。
常见的索引类型包括B树索引、哈希索引和全文索引等。
B树索引是一种常用的索引类型,它采用了平衡树的结构,可以快速定位到目标数据。
哈希索引则采用散列算法,将索引值映射到哈希表中,以实现快速查找。
全文索引则专门用于对文本类型的数据进行搜索和匹配。
在创建索引时,需要考虑到索引的选择性和开销。
选择性指的是索引中不同值的重复度,选择性越高,索引的效果越好;开销则包括索引的维护和存储成本,开销越低,系统性能越好。
因此,在实际应用中,需要根据具体的业务需求和数据特点来选择适合的索引类型和字段。
二、视图视图是基于表或其他视图的虚拟表,是一种逻辑上的组织方式。
通过视图,可以将若干个表中的数据进行组合、过滤和计算,形成一个新的临时表。
视图可以实现数据的抽象和封装,简化用户的操作,提高数据的安全性。
视图在DBMS中的作用主要有两个方面:数据过滤和数据联接。
通过视图,可以将原始表中的数据进行筛选和过滤,只显示符合特定条件的记录。
这样可以简化用户的查询操作,提高查询效率。
同时,视图也可以实现多个表之间的关联和联接,便于用户进行复杂的数据分析和统计。
在实际应用中,视图还可以用于权限管理和数据保护。
通过定义不同的视图,可以对不同的用户开放不同的数据内容,实现数据的隔离和权限控制。
实验7 索引、存储过程、触发器、关系图等的基本操作1实验7 索引、存储过程、触发器、关系图等的基本操作 实验示例1.索引1、创建索引(1)利用向导创建索引启动企业管理器,连接服务器,单击“工具(T)”→“向导(W)…”命令,在弹出的“选择向导”对话框中,展开“数据库”文件夹,如图7-1,双击“创建索引向导”项,打开欢迎对话框,如图7-2,在这个对话框中按先后顺序列出了使用向导创建索引的步骤。
单击“下一步”按钮,展开创建步骤,从图7-3到图7-8。
图7-1 选择索引向导 图7-2 欢迎使用创建索引向导数据库原理与应用实验指导2图7-3 选择数据库和表图7-4 已存在的索引信息图7-5 选择表中的列图7-6 指定索引选项图7-7 正在完成创建索引 图7-8 成功创建索引 (2)在企业管理器中创建索引在企业管理器中创建索引的步骤为:实验7 索引、存储过程、触发器、关系图等的基本操作3 ①在数据库关系图中选择要创建索引的表,右击该表,然后从快捷菜单中选择“索引/键”命令;或为要创建索引的表打开表设计窗口,在表设计窗口上部字段定义区域右击,然后从快捷菜单中选择“索引/键”命令,如图7-9;或在打开表设计窗口时,按工具栏上的属性按钮,都能打开表属性窗口,如图7-10。
图7-9 表设计窗口中的快捷菜单 图7-10 表属性窗口中创建索引/键 ②在图7-10中,选择"新建"命令。
“选定的索引”框显示系统分配给新索引的名称,“索引名”文本框中能修改系统已自动给出的索引名。
③在“列名”下选择要创建索引的列。
可以选择多达16列。
为获得最佳性能,最好只选择一列或两列。
对所选的每一列,可指出索引是按升序还是降序组织列值。
④为索引指定任何其它需要的设置,然后单击“确定”按钮。
当保存表或关系图时,索引即创建在数据库中。
在企业管理器中创建索引还有如下方法:如图7-11,直接在相应表上按鼠标右键→“所有任务”→“管理索引”→出现管理索引对话框,如图7-12,在该对话框上对表索引能进行“新建”、“编辑”、“删除”等一系列管理操作。
内蒙古工业大学信息工程学院实验报告课程名称:数据库应用实验名称:视图存储过程触发器等的建立与维护实验类型:验证性□ 综合性□ 设计性□实验室名称:班级:学号:姓名:组别:同组人:成绩:实验日期:预习报告成绩:指导教师审核(签名):年月日预习报告一、实验目的1.学会使用企业管理器建立视图,应用视图插入、删除、修改数据;2.掌握存储过程的使用方法;3.掌握触发器的使用方法。
二、实验内容此实验是综合视图、存储过程、触发器等知识应用的一个综合性实验。
实验要求:1.利用所创建的数据库和数据表,综合应用视图、存储过程、触发器等知识完善数据库;2.掌握应用更新视图数据可以修改基本表数据的方法;3.熟练掌握添加、修改、删除记录的存储过程的定义及调用;4.掌握通过触发器来实现数据的参照完整性。
实验内容要求:利用员工管理数据库YGGL中 3个表:Employees:员工自然信息表、Departments:部门信息表、Salary:员工薪水情况表。
(1)利用YGGL各表建立视图实现各种连接查询。
建立视图view1,查询所有职工的员工编号、姓名、部门名和收入,并按部门名顺序排列。
建立视图view2,查询所有职工的员工编号、姓名和平均工资。
建立视图view3,查询各部门名和该部门的所有职工平均工资。
(2)编写对YGGL各表进行插入、修改、删除操作的存储过程,然后编写程序,调用这些存储过程。
创建一个为Employees表添加员工记录的存储过程addEmployees。
创建一个存储过程delEmployees删除Employees表中指定员工编号的记录。
(3)对于YGGL数据库,请用触发器实现两个表间的参照完整性。
在表Departments上创建一个触发器Departments _update,当更改部门编号时同步更改Employees表中对应的部门编号。
在表Employees上创建一个触发器Employees _delete,当删除员工记录时同步删除salary表中对应的工资收入记录。
数据库实验报告课程:数据库原理及应用正文:一、实验目的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. 掌握触发器的概念、作用及分类;2. 熟悉触发器的创建、修改和删除操作;3. 学会使用触发器实现业务规则和数据完整性;4. 提高数据库编程能力,为以后的实际工作打下基础。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 编程语言:Python四、实验内容1. 触发器的基本概念触发器是一种特殊的存储过程,它在特定事件发生时自动执行。
触发器可以分为两大类:DML触发器和DDL触发器。
DML触发器包括INSERT、UPDATE和DELETE触发器,用于在数据操作时执行特定的逻辑;DDL触发器用于在数据定义语言操作时执行特定的逻辑。
2. 触发器的创建以MySQL为例,创建触发器的语法如下:DELIMITER //CREATE TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;//DELIMITER ;例如,创建一个名为before_insert_trigger的触发器,在向bookinfo表插入数据之前执行:DELIMITER //CREATE TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 100 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 100';END IF;END;//DELIMITER ;3. 触发器的修改修改触发器的语法与创建触发器类似,只需要使用ALTER TRIGGER语句:ALTER TRIGGER 触发器名称BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名BEGIN-- 触发器逻辑END;例如,修改上述触发器,限制书籍价格不超过50元:DELIMITER //ALTER TRIGGER before_insert_triggerBEFORE INSERT ON bookinfoFOR EACH ROWBEGINIF NEW.price > 50 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Book price should not exceed 50';END IF;END;//DELIMITER ;4. 触发器的删除删除触发器的语法如下:DROP TRIGGER IF EXISTS 触发器名称;例如,删除上述触发器:DROP TRIGGER IF EXISTS before_insert_trigger;5. 触发器与存储过程的区别触发器和存储过程都是数据库编程的重要工具,但它们之间存在一些区别:(1)触发器在特定事件发生时自动执行,而存储过程需要手动调用;(2)触发器只能包含一个语句块,而存储过程可以包含多个语句块;(3)触发器不能返回结果集,而存储过程可以返回结果集。
MySQL⾼级——索引、视图、存储过程和函数、触发器零、前导知识0.1 SQL语⾔的分类SQL语⾔共分为四⼤类:数据查询语⾔DQL,数据操纵语⾔DML,数据定义语⾔DDL,数据控制语⾔DCL。
1. 数据查询语⾔DQL数据查询语⾔DQL基本结构是由SELECT⼦句,FROM⼦句,WHERE⼦句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .数据操纵语⾔DML数据操纵语⾔DML主要有三种形式:1) 插⼊:INSERT2) 更新:UPDATE3) 删除:DELETE3. 数据定义语⾔DDL数据定义语⾔DDL⽤来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:CREATE TABLE / VIEW / INDEX / SYN / CLUSTER| 表视图索引同义词簇。
DDL操作是隐性提交的!不能rollback4. 数据控制语⾔DCL数据控制语⾔DCL⽤来授予或回收访问数据库的某种特权,并控制数据库操纵事务发⽣的时间及效果,对数据库实⾏监视等。
如:1) GRANT:授权。
2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某⼀点。
回滚---ROLLBACK回滚命令使数据库状态回到上次最后提交的状态。
其格式为:SQL>ROLLBACK;3) COMMIT [WORK]:提交。
在数据库的插⼊、删除和修改操作时,只有当事务在提交到数据库时才算完成。
在事务提交前,只有操作数据库的这个⼈才能有权看到所做的事情,别⼈只有在最后提交完成后才可以看到。
提交数据有三种类型:显式提交、隐式提交及⾃动提交。
下⾯分别说明这三种类型。
(1) 显式提交⽤COMMIT命令直接完成的提交为显式提交。
其格式为:SQL>COMMIT;(2) 隐式提交⽤SQL命令间接完成的提交为隐式提交。
这些命令是:ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME。
一、实验名称
视图与索引
二实验目的
1.学会使用企业管理器建立视图与索引
2.掌握使用SQL语句建立视图与索引
三实验内容
1.使用企业管理器建立视图索引
2.使用SQL语句建立视图索引
四实验准备
1.复习与本次实验内容相关知识
2.对本次实验中要求自己完成的部分做好准备
五实验步骤
1.用企业管理器建立一个基于学生表、课程表、成绩表的视图,要求该视图
显示学号、姓名、课程、成绩
用查询分析器建立一个基于学生表、班级表的学生视图
自己写一个SQL语句建立一个基于课程表的视图(V_COURSES),要求显示
课程编号、课程名、学分。
查看索引
2.为学生表按班级建立一个非簇集索引FK_U_STUDENTS,操作过程如下
实验心得
总的来说,这次实验因为在上面的几次试验中取得的一些经验,在做实验的时候,也不觉得有多么大的困难了。
相反,感觉有点轻车熟路。
这次实验的目的是学会使用企业管理器建立视图与索引,掌握使用SQL语句建立视图与索引。
在做实验的时候遇到的问题是发现自己建立的视图遇到与表的内容不符的情况,这是由于我对上次表的内容有些模糊,而导致后面做实验出现问题。
在查询了以前建的表后,我又认真做了修改,使得在建立视图的时候能够与表建立紧密的联系,从而不会孤立表的建立。
到了后期,视图的建立也简单多了。
其实,在我做完这个实验之后,明白这次实验都主要是围绕SQL语句,对于语句的熟悉和掌握,有助于我们对数据的应用。
在以后的工作中,也能够发挥到学到知识的作用。
实验七视图、索引、存储过程和触发器的使用一、实验目的:1.掌握视图的概念和使用方法;2.掌握索引的概念和使用方法;2.掌握存储过程的概念和使用方法;3.掌握触发器的概念和使用方法;二、实验准备:1.了解视图的概念和作用;2.掌握视图相关的命令;3.了解索引的作用与分类;4.掌握索引的创建方法;5.理解数据完整性的概念及分类;6.了解各种数据完整性的实现方法;7.了解存储过程的使用方法;8.掌握存储过程的调用方法;9.了解触发器的使用方法;三、实验内容:一、视图1.创建视图(1)在STUDENT表中,为信息管理及信息系统022班建立视图V1_STU,在查询分析器中输入下列语句:思考与练习:1)在STUDENT表中,为计算机科学与技术021建立视图SV1_STU。
2)在TUITION表中,为第五学年缴全额学费(3500)的学生建立视图SV2_TUI。
(2)创建V3_STU_COU视图,包括学号,课程号,课程名,成绩,要保证对该视图的修改都要符合班为信息管理及信息系统022班这个条件:思考与练习:在STUDENT和CLASS两表中,建立视图SV3_STU_CLA,包含学号,班号,学院号,姓名,性别。
2.查询视图(1)查找信息管理及信息系统021班女生的学号和出生日期:思考与练习:1)查找SV3_STU_CLA视图中学号为024631416所在的班号和学院号。
2)查找信管992班平均成绩在80分以上的学生的学号和平均分数:思考与练习:统计信管992班平均成绩在80分以上的学生的个数。
3.更新视图可更新视图满足以下条件:A)创建视图的SELECT语句中没有聚合函数,且没有TOP、GROUP BY、UNION子句及DISTINCT关键字。
B)创建视图的SELECT语句中不包含从基本表列通过计算所得的列。
C)创建视图的SELECT语句的FROM子句中至少要包含一个基本表。
(1)向V1_STU插入一条记录(‘024631267’,’0246312’,’刘明仪’,’男’,’1982-3-2’,’NANCHANG ROAD 42# ’,’830052’,’刘林’):思考与练习:向SV1_STU视图插入一条记录。
华中科技大学《数据库技术与应用》实验报告专业班级:学生姓名:学号:实验地点:指导教师:实验日期时间:一、实验项目名称:索引和视图二、实验学时:三、实验目的:1.学会使用SQL Server管理平台和Transact-SQL语句CREATE INDEX创建索引。
2.学会使用SQL Server管理平台查看索引。
3.学会使用SQL Server管理平台和Transact-SQL语句DROP INDEX删除索引。
4.掌握使用SQL Server管理平台和Transact-SQL语句CREATE-VIEW创建视图的用法。
5.了解对索引和视图更名的系统存储过程sp_rename的用法。
6.掌握使用Transact-SQL语句ALTER VIEW修改视图的方法。
7.了解删除视图的Transact-SQL语句DROP VIEW的用法。
四、实验工具或环境五、实验内容、步骤、代码和结果:0. 创建studentsdb数据库及其相应表,并录入数据。
在SQL Server管理平台上,点击“新建查询”打开查询编辑器窗口,复制粘贴附件“创建数据库代码”中的代码到查询编辑器窗口,运行即可生成相关数据库和表,并有相应的数据。
1.分别使用SQL Server管理平台和Transact-SQL语句为studentsdb数据库的student_info表和curriculum表创建主键索引。
alter table student_info alter column学号char(4)not null;alter table student_infoadd primary key(学号)alter tablecurriculum alter column课程编号char(4)not null;alter table curriculumadd primary key(课程编号)2.使用SQL Server管理平台按curriculum表的课程编号列创建唯一性索引。
实验5索引和视图实验5 索引和视图⼀、实验⽬的1.掌握索引的使⽤⽅法2.掌握数据完整性的实现⽅法3.熟悉视图的概念和作⽤4.掌握视图的创建⽅法5.掌握如何查询和修改视图⼆、实验准备1.了解索引的作⽤与分类2.掌握索引的创建⽅法3.了解视图的概念4.了解创建视图的⽅法5.了解对视图的操作三、实验内容及要求1.创建索引1)在Employees表的Name列和Address列上建⽴复合索引。
2)对Departments表上的DepartmentName列建⽴唯⼀性索引。
3)使⽤CREATE INDEX语句能创建主键吗?4)向Employees表中的出⽣⽇期列添加⼀个唯⼀性索引,姓名列和性别列上添加⼀个复合索引。
5)假设Departments表中没有主键,使⽤ALTER TABLE语句将DepartmentID列设为主键。
6)添加主键和添加普通索引有什么区别?7)创建与Departments表相同结构的表Departments1,将DepartmentName设为主键,DepartmentsID上建⽴⼀个索引。
2.删除索引1)使⽤DROP INDEX语句删除表Employees上的索引depart_ind。
2)使⽤ALTER TABLE语句删除Departments上的主键和索引Dep_ind。
3.创建视图1)创建YGGL数据库上的视图DS_VIEW,视图包含Departments表的全部列。
2)创建YGGL数据库上的视图Employees_view,视图包含员⼯号码、姓名和实际收⼊。
4.查询视图1)从视图DS_VIEW中查询出部门号为3的部门名称。
2)从视图Employees_view查询出姓名为“王林”的员⼯的实际收⼊。
5.更新视图1)向视图DS_VIEW中插⼊⼀⾏数据:6,⼴告部,⼴告业务。
2)执⾏完该命令使⽤SELECT语句分别查看视图DS_VIEW和基本表Departments中发⽣的变化。
3)尝试向视图Employees_view中插⼊⼀⾏数据,看看会发⽣什么情况。
一、实验步骤(一)附加上次实验所创建的数据库“db_Library”,并回顾该数据库的数据表信息。
(二)练习创建和管理视图1、使用管理控制台创建一个名为“计算机系借阅信息_VIEW”的视图,要求显示计算机系读者2011-1-1以后借阅的图书信息,包括“读者姓名”、“图书编号”和“借阅日期”三个字段。
打开sql server管理控制台窗口,打开新建视图对话框。
在添加表中添加tb_borrow和tb_reader表,在选中输出复选框中选中:读者编号,图书编号,借阅日期。
use db_library goselect * from 读者借阅信息_VIEWwhere 所在系='计算机'and 借阅日期>'2011_1_1'2、使用T-SQL语句创建一个名为“读者借阅信息_VIEW”的视图,要求显示所有的读者借阅信息,包括“读者编号”、“姓名”、“系部”、“图书编号”、“图书名称”和“借阅日期”等字段。
use db_library gocreate view 读者借阅信息_VIEW asselect tb_readder.读者编号,tb_reader.姓名,tb_reader所在系,tb_book.图书编号,tb_book.书名,tb_borrow.借阅日期 from tb_reader,tb_borrow,tb_bookwhere tb_reader.读者编号=tb_borrow.读者编号and tb_book.图书编号=tb_borrow.图书编号Select * from读者借阅信息_VIEW3、使用管理控制台查看“读者借阅信息_VIEW”视图的定义信息和依赖的对象。
打开管理控制台,在数据库“db_Library”下的“视图”对象;在左边窗口右击“读者借阅息_VIEW”该视图,在在窗口中选中“查看依赖关系”选项。
4、使用系统存储过程查看“计算机系续借阅信息_VIEW”视图的定义信息和依赖的对象。
实验4:数据库的视图的定义、使用和触发器一、实验目的1、掌握SQL Server中的创建视图的方法,加深对视图的理解。
2、学会创建触发器,了解触发器的基本概念,理解触发器的功能。
二、实验内容1、创建、查看、修改和删除视图。
2、创建、修改和删除触发器。
三、实验步骤1、创建视图。
在“学生表”,“课程表”,“选课表”3个表的基础上建立一个视图,取名为“学生成绩”。
1)打开企业管理器窗口,确认服务器、打开数据库文件夹,选中新“学生成绩”数据库,右键单击,在弹出菜单上选“新建”――“视图”。
弹出窗口如图4-1所示:图4-1 新建视图(1)2)在工具栏上单击“添加表”按钮,在弹出的窗口中选取创建视图所需的3个表:学生表、课程表、选课表。
3)在学生表中,选取“学号”、“姓名”字段;在课程表中,选取“课程名”字段;在选课表中,选取“成绩”字段,最后单击工具栏中的“运行”按钮。
结果如图4-2所示:4)单击工具栏中的“保存”按钮,为新建的视图取名为“视图1”,单击“确定按钮”保存视图。
图4-2 新建视图(2)2、查看和修改视图在企业管理器中,选择服务器、数据库,并使数据库展开,然后用鼠标右键单击要修改结构的视图,在弹出的菜单中,选择“设计视图”,则弹出和图4-2类似的视图设计对话框。
用户可以在该对话框中查看视图,修改视图。
3、删除视图在企业管理器中,将鼠标指向数据库中的视图文件夹中的“视图1”,并单击鼠标右键,在弹出的菜单中,选择“删除”,会出现如图4-3所示的窗口:图4-3 删除视图选中“全部移出”按钮,被选中的视图就被删除。
4、创建触发器(1)在企业管理器中,由服务器开始逐步扩展到触发器所属的表。
打开表文件夹,在细节窗口中用鼠标右键单击触发器所属的表,在弹出的菜单上选择“全部任务”――“管理触发器”。
如图4-4所示:图4-4 创建触发器(1)(2)在弹出的窗口中,输入创建触发器的T-SQL语句(如图4-5所示),单击“检查语法”按钮,进行语法检查,检查无误后,单击确认。
视图、索引、存储过程、触发器、游标及事务视图1.视图不占物理存储空间,它只是⼀种逻辑对象。
可将其看成⼀个"虚表"视图是⼀个由select 语句指定,⽤以检索数据库表中某些⾏或列数据的语句存储定义注:创建视图语句中,不能包括order by、compute或者compute by ⼦句,也不能出现into关键字2.创建⽔平视图视图的常见⽤法是限制⽤户只能够存取表中的某些数据⾏,⽤这种⽅法产⽣的视图称为⽔平视图,即表中⾏的⼦集create view student_view1asselect*from studentwhere (class_id='0903')3.创建投影视图如果限制⽤户只能存取表中的部分列的数据,那么,使⽤这种⽅法创建的视图就称为投影视图,即表中列的⼦集create view student_view2asselect student_id as'学号' ,student_name as'姓名',sex as'性别'from studentwhere sex=1with check option/*强制视图上执⾏的所有修改语句必须符合由select 语句设置的准则*/4.创建联合视图⽤户可以⽣成从多个表中提取数据的联合视图,把查询结果表⽰为⼀个单独的"可见表"索引5.索引是数据库的对象之⼀,索引是为了加速对表中数据⾏的检索⽽创建的⼀种分散的⼀种存储结构。
索引是针对⼀个表⽽建⽴的,它是由数据页⾯以外的索引页⾯组成的6.索引的分类聚簇索引数据表的物理顺序和索引表的顺序相同,它根据表中的⼀列或多列值的组合排列记录create unique clustered index book_id_index--惟⼀性聚簇索引on book(book_id asc)withfillfactor=50 /*填充因⼦50%*/⾮聚簇索引create nonclustered index student_course_indexon student_course(student_id asc,course_id asc)withfillfactor=50存储过程存储过程是⼀系列预先编辑好的、能实现特定数据操作功能的SQL代码集。
常见数据库对象(视图、索引、触发器、事务)⼀、视图1.1 视图的定义 视图是指计算机数据库中的视图,是⼀个虚拟表,其内容由查询结果来定义。
同真实的表⼀样,视图包含⼀系列带有名称的⾏和列数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
⾏和列数据来⾃由定义视图的查询所引⽤的表,并且在引⽤视图时动态⽣成。
如果基表中的数据发⽣变化,则从视图中查询出的数据也随之变化。
1.2 视图的优点(1)定制⽤户数据 每个组织都有不同⾓⾊的⼯作⼈员,以销售公司为例,采购⼈员需要⼀些与采购有关的数据,⽽与采购⽆关的数据,对采购⼈员没有任何意义。
可以根据这⼀实际情况,专门为采购⼈员创建⼀个视图,以后采购⼈员在查询数据时,只需执⾏“select * from 采购视图”就可以了。
(2)简化数据操作 在使⽤查询时,很多时候需要使⽤聚合函数,同时还要显⽰其他字段的信息,可能还会关联到其他表,这时写的SQL语句会很长,如果这个多做频繁发⽣的话,就可以通过创建视图,简化数据来查询。
(3)细粒化的安全机制 因为视图是虚拟的,物理上是不存在的,它只是存储了数据的集合。
因此,可以将基表中重要的字段信息不通过视图提供给⽤户。
视图是动态的数据的集合,数据是随着基表的更新⽽更新的。
同时,⽤户不可以随意地更改和删除视图,以保证数据的安全性。
(4)合并分离的数据 随着社会的发展,公司的业务量不断地扩⼤。
为了管理⽅便,对于设有很多分公司的⼤公司,需要统⼀表的结构,从⽽定期查看各个分公司的业务情况。
使⽤union关键字,可以将各分公司的数据合并为⼀个视图,这样既⽅便⼜⾼效。
1.3 视图的创建和使⽤语法: create view view_name as select column_name(n) from table_name(n) where condition说明: view_name:视图名 column_name(n):视图中的字段列表,可以来源于多个表 table_name(n):表名,可以来源于多个表 condition:条件表达式,如果是多个表,则该表达式还包含标的连接条件⼆、索引2.1 索引的基本知识 2.1.1 理解索引 2.1.2 索引⼯作的原理 2.1.3 索引的作⽤ 2.1.4 索引的优缺点 优点: (1)⼤⼤加快了数据的检索速度。
MYSQL数据库学习----索引和触发器⼀:索引索引是创建在数据库表上,其作⽤是提⾼对表中数据的查询速度。
假设数据库中有⼀张1000条记录的表格,如果没有创建索引的话,⽤户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取⼀遍,满⾜查询条件的就加⼊结果集中,这样效率很低,如果表中创建了针对查询条件字段的索引,查询的时候会⽴即找到满⾜条件的记录加⼊结果集,不需要遍历过程,这样⼤⼤提⾼了数据库查询效率。
创建索引虽然提⾼了数据库表格的查询效率,但是也增加了数据库维护速度,因为索引需要占⽤物理空间,其次每次⽤户插⼊,更改,删除记录的时候都要同步操作索引,这样就造成数据维护速度降低,所以使⽤索引需要综合考虑索引的优点和缺点。
使⽤索引的⼏个建议1.对经常作为查询条件的字段使⽤索引2.如果需要⽤到索引尽量在整型字段上⾯使⽤索引3.尽量使⽤唯⼀性的字段来创建索引4.限制索引的数⽬,因为索引是占⽤物理空间的,并且数据更新需要同步操作索引,所以在索引的数量上⾯需要综合考虑5.删除不再使⽤或者很少使⽤的索引6.⽤户也可以在插⼊,更改,删除记录的时候先删除掉索引,在操作数据库,然后增加索引来使⽤创建索引有⼏种⽅法:1.创建表格的时候创建索引创建普通索引INDEX(字段名);任意字段都可以创建唯⼀索引UNIQUE INDEX 索引名称(字段名);唯⼀性字段可以,⽐如主键就是唯⼀字段或者约束属性是unique的字段创建全⽂索引FULLTEXT INDEX 索引名称(字段名);CHAR、VARCHAR、TEXT类型字段上⾯可以创建单列索引INDEX 索引名称(字段名(限制长度));对于字符型数据不同判断全部字符,只需要判断前⾯限制长度的字符就型了,⽬的还是提⾼查询速度创建多列索引INDEX 索引名称(字段名1,字段名2...);只有查询条件中使⽤了第⼀个字段名才会⽣效⽐如创建多列索引:INDEX INDEX_TABLE(username, password, time);这⾥创建了三个字段的索引,实际上MYSQL创建了三个索引分别是username,password。
石家庄经济学院实验报告学院: 信息工程学院专业: 网络工程信息工程学院计算机实验中心制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分,是否可以实现,请说明原因。
四实验要求1.要求掌握索引的类型,以及创建索引时的注意事项,例如每个表只能创建一个聚集索引,可以创建非聚集索引最多为249个,等等。
2.理解创建视图的目的和意义。
掌握创建视图时需要考虑的原则:只能在当前数据库中创建视图、视图名不得与该用户的表名相同、可在视图上建立视图、定义视图不能包括ORDER BY等关键字、不能建立临时视图,等等。
3.报告中由同学写明具体的操作意图(文字描述)、操作命令(SQL语句)、和执行结果(文字描述+适当截图)。
4.对于重要的运行界面和结果窗口,可以用Alt+PrintScreen来截取当前窗口,并粘贴到实验报告中。
五实验步骤1.索引的建立和删除操作(1)在STU表中,建立按照sno升序的惟一性索引snoIDX。
SQL语句为:create unique index snoIDX on STU(Sno);运行结果如1- 1按所示:命令已成功完成。
图1- 1按学号升序建立的唯一性索引(2)在SC表中,建立按照学号升序和课程号降序的唯一性索引scIDX。
SQL语句为:create unique index scIDX on SC(Sno ASC,Cno DESC);运行结果如1- 2按所示:命令已成功完成。
图1- 2按学号升序课程号降序建立索引(3)在S表中,按照生日建立一个非聚簇索引birthdayIDX。
SQL语句为:create nonclustered index birthdayIDX on STU(Sbirthday);执行结果如1- 3对所示:命令已成功完成。
图1- 3对生日建立非聚簇索引(4)在Course表中,建立一个按照课程名升序的聚簇索引cnameIDX。
SQL语句为:create clustered index cnameIDX on Course(Cname);运行结果如1- 4按所示:命令已成功完成。
图1- 4按课程名升序建立聚簇索引(5)删除索引cnameIDX。
SQL语句为:drop index ameIDX;运行结果如1- 5删所示:表中索引cnameIDX不存在。
图1- 5删除cnameIDX索引2.视图的创建、修改、更新和查询操作(1)建立一个关于所有女生信息的视图STU_GIRL。
SQL语句为:create view STU_GIRL(Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress,Smajor) asselect *from STUwhere Ssex='女'运行结果如1- 6建所示:命令已成功完成。
图1- 6建立女生信息的视图(2)将各系学生人数,平均年龄定义为视图V_NUM_A VGSQL语句为:create view V_NUM_A VG(Sdept,STU_count,A_avg)asselect Sdept,count(Sdept),avg(datediff(year,Sbirthday,getdate()))from STUgroup by Sdept执行结果如1- 7建所示:图1- 7建立视图V_NUM_A VG(3)建立一个视图反映学生所选课程的总学分情况TOTAL_CREDIT。
SQL语句为:create view TOTAL_CREDIT(Sno,sum_credit)asselect SC.Sno,sum(Ccredit)from SC,Coursewhere o=ogroup by SC.Sno执行结果如1- 8建所示:图1- 8建立视图TOTAL_CREDIT(4)建立一个所有学生课程成绩的视图STU_GRADE,包括基本学生信息,课程信息和成绩。
SQL语句为:create view STU_GRADEasselect STU.*,Course.*,SC.Sgradefrom SCfull join STU on SC.Sno=STU.Snofull join Course on o=o运行结果如1- 9所所示:图1- 9所有学生课程信息视图(5)在视图S_GRADE基础之上,建立一个两门课以上成绩不及格的学生情况视图FAIL_GRADE。
SQL语句为:create view FAIL_GRADEasselect Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress,Smajor,count(Cno) as STU_count from STU_GRADEwhere Grade<60group by Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress having count(Cno)>=2运行结果如1- 10建所示:图1- 10建立视图FAIL_GRADE(6)建立一个至少选修了4门课及4门课以上的学生信息的视图SC_FOUR。
SQL语句为:create view SC_FOURasselect STU.*from STUwhere Sno in(select Snofrom SCgroup by Snohaving count(SC.Sno)>=4)运行结果如1-11所示:图1- 11建立至少选修4门课程的学生信息视图(7)修改视图S_GIRL,要求只显示1997年以前出生的女生信息。
SQL语句为:create view STU_GIRL(Sno,SID,Sname,Ssex,Sbirthday,Sdept,Saddress) asselect *from STUwhere Ssex='女' and datepart(year,Sbirthday)<1997运行结果如1- 12修所示:图1- 12修改S_GIRL视图信息(8)在视图FAIL_GRADE查询不及格超过2门课的学生信息。
SQL语句为:select * from FAIL_GRADE where STU_count>2;运行结果如1- 13从所示:图1- 13从视图中查询信息(9)删除视图S_GRADE。
SQL语句为:drop view STU_GRADE执行结果如1- 14视所示:图1- 14视图列表(10)通过视图S_GIRL,将“刘丹”的名字修改为“汪丹”,并查询结果。
SQL语句为:update STU_GIRLset Sname='汪丹'where Sname='刘丹'运行结果如图1-15所示:图1- 15修改信息(11)通过视图S_GIRL,新增一个学生信息(“刘兰兰”,“女”,“计算机学院”,1996-8-8),并查询结果。
SQL语句为:insert into STU_GIRLvalues('00009','23','刘兰兰','女','1996-8-8','信工','山东',)执行结果如1-16所示:图1- 16向视图中添加信息(12)通过视图S_GIRL,删除1995年出生的女生信息,并查询结果。
SQL语句为:deletefrom STU_GIRLwhere datepart(year,Sbirthday)=1995执行结果如1- 17删所示:图1- 17删除并查询信息(13)通过视图S_GRADE,将“汪丹”的名字修改为“刘丹”,是否可以实现,请说明原因。
SQL语句为:update STU_Girlset Sname='王丹'where Sname='汪丹'执行结果如1-18所示:图1- 18修改姓名实现原因:该视图为行列子集视图,是从S和C、SC三个基本表中导出,并且仅是去掉了基本表的某些列,但是主属性所在列没有去掉。
此类视图可以更新(14)通过视图COMPUTE_A VG_GRADE,将“00009”学生的平均分改为90分,是否可以实现,请说明原因。
SQL语句为:create view COMPUTE_A VG_GRADE(Sno,Gavg)asselect Sno,avg(Grade)from SCgroup by Snoupdate COMPUTE_A VG_GRADEset Gavg=90where Sno=00009执行结果如1- 19修所示:图1- 19修改平均成绩原因:该视图定义中含有group by子句,由规定可知此视图不能更新六实验总结通过本次实验使我对数据库中索引的建立与删除有了更深层了解,也对数据库中视图的建立、更新和删除也有了更多认识;同时在建立视图中也了解了建立视图的一些注意事项;在更新视图时对于其中的规定有了更多了解,一般的只允许行列子集视图可以被更新。