实验五视图、存储过程与触发器的应用

合集下载

MySQL中的触发器和存储过程的区别与用途

MySQL中的触发器和存储过程的区别与用途

MySQL中的触发器和存储过程的区别与用途MySQL是一种常用的关系型数据库管理系统,广泛应用于各种互联网应用中。

在MySQL中,触发器(Trigger)和存储过程(Stored Procedure)是两种常见的编程方式,用于实现数据库操作的自动化和业务逻辑的封装。

本文将探讨MySQL中的触发器和存储过程的区别和用途。

一、触发器触发器是MySQL中一种特殊的数据库对象,它和数据库表关联,并在表中的指定事件发生时自动执行特定的操作。

触发器是基于事件驱动的,它可以在数据插入、更新或删除时触发执行相应的操作。

1. 触发器的创建在MySQL中,创建触发器需要使用CREATE TRIGGER语句,并指定触发时机、触发事件、触发操作和触发操作所执行的SQL语句。

例如,我们可以创建一个在数据插入前触发的触发器如下所示:```CREATE TRIGGER before_insert_triggerBEFORE INSERT ON table_nameFOR EACH ROWBEGIN-- 触发操作所执行的SQL语句...END;```2. 触发器的用途触发器可以用于各种场景,例如数据自动更新、数据约束、数据一致性等。

下面以一个实例来说明触发器的用途。

假设我们有一个订单表和一个库存表,每当有订单数据插入时,我们希望自动更新库存表中对应商品的库存数量。

这时,就可以使用触发器实现该功能。

```CREATE TRIGGER update_inventoryAFTER INSERT ON ordersFOR EACH ROWBEGINUPDATE inventorySET quantity = quantity - NEW.amountWHERE product_id = NEW.product_id;END;```在上述示例中,我们创建了一个名为update_inventory的触发器,它在订单表插入数据后触发,然后执行更新库存表的操作。

存储过程及触发器实验报告

存储过程及触发器实验报告

存储过程及触发器实验报告实验目的:1、了解存储过程及其应用;2、了解触发器及其应用;3、掌握使用存储过程及触发器完成数据操作的方法。

实验过程:1、存储过程存储过程是指一组为了完成特定功能的SQL语句集合。

存储过程可以接收传入参数并返回处理结果。

存储过程的好处是可以减少网络流量,提高性能,增加安全性。

在本次实验中,我们将学习如何创建存储过程。

首先,在MySQL中打开MySQL Workbench,进入我们的实验数据库。

然后我们就可以创建一个存储过程了。

创建存储过程的语法如下:CREATE PROCEDURE procedure_name ()BEGIN-- SQL statementsEND;在这个语法中,procedure_name是我们想要创建的存储过程的名称。

在BEGIN和END 之间,我们可以输入一组SQL语句,这些语句将组成存储过程的主体内容。

我们可以以一个创建一个简单的存储过程作为例子,这个存储过程的作用是输出一条信息。

我们将这个存储过程命名为print_message。

在上面的语句中,我们定义了一个存储过程,它被命名为print_message。

它只包含一条SELECT语句,这条语句将输出Hello, World!这个字符串。

创建完存储过程之后,我们可以通过CALL语句来调用它:CALL print_message();执行这个语句后,我们将会看到Hello, World!这个字符串输出到屏幕上。

2、触发器触发器是一种被动的对象,它是由数据库管理系统在数据表上自动执行的一些操作。

当数据表中发生某些指定的操作时,触发器就会被调用执行。

触发器通常用于数据表中的数据变更操作,比如插入、更新和删除。

在本次实验中,我们将学习如何创建和使用触发器。

在MySQL中创建触发器的语法如下:CREATE TRIGGER trigger_name{BEFORE | AFTER} trigger_event ON table_nameFOR EACH ROW trigger_body;在这个语法中,trigger_name是我们想要创建的触发器的名称。

实验5:存储过程和触发器

实验5:存储过程和触发器

云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2014-2015学年第二学期任课教师:薛岗、朱艳萍专业:学号:姓名:成绩:实验5 存储过程和触发器一、实验目的(1)理解存储过程的概念、了解存储过程的类型(2)掌握创建存储过程的方法(3)掌握执行存储过程的方法(4)理解触发器的功能及工作原理。

(5)掌握创建、更改、删除触发器的方法。

二、实验内容1、使用不带参数的存储过程(1)创建一个存储过程,查询person表中所有不重复的职称。

(2)执行存储过程。

2、带输入参数的存储过程(1)创建一个存储过程,按照姓名查询person表中的员工信息。

(2)执行存储过程,查询名为黎明的员工数据3、带输入/输出参数的存储过程(1)创建一个存储过程,使其能够根据员工姓名,查询员工工资。

(考虑到员工不存在时给出提示信息)(2)执行存储过程4、使用触发器(1)创建一个触发器trig_update,返回对person进行更新操作后,被更新的记录条数(2)执行触发器(3)修改触发器trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息5、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted)。

(1)在person上创建触发器ins_del_sample,在插入、删除或更新操作后,分别从inserted表和deleted表中查询员工所有信息。

(请同学们在做删除操作时,注意备份)(2)执行触发器。

思考执行插入、删除和更新操作后返回的表有什么区别?6、使用系统存储过程查看触发器(与存储过程的使用类似)(1)显示触发器trig_update的一般信息(2)显示触发器trig_update的源代码(3)显示person上所有的依赖关系(4)显示触发器trig_update所引用的对象。

使用MySQL存储过程和触发器的技巧与实践

使用MySQL存储过程和触发器的技巧与实践

使用MySQL存储过程和触发器的技巧与实践概述:MySQL是一种非常流行的关系型数据库管理系统,具备强大的功能和灵活的扩展性。

其中存储过程和触发器是MySQL的两个重要特性,可以在数据库层面提供更高效、更安全的数据操作。

本文将介绍使用MySQL存储过程和触发器的技巧与实践,并叙述其优势、适用场景,以及实际案例的运用。

一、存储过程的优势和适用场景存储过程是一组预编译的SQL语句的集合,可以被多次调用和执行。

它具备以下优势:1. 提高数据操作效率:存储过程在数据库中编译和存储,减少了与数据库服务器的网络通信,极大地减少了传输时间,从而提高了数据操作的效率。

2. 减少重复代码:存储过程可以被多次调用,避免编写重复的SQL语句和业务逻辑,提高了代码的复用性和可维护性。

3. 加强数据安全性:存储过程可以设置权限,只有具备执行权限的用户才能调用和执行,有效地避免了数据的非法操作和误操作。

存储过程适用于以下场景:1. 频繁执行的复杂数据操作:存储过程适用于那些由多条SQL语句组成的复杂数据操作,例如批量插入或更新大量数据、复杂的数据计算等。

2. 数据库访问权限控制:存储过程可以设置权限,适用于对敏感数据进行保护、限制访问的场景。

3. 数据库性能优化:通过存储过程可以将一些频繁执行的操作在数据库层面实现,减少了网络通信的开销,提高了数据库的整体性能。

二、存储过程的编写和调用存储过程的编写和调用需要一定的语法和规范,下面是一个示例代码:DELIMITER $$CREATE PROCEDURE get_customer(IN customer_id INT, OUT customer_name VARCHAR(50))BEGINSELECT name INTO customer_name FROM customers WHERE id =customer_id;END $$DELIMITER ;CALL get_customer(1, @c_name);SELECT @c_name;示例中的存储过程名为get_customer,接受一个INT类型的参数customer_id,返回一个VARCHAR类型的参数customer_name。

实验五 触发器、存储过程的建立与使用

实验五 触发器、存储过程的建立与使用

实验五触发器、存储过程的建立与使用一、实验目的:理解触发器和存储过程的概念和作用,掌握创建和使用触发器、存储过程的方法,为后继学习和开发程序作准备。

二、实验属性(验证性)1.理解触发器、存储过程的原理及作用。

2.理解并掌握触发器的创建及使用。

3. 理解并掌握存储过程的定义及使用执行。

三、实验仪器环境与要求PC机,SQL SERVER2012四、实验要求1.复习教材第五章和第八章相关内容,熟悉触发器和存储过程的创建语句。

2.熟悉SQL SERVER2012开发环境。

3.理解并掌握查看、修改和删除触发器的方法。

4.掌握验证触发器的效果。

5. 理解并掌握查看、修改和删除存储过程的方法。

6.掌握创建并执行存储过程的方法。

五、实验原理SQL语言基本应用。

六、实验步骤:(1) 启动SQL SERVER2012。

(2) 附加数据库;(3) 验证如下例子:1 触发器1、在学生表student上创建一个触发器,当在此表中删除数据后,弹出‚请注意你删除了数据‛。

create trigger delete_student1on student after deleteasprint'请注意你删除了数据'godeletefrom studentwhere sno='0603002'2、接着再创建一个触发器,当删除某个人的数据后,弹出‚请注意你删除了某个人的数据‛。

create trigger delete_student2on student after deleteasif'孙南'in(select sname from student where sname='孙南') beginprint'请注意你删除了孙南数据'endgodeletefrom studentwhere sname='孙南'3、在student表上创建一个触发器,当插入数据时,年龄不小于15岁。

实验五 触发器及存储过程的使用

实验五 触发器及存储过程的使用

实验五触发器与存储过程
【实验目的】:①掌握触发器的使用
②掌握存储过程的使用
【实验内容】:相关命令写在作业本上。

1、建立银行业务数据库bankdb,其中,帐户信息表(bank)存放帐户的信息,交易信息表(transInfo)存放每次的交易信息。

(1)当向交易信息表(transInfo)中插入一条交易信息时,自动更新对应帐户的余额。

(2)当删除交易信息表时,要求自动备份被删除的数据到表backupTable中。

(3)跟踪用户的交易,交易金额超过20000元,则取消交易,并给出错误提示。

2、在学生成绩数据库中,利用存储过程,查询每门考试的平均分,若平均分大于85分,显示“优秀”,否则显示“较差”,并查询这门课中未通过考试的学生名单。

3、有程序员工资表prowage(id int,panme char(10),wage int),其中id是程
wage是工资。

创建一个存储过程,对程序员的工资进行分析,如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止。

存储过程执行完后,最终加了多少钱?每个人的工资为多少?
思考:如何修改上题的命令创建存储过程,要求查询程序员平均工资在4500元,如果不到,则每个程序员每次加200元,直到所有程序员平均工资达到4500元为止。

【实验答案】:1、(1)命令为:
(2)命令为:
(3)命令为:
2、命令为:
3、命令为:。

实验五 存储过程和触发器的使用

实验五 存储过程和触发器的使用

实验五存储过程和触发器的使用【目的要求】1、了解存储过程的基本概念和类型。

2、了解创建存储过程的T-SQL语句的基本语法。

3、了解查看、执行、修改和删除存储过程的T-SQL命令的用法。

4、了解触发器的基本概念和类型。

5、了解创建触发器的T-SQL语句的基本语法。

6、了解查看、修改和删除存储过程的T-SQL命令的用法。

【实验内容】内容一:存储过程的使用一、数据需求分析存储过程是一种数据库对象,为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用,自动完成需要预先执行的任务。

存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中便于以后调用,提高了代码的执行效率。

二、内容要点分析1、SQL SERVER支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。

其中,系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。

系统存储过程定义在系统数据库master中,其前缀是sp_。

本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,不能以sp_为前缀。

2、只能在当前数据库中创建存储过程。

3、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

4、创建存储过程的T-SQL语句CREATE PROC[EDURE] 存储过程名称[{ @参数名称数据类型 }] [,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:(1)RECOMPILE表明每次运行该过程时,将其重新编译。

(2)ENCRYPTION表示 SQL SERVER 加密SYSCOMMENTS表中包含CREATE PROCEDURE语句文本的条目。

注:必须将CREATE PROCEDURE语句放在单个批处理中。

实验训练5:存储过程与函数的构建与使用

实验训练5:存储过程与函数的构建与使用

实验训练5:存储过程与函数的构建与使用一、存储过程与函数的概念存储过程和函数都是数据库中的可执行代码,可以被多次调用和重复使用。

存储过程是一组预定义的SQL语句集合,可以在数据库中定义和存储。

而函数是一个独立的代码块,它接收输入参数并返回一个值。

二、存储过程的构建与使用1. 创建存储过程在MySQL中,创建存储过程需要使用CREATE PROCEDURE语句。

例如:CREATE PROCEDURE myproc()BEGINSELECT * FROM mytable;END;这个例子创建了一个名为myproc的存储过程,它会查询mytable表中的所有数据。

2. 调用存储过程使用CALL语句可以调用已经创建好的存储过程。

例如:CALL myproc();这个语句会执行myproc存储过程中定义的SQL语句。

3. 存储过程参数我们可以给存储过程添加参数来使其更加灵活。

例如:CREATE PROCEDURE myproc(IN p1 INT, IN p2 VARCHAR(50)) BEGINSELECT * FROM mytable WHERE column1 = p1 AND column2 = p2;END;这个例子创建了一个带有两个输入参数p1和p2的存储过程,它会查询mytable表中column1等于p1并且column2等于p2的数据。

4. 存储过程变量除了参数之外,存储过程还可以使用变量来存储中间结果。

例如:CREATE PROCEDURE myproc(IN p1 INT)BEGINDECLARE v1 INT;SET v1 = p1 * 2;SELECT * FROM mytable WHERE column1 = v1;END;这个例子创建了一个带有一个输入参数p1和一个变量v1的存储过程,它会将p1乘以2并将结果存储在v1变量中,然后查询mytable表中column1等于v1的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五视图、存储过程与触发器的应用准备工作:
1.创建数据库Student
2.生成一个表名为student的表
3
4.用企业管理器创建教工表teacher,要求如下:
一、目的与要求
1.掌握创建、修改、删除视图的SQL语句的用法。

2.掌握使用企业管管理器创建视图的方法。

3.了解存储过程基本概念和类型,掌握创建存储过程的方法和步骤。

4.掌握创建、查看、执行、修改和删除存储过程的SQL命令的用法。

5.了解触发器的基本概念和类型,掌握创建触发器的方法和步骤。

6.掌握创建查看、修改、使用和删除触发器的SQL命令的用法。

二、实验内容
视图
1. 在STUDENT库中以“student”表为基础,建立一个名为“V_经济管理系学生”的视图(注:经济管理系的系部代码为“02”)。

在使用该视图时,将显示“student”表中的所有字段。

USE STUDENT
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name=' V_经济管理系学生' AND type='V')
DROP view V_经济管理系学生
GO
CREATE VIEW V_经济管理系学生
AS
select * from student
where sdept='02'
GO
2. 使用视图“V_经济管理系学生”查询经济管理系学生的信息。

Select * from V_经济管理系学生
3. 在查询分析器中使用更改视图的命令将视图“V_经济管理系学生”更名为“V_经管系男生”。

sp_rename V_经济管理系学生V_经管系男生
4. 修改“V_经管系男生”视图的内容。

视图修改后,在使用该视图时,将得到经济管理系所有“男”学生的信息。

ALTER VIEW V_经管系男生
AS
SELECT * FROM student
where sdept='02' and sex='男'
GO
5. 删除视图“V_经管系男生”。

DROP VIEW V_经济管理系男生
使用存储过程
(1)使用STUDENT数据库中的学生表student、课程信息表Course、选课成绩表Sc,创建一个带参数的存储过程: cjjicx。

该存储过程的作用是:当任意输入一个学生的姓名时,将从三个表中返回该学生的学号、选修的课程名称和课程成绩。

USE STUDENT
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='cjjicx' AND type='P')
DROP procedure cjjicx
GO
create procedure cjjicx
@sname char(8)
as
select sno,cname,grade from student,course,sc
where student.sno=sc.sno and o=o and sname=@sname
go
(2)执行cjjicx存储过程,查询“刘永辉”的学号、选修课程和课程成绩。

excute cijicx @ sname =‘刘永辉’
(3)使用系统存储过程sp_helptext查看存储过程cjjicx的文本信息。

Sp_helptext cijicx
(4)使用STUDENT数据库中的学生表,为其创建一个加密的存储过程—jmxs。

该存储过程的作用是:当执行该存储过程时,将返回计算机系学生的所有
信息。

(5)执行jmxs存储过程,查看计算机系学生的情况。

(6)删除jmxs存储过程。

Drop procedure jmxs
使用触发器
(1)在student数据库中建立一个名为insert_teacher的INSERT触发器,存储在teacher表中。

该触发器的作用是:当用户向teacher表中插入记录时,如果插入了在teacher表中没有的系别类别,则提示用户不能插入记录,否则提示记录插入成功。

USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='insert_teacher' AND type='TR')
DROP TRIGGER insert_teacher
GO
CREATE TRIGGER insert_teacher
ON teacher
AFTER insert
AS
IF (SELECT 系别FROM inserted) not in(SELECT DISTINCT系别FROM teacher)
BEGIN
PRINT ‘YOU CAN NOT INSERT THIS RECORD’
ROLLBACK
END
ELSE
PRINT ‘INSERT FINISHED’
GO
(2)为student数据库中的teacher表创建一个名为dele_teacher的DELETE 触发器,该触发器的作用是禁止删除teacher表中的记录。

USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='dele_teacher' AND type='TR')
DROP TRIGGER dele_teacher
GO
CREATE TRIGGER dele_teacher
ON teacher
INSTEAD OF DELETE
AS
PRINT ‘YOU CAN NOT DELETE RECORDS’
GO
(3)为student数据库中的teacher表创建一个名为update_teacher的UPDATE触发器,该触发器的作用是禁止更新teacher表中的“系别”字段的内容。

USE student
GO
IF EXISTS(SELECT name FROM sysobjects
WHERE name='update_teacher' AND type='TR')
DROP TRIGGER update_teacher
GO
CREATE TRIGGER update_teacher
ON teacher
AFTER UPDATE
AS
IF UPDATE(系别)
BEGIN
PRINT ‘YOU CAN NOT UPDATE THIS FIELD’
ROLLBACK
END
GO
(4)禁用update_teacher触发器。

ALTER TABLE teacher
DISABLE TRIGGER update_teacher
(5)启用update_teacher触发器。

ALTER TABLE teacher
ENABLE TRIGGER update_teacher
(6)删除update-teacher触发器。

DROP TRIGGER update-teacher。

相关文档
最新文档