MySQL数据库基础与实例教程第8章

合集下载

(完整版)数据库系统基础教程第八章答案

(完整版)数据库系统基础教程第八章答案

Section 1Exercise 8.1.1a)CREATE VIEW RichExec ASSELECT * FROM MovieExec WHERE netWorth >= 10000000;b)CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExec, Studio WHERE MovieExec.cert# = Studio.presC#;c)CREATE VIEW ExecutiveStar (name, address, gender, birthdate, cert#, netWorth) AS SELECT , star.address, star.gender, star.birthdate, exec.cert#, WorthFROM MovieStar star, MovieExec exec WHERE = ANDstar.address = exec.address;Exercise 8.1.2a)SELECT name from ExecutiveStar WHERE gender = ‘f’;b)SELECT from RichExec, StudioPres where = ;c)SELECT from ExecutiveStar, StudioPresWHERE Worth >= 50000000 ANDStudioPres.cert# = RichExec.cert#;Section 2Exercise 8.2.1The views RichExec and StudioPres are updatable; however, the StudioPres view needs to be created with a subquery.CREATE VIEW StudioPres (name, address, cert#) ASSELECT , MovieExec.address, MovieExec.cert# FROM MovieExecWHERE MovieExec.cert# IN (SELECT presCt# from Studio);Exercise 8.2.2a) Yes, the view is updatable.b)CREATE TRIGGER DisneyComedyInsertINSTEAD OF INSERT ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWINSERT INTO Movies(title, year, length, studioName, genre)VALUES(NewRow.title, NewRow.year, NewYear.length, ‘Disney’, ‘comedy’);c)CREATE TRIGGER DisneyComedyUpdateINSTEAD OF UPDATE ON DisneyComediesREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE Movies SET length NewRow.lengthWHERE title = NewRow.title AND year = NEWROW.year ANDstudionName = ‘Disney’ AND genre = ‘comedy’;Exercise 8.2.3a) No, the view is not updatable since it is constructed from two different relations.b)CREATE TRIGGER NewPCInsertINSTEAD OF INSERT ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROW(INSERT INTO Product VALUES(NewRow.maker, NewRow.model, ‘pc’))(INSERT INTO PC VALUES(NewRow.model, NewRow.speed, NewRow.ram, NewRow.hd, NewRow.price));c)CREATE TRIGGER NewPCUpdateINSTEAD OF UPDATE ON NewPCREFERENCING NEW ROW AS NewRowFOR EACH ROWUPDATE PC SET price = NewPC.price where model = NewPC.model;d)CREATE TRIGGER NewPCDeleteINSTEAD OF DELETE ON NeePCREFERENCING OLD ROW AS OldRowFOR EACH ROW(DELETE FROM Product WHERE model = OldRow.model)(DELETE FROM PC where model = OldRow.model);Section 3Exercise 8.3.1a)CREATE INDEX NameIndex on Studio(name);b)CREATE INDEX AddressIndex on MovieExec(address);c)CREATE INDEX GenreIndex on Movies(genre, length);Section 4Exercise 8.4.1Exercise 8.4.2Q1 = SELECT * FROM Ships WHERE name = n;Q2 = SELECT * FROM Ships WHERE class = c;Q3 = SELECT * FROM Ships WHERE launched = y;I = InsertsIndexesNone Name Class Launched Name & Name & Class & ThreeSection 5Exercise 8.5.1Updates to movies that involves title or yearUPDATE MovieProd SET title = ‘newTitle’ where title=’oldTitle’ AND year = oldYear; UPDATE MovieProd SET year = newYear where title=’oldYitle’ AND year = oldYear;Update to MovieExec involving cert#DELETE FROM MovieProdWHERE (title, year) IN (SELECT title, yearFROM Movies, MovieExecWHERE cert# = oldCert# AND cert# = producerC#);INSERT INTO MovieProdSELECT title, year, nameFROM Movies, MovieExecWHERE cert# = newCert# AND cert# = producerC#;Exercise 8.5.2Insertions, deletions, and updates to the base tables Product and PC would require a modification of the materialized view.Insertions into Product with type equal to ‘pc’:INSERT INTO NewPCSELECT maker, model, speed, ram, hd, price FROM Product, PC WHEREProduct.model = newModel and Product.model = PC.model;Insertions into PC:INSERT INTO NewPCSELECT maker, ‘newModel’, ‘newSpeed’, ‘newRam’, ‘newHd’, ‘newPrice’FROM Product WHERE model = ‘newModel’;Deletions from Product with type equal to ‘pc’:DELETE FROM NewPC WHERE maker = ‘deletedMaker’ AND model=’deletedModel’; Deletions from PC:DELETE FROM NewPC WHERE model = ‘deletedModel’;Updates to PC:Update NewPC SET speed=PC.speed, ram=PC.ram, hd=PC.hd, price=PC.price FROM PC where model=pc.model;Update to the attribute ‘model’ needs to be treated as a delete and an insert. Updates to Product:Any changes to a Product tuple whose type is ‘pc’ need to be treated as a delete or an insert, or both.Exercise 8.5.3Modifications to the base tables that would require a modification to the materialized view: inserts and deletes from Ships, deletes from class, updates to a Class’ displacement. Deletions from Ship:UPDATE ShipStats SETdisplacement=((displacement * count) –(SELECT displacementFROM ClasssesWHERE class = ‘DeletedShipClass’)) / (count – 1),count = count – 1WHEREcountry = (SELECT country FROM C lasses WHERE class=’DeletedShipClass’); Insertions into Ship:Update ShipStat SETdisplacement=((displacement*count) +(SELECT displacement FROM ClassesWHERE class=’InsertedShipClass’)) / (count + 1),count = count + 1WHEREcountry = (SELECT country FROM Classes WHERE classes=’InsertedShipClass); Deletes from Classes:NumRowsDeleted = SELECT count(*) FROM ships WHERE class = ‘DeletedClass’; UPDATE ShipStats SETdisplacement = (displacement * count) - (DeletedClassDisplacement *NumRowsDeleted)) / (count – NumRowsDeleted),count = count – NumRowsDeletedWHERE country = ‘DeletedClassCountry’;Update to a Class’ displacement:N = SELECT count(*) FROM Ships where class = ‘UpdatedClass’;UPDATE ShipsStat SETdisplacement = ((displacement * count) + ((oldDisplacement – newDisplacement) * N))/countWHEREc ountry = ‘UpdatedClassCountry’;Exercise 8.5.4Queries that can be rewritten with the materialized view:Names of stars of movies produced by a certain producerSELECT starNameFROM StarsIn, Movies, MovieExecWHERE movieTitle = title AND movieYear = year AND producerC# = cert# AND name = ‘Max Bialystock’;Movies produced by a certain producerSELECT title, yearFROM Movies, MovieExecWhere produce rC# = cert# AND name = ‘George Lucas’;Names of producers that a certain star has worked withSELECT nameFROM Movies, MovieExec, StarsInWhere producerC#=cert# AND title=movieTitle AND year=movieYear AND starName=’Carrie Fisher’;The number of movies produced by given producerSELECT count(*)FROM Movies, MovieExecWHER E producerC#=cert# AND name = ‘George Lucas‘;Names of producers who also starred in their own moviesSELECT nameFROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND = starName;The number of stars that have starred in movies produced by a certain producer SELECT count(DISTINCT starName)FROM Movies, StarsIn, MovieExecWHERE producerC#=cert# AND movieTitle = title AND movieYear = year AND n ame ‘George Lucas’;The number of movies produced by each producerSELECT name, count(*)FROM Movies, MovieExecWHERE producerC#=cert# GROUP BY name。

《MySQL数据库实用教程》电子教案

《MySQL数据库实用教程》电子教案
教学
内容
设计
课程引入:通过提出问题“如何删除表中的记录数据?”引入本课。
授课内容:
1.DELETE和TRUNCATE语句的语法格式
2.删除满足指定条件的数据
3.删除全部数据
总结课程内容,重申重点、难点
课后任务
完成“例4-10”“例4-11”和“例4-12”
任务名称
第四节课堂案例:学生成绩管理数据库的数据操作
授课内容:
一、关系模式设计
1.实体集的转换原则
2.实体集之间的联系的转换原则
【例2-2】将全局E-R图中各个实体集以及实体集之间的联系转换为一组关系模式。
二、关系模式的规范化
1.第一范式(1NF)
2.第二范式(2NF)
3.第三范式(3NF)
【例2-3】检验例2-2方案1和方案2中的关系模式是否满足规范化要求。
任务名称
第四节 子查询、联合查询
教学目的
掌握子查询和联合查询
教学方法
课堂授课、班级授课
教学手段
多媒体教学
重点难点
重点:子查询和联合查询
难点:子查询的执行顺序
3.关系运算
总结课程内容,重申重点、难点
课后任务
完成第1章习题,巩固数据库基础知识
任务名称
第二节MySQL 的安装与配置
教学目的
掌握MySQL的安装与配置方法。
掌握登录与退出MySQL的方法。
教学方法
课堂授课、班级授课
教学手段
多媒体教学
重点难点
重点:登录与退出MySQL
难点:以root身份通过命令提示符窗口登录MySQL的命令mysql
难点:三张表的内连接查询
教学
内容

MySQL数据库应用实战教程 第8章教案 综合案例——图书管理系统

MySQL数据库应用实战教程 第8章教案 综合案例——图书管理系统
课前组织
做好课前“5分钟”教学管理(多媒体、实训室),做好上课前的各项准备工作(打开电脑、打开课件、打开软件、打开U盘中的素材位置、打开授课计划、教案等),吸引学生注意力。
课程
说明
【课前说明】
1.掌握需求管理的设计方法
2.掌握数据库设计方法
3.掌握创建数据库的方法
4.掌握用户信息管理的设计方法
5.掌握图书管理的设计方法
6.掌握借书管理的设计方法
7.掌握视图管理的设计方法
分别从需求管理、数据库设计、创建数据库、用户信息管理、图书管理、借书管理、视图管理等基础知识来介绍设计和使用图书管理系统的方法,具备设计图书管理系统的能力。
【目的】
使学生从了解本单元的学习目标、学习重点、考评方式等方面明确学习本单元知识的要求和目标。掌握表单的基本概念,掌握进行表单验证的方法。
2.掌握数据库设计方法
3.掌握创建数据库的方法
4.掌握用户信息管理的设计方法
5.掌握图书管理的设计方法
6.掌握借书管理的设计方法
7.掌握视图管理的设计方法
素质目标:
1. 培养学生信息搜集能力
2. 培养学生团结合作、互帮互助的能力
教学内容
1.创建一个表单,处理提交表单、重置表单和验证表单
2.学生动手操作
总结
评价
本章练习图书管理系统数据库的设计和使用,建立9张数据库表,包括用户表、部门表、图书表、图书借阅表等;然后插入初始化数据;接着进行用户信息管理、图书管理、借书管理等操作;对于多表联合查询,通过建立视图的方式加快数据库的查询。
本节课主要运用案例教学法,介绍了图书管理系统的设计方法。通过实例的方法加强对相关操作的理解,达到能够独立熟练解决实际问题的能力。教学评价方式以小组为单位,以完成案例的质量为评价标准,形成任务驱动,小组协作,质量与速度并存的课堂评价方式 ,促进学生的自主、创新学习的方式 。

MySQL基础与实例教程教案

MySQL基础与实例教程教案

计算机与信息工程学院教案2015―2016学年度第1学期课程名称 MySQL数据库主讲教师孔祥盛授课对象 2017计算机科学与技术1、2班授课时间周一1、2、3、4授课地点 A12-0304 A14-0321教案(首页)教案编写时间:2.预留版面不够可另附页。

第1章数据库设计概述一、教学目的:【了解】:本章抛开MySQL讲解关系数据库设计的相关知识,以“选课系统”为例,讲解“选课系统”数据库的设计流程。

【掌握】:通过本章的学习,学生将具备一定的数据库设计能力二、教学重点:教学重点是E-R图的设计。

教学难点是关系数据库的设计。

三、教学难点:教学难点是关系数据库的设计。

四、教学进程(含教学内容、教学方法、辅助手段、师生互动、时间分配、板书设计、作业布置等):教学内容:本章首先介绍数据库概述,然后介绍数据库设计的相关知识,并以选课系统E-R图为例介绍关系数据库的设计过程。

通过本章的学习,读者可以了解关系数据库的设计流程。

教学过程设计:新课导入、案例教学、课堂讨论、作业讲评。

教学方法:以多媒体讲授为主,适当结合提问、设问、讨论等方法。

内容提要:1.1 数据库概述1.1.1 关系数据库管理系统1.1.2 关系数据库1.1.3 结构化查询语言SQL1.2 数据库设计的相关知识1.2.1 商业知识和沟通技能1.2.2 数据库设计辅助工具1.2.3 “选课系统”概述1.2.4 定义问题域1.2.5 编码规范1.3 E-R图1.3.1 实体和属性1.3.2 关系1.3.3 E-R图的设计原则1.4 关系数据库设计1.4.1 为每个实体建立一张数据库表1.4.2 为每张表定义一个主键1.4.3 增加外键表示一对多关系1.4.4 建立新表表示多对多关系1.4.5 为字段选择合适的数据类型1.4.6 定义约束(constraint)条件1.4.7 评价数据库表设计的质量1.4.8 使用规范化减少数据冗余1.4.9 避免数据经常发生变化4、课后小结和布置作业(5分钟)讨论与思考:1.数据库管理系统中常用的数学模型有哪些?2.您听说过的关系数据库管理系统有哪些?数据库容器中通常包含哪些数据库对象?3.通过本章知识的讲解,SQL与程序设计语言有什么关系?4.通过本章的学习,您了解的MySQL有哪些特点?5.通过本章的学习,您觉得数据库表与电子表格(例如Excel)有哪些区别?6.您所熟知的数据库设计辅助工具有哪些?您所熟知的模型、工具、技术有哪些?7.请您罗列出“选课系统”需要实现哪些功能,使用数据库技术能够解决“选课系统”中的哪些商业问题?8.您所熟知的编码规范有哪些?9.您是如何理解“E-R图中实体间的关系是双向的”?能不能举个例子?10.E-R图中,什么是基数?什么是元?什么是关联?作业:1.根据本章的场景描述——“很多团购网站在网上对房源进行出租”的E-R图,请设计该场景描述的数据库表。

超详细的MySQL数据库入门教程

超详细的MySQL数据库入门教程

超详细的MySQL数据库入门教程一、什么是MySQL数据库MySQL数据库是一种开源的关系型数据库,是目前最受欢迎和广泛使用的数据库之一,因为它具备很高的可靠性、充分的功能性、完整的文档和良好的性能。

相对于其他数据库管理系统,MySQL最大的特点就是速度非常快,而且支持多种操作系统,如Unix、Windows和Linux等。

二、MySQL基本知识1. 数据库对象在MySQL中,可以使用固定的术语来描述所涉及的不同组件和对象。

其中最为常见的三个对象是:表、列和行。

表:用于存储数据的矩形结构,包括许多有序列和行的特定类型的数据。

列:表中具有独立类型、唯一名称且包含数据的一部分。

例如,一个表可以包含名为“id”、“name”和“age”的三列。

行:表中的一条记录,包含列的特定值。

2. SQL语句SQL(结构化查询语言)是与MySQL之间交流的常用语言,它是一种标准的语言,用于管理和操作数据库。

MySQL支持以下几类SQL语句:- 数据定义语言(DDL):创建、改变和删除数据库对象,如表、列、视图等。

- 数据操作语言(DML):增加、删除和修改表中的数据。

- 数据查询语言(DQL):基于查询语句从数据库中检索信息。

- 数据控制语言(DCL):用于控制访问和安全等方面的语句,如授权、撤销权限等。

3. MySQL命令行工具MySQL命令行工具是MySQL数据库最常用的命令行工具之一,它可以通过命令行窗口连接和操作MySQL数据库。

常用的MySQL命令行工具有两种:- MySQL命令行客户端:用于连接和操作MySQL数据库。

- MySQL命令行导入和导出工具:用于将数据从文件或其他数据格式导入到MySQL数据库中,并在不同的数据存储之间导出数据。

三、开启和关闭MySQL1. 开启MySQL首先,需要安装MySQL数据库,安装方式与其他应用程序的安装方式相同。

在安装成功后,用户可以通过两种方式来开启MySQL:- 通过命令行工具启动MySQL。

MySQL数据库应用与管理项目化教程(微课版)(何小苑)教案

MySQL数据库应用与管理项目化教程(微课版)(何小苑)教案

教案名称:MySQL数据库应用与管理项目化教程(微课版)教案章节:第一章MySQL数据库基础【教学目标】1. 理解数据库的基本概念,掌握数据库的基本操作。

2. 掌握MySQL数据库的安装与配置。

3. 掌握MySQL数据库的基本语法,包括数据类型、运算符、函数等。

【教学内容】1. 数据库的基本概念:数据库、数据库管理系统、数据库系统。

2. MySQL数据库的安装与配置:与安装、配置MySQL。

3. MySQL数据库的基本语法:数据类型、运算符、函数等。

【教学过程】1. 引入:讲解数据库的基本概念,引导学生理解数据库的重要性。

2. 讲解:讲解MySQL数据库的安装与配置步骤,演示安装与配置过程。

3. 实践:让学生动手实践,安装与配置MySQL数据库。

4. 讲解:讲解MySQL数据库的基本语法,包括数据类型、运算符、函数等。

5. 练习:让学生练习使用MySQL数据库的基本语法。

【教学评价】1. 课后作业:让学生完成课后练习,巩固所学知识。

2. 课堂练习:在课堂上让学生动手实践,及时发现问题并解决问题。

章节:第二章MySQL数据库设计与建模【教学目标】1. 掌握数据库设计的基本步骤,能够独立完成数据库设计。

2. 掌握实体-关系模型,能够将现实世界中的问题转化为实体-关系模型。

3. 掌握SQL语言,能够使用SQL语言创建、修改和查询数据库。

【教学内容】1. 数据库设计的基本步骤:需求分析、概念设计、逻辑设计、物理设计。

2. 实体-关系模型:实体、属性、关系、键。

3. SQL语言:创建、修改和查询数据库。

【教学过程】1. 引入:讲解数据库设计的重要性,引导学生理解数据库设计的作用。

2. 讲解:讲解数据库设计的基本步骤,演示数据库设计过程。

3. 实践:让学生动手实践,完成一个简单的数据库设计。

4. 讲解:讲解实体-关系模型,演示实体-关系模型的转化过程。

5. 练习:让学生练习使用SQL语言创建、修改和查询数据库。

MySQL基础与实例教程之MySQL基础知识

MySQL基础与实例教程之MySQL基础知识
非关系型数据库
非关系型数据库是采用非关系型数据模型来组织和存储数据的数据库,如mongodb、redis等。
数据库的创建、修改与删除
创建数据库
使用create database语句可以 创建一个新的数据库,语法为: create database database_name。
修改数据库
可以使用alter database语句来 修改数据库的属性,如修改数据 库的名称、修改数据库的字符集 等。
在MySQL中,表名是唯一的,不能有重复。
数据类型
01
02
03
数据类型是用来定义表中的列可以存 储的数据的类型。
MySQL支持多种数据类型,包括整 数类型、浮点数类型、日期/时间类 型、字符串类型等。
不同的数据类型适用于不同的数据存 储需求,例如存储日期、文本、数字 等。
表的创建、修改与删除
表的创建
mysql基础与实例教程之 mysql基础知识
2023-11-06
目录
• mysql简介 • mysql安装与配置 • mysql数据库基础 • 表与数据类型 • 查询与索引 • 数据插入、更新与删除 • 数据备份与恢复
01
mysql简介
什么是mysql
• MySQL 是一个开源的关系型数据库管理系统(RDBMS)。它使用了一种名为 Structured Query Language(SQL)的语言进行数据操作和管理。MySQL 由瑞典公司 MySQL AB 在 2000 年开发,现在由 甲骨文公司(Oracle Corporation)拥有并维护。
• 从MySQL官方网站下载预编译的二进制 文件进行安装。
03
• 从MySQL官方网站下载源代码,然后使 用编译器进行编译和安装。

MySQL 数据库基础与应用 第8章 存储过程和存储函数

MySQL 数据库基础与应用 第8章 存储过程和存储函数

COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
组成。这组语句编译后存储在数据库服务器端,用户通过指定存储过程 的名称并给出参数(如果该存储过程带有参数)来执行。将经常需要执行
的特定的操作写成存储过程,通过过程名,就可以多次调用,从而实现 程序的模块化设计,这种方式提高了程序的效率,节省了用户的时间。
存储过程具有以下特点:
● 存储过程编译后放在数据库服务器端、并在服务器端运行,执 行速度快。
入/输出参数3种,分别用IN、OUT和INOUT这3个关键字来标志。存储过
程中的参数被称为形式参数(简称形参),调用带参数的存储过程则应提
供相应的实际参数(简称实参)。
● IN:向存储过程传递参数,只能将实参的值传递给形参;在存储
过程内部只能读、不能写;对应IN关键字的实参可以是常量或变量。
● OUT:从存储过程输出参数,存储过程结束时形参的值会被赋给
● 存储过程可以用于处理较为复杂的应用问题。
● 存储过程可以提高系统性能 。
● 可存储过程增强了数据库的安全性。
● 可增强SQL语言的功能和灵活性。
● 存储过程允许模块化程序设计。
● 可以减少网络流量。
MySQL 数据库基础与应用
2

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

8.3 游标
8.1.6 存储过程与函数的比较
存储过程与函数之间的不同之处在于: 函数必须有且仅有一个返回值,且必须指定 返回值数据类型(返回值类型目前仅仅支持字符 串、数值类型)。存储过程可以没有返回值,也 可以有返回值,甚至可以有多个返回值,所有的 返回值需要使用out或者inout参数定义。
8.1.6 存储过程与函数的比较
MySQL数据库基础与实例教程

存储过程与游标
肖红
内容一览
本章主要讲解如何 在MySQL中使用存 储过程,并结合 “选课系统”讲解 存储过程在该系统 中的应用,最后本 章对存储程序做了 总结。
1 存储过程 2 错误触发条件和错误处理 3 游标
4 预处理SQL语句
5 存储程序的说明
8.1 存储过程
8.1.6 存储过程与函数的比较
存储过程与函数之间的不同之处在于: 函数中的函数体限制比较多,比如函数体内 不能使用以显式或隐式方式打开、开始或结束事 务的语句,如start transaction、commit、 rollback或者set autocommit=0等语句;不能在 函数体内使用预处理SQL语句(稍后讲解)。存 储过程的限制相对就比较少,基本上所有的SQL 语句或MySQL命令都可以在存储过程中使用。
inout代表即是输入参数,又是输出参数, 表示该参数的值即可以由调用程序指定,又 可以将inout参数的计算结果返回给调用程序。
8.1.1 创建存储过程的语法格式
例如下面的存储过程:
delimiter $$ create procedure get_choose_number_proc(in student_no1 int,out choose_number int) reads sql data begin select count(*) into choose_number from choose where student_no=student_no1; end $$ delimiter ;
8.1.2 存储过程的调用
set @number = '2012001'; call get_choose_number1_proc(@number); select @number;
8.1.3 “选课系统”的存储过程
任务布臵1:上机操作,完成本书场景描述1 的任务要求。 任务布臵2:上机操作,完成本书场景描述2 的任务要求。 任务布臵3:上机操作,完成本书场景描述3 的任务要求。
存储过程也可以看作是 一个“加工作坊”,它 接收“调用者”传递过 来的“原料”( in参 数),然后将这些“原 料”“加工处理”成 “产品”( 存储过程的 out参数或inout参数), 再把“产品”返回给 “调用者”。
1 创建存储过程的语法格式 2 存储过程的调用 3 “选课系统”的存储过程 4 查看存储过程的定义 5 删除存储过程 6 存储过程与函数的比较
8.2.1 自定义错误处理程序
错误触发条件:表示满足什么条件时,自定义 错误处理程序开始运行,错误触发条件定义了自 定义错误处理程序运行的时机。
错误触发条件有 3种取值:MySQL错误代码、 ANSI标准错误代码以及自定义错误触发条件。例 如 1452是 MySQL错误代码,它对应于 ANSI 标准 错误代码 23000 ,自定义错误触发条件稍后讲解。
8.1.4 查看存储过程的定义
3.使用MySQL命令“show create procedure 存储过程名;”可以查看指定数据库指定存储过程 的详细信息。
例如查看get_choose_number_proc()存储过程 的详细信息,可以使用“show create procedure get_choose_number_proc\G”
8.2.1 自定义错误处理程序
自定义错误处理程序:错误发生后, MySQL 会立即执行自定义错误处理程序中的MySQL语句, 自定义错误处理程序也可以是一个 begin-end 语 句块。 任务布臵4:上机操作,完成本书场景描述4:自 定义错误处理程序的任务要求。
8.2.2 自定义错误触发条件
自定义错误触发条件允许数据库开发人员为 MySQL错误代码或者ANSI标准错误代码命名, 语法格式如下。
8.1.2 存储过程的调用
调用存储过程须使用call关键字,另外还要 向存储过程传递in参数、out参数或者inout 参数。 例如:
set @student_no = '2012001'; set @choose_number = 0; call get_choose_number_proc(@student_no,@choose_number); select @choose_number;
8.1.2 存储过程的调用
存储过程get_choose_number_proc()中 的in参数与out参数的数据类型都为整数,也 可以将这两个参数简化为一个inout参数。
8.1.2 存储过程的调用
delimiter $$ create procedure get_choose_number1_proc(inout number int) reads sql data begin select count(*) into number from choose where student_no=number ; end $$ delimiter ;
declare 错误触发条件 condition for MySQL错 误代码或者ANSI标准错误代码;
8.2.2 自定义错误触发条件
例如代码片段: … declare continue handler for 1452 begin set @error1 = '外键约束错误!'; end; … 可以替换成代码片段:
8.2.2 自定义错误触发条件
… declare foreign_key_error condition for sqlstate '23000'; declare continue handler for foreign_key_error begin set @error1 = '外键约束错误!'; end; …
8.1.6 存储过程与函数的比较
存储过程与函数之间的共同特点在于: 应用程序调用存储过程或者函数时,只需要 提供存储过程名或者函数名,以及参数信息,无 需 将 若 干 条 MySQL 命 令 或 SQL 语 句 发 送 到 MySQL服务器,节省了网络开销。
8.1.6 存储过程与函数的比较
存储过程与函数之间的共同特点在于: 存储过程或者函数可以重复使用,可以减少 数据库开发人员,尤其是应用程序开发人员的工 作量。 使用存储过程或者函数可以增强数据的安全 访问控制。可以设定只有某些数据库用户才具有 某些存储过程或者函数的执行权。
8.2.3 自定义错误处理程序说明
自定义错误触发条件以及自定义错误处理程序 可以在触发器、函数以及存储过程中使用。
参与软件项目的多个数据库开发人员,如果每 个人都自建一套错误触发条件以及错误处理程序, 极易造成MySQL错误管理混乱。实际开发过程中, 建议数据库开发人员建立清晰的错误处理规范, 必要时可以将自定义错误触发条件、自定义错误 处理程序封装在一个存储程序中。
8.1.6 存储过程与函数的比较
存储过程与函数之间的不同之处在于:
应用程序(例如Java、PHP等应用程序)调用函 数时,通常将函数封装到SQL字符串(例如select语 句)中进行调用;应用程序(例如Java、PHP等应用 程序)调用存储过程时,必须使用call关键字进行调用, 如果应用程序希望获取存储过程的返回值,应用程序 必须给存储过程的out参数或者inout参数传递MySQL 会话变量,才能通过该会话变量获取存储过程的返回 值。
8.1.4 查看存储过程的定义
可以使用下面四种方法查看存储过程的定义、 权限、字符集等信息。
1.使用show procedure status命令查看存储过 程的定义。 2.查看某个数据库(例如choose数据库)中的 所有存储过程名,可以使用下面的SQL语句。 select name from mysql.proc where db = 'choose' and type = 'procedure';
8.1.1 创建存储过程的语法格式
与函数相同之处在于:存储过程的参数也 是局部变量,也需要提供参数的数据类型; 与函数不同的是,存储过程有三种类型的参 数:in参数、out参数以及inout参数。
8.1.1 创建存储过程的语法格式
in代表输入参数(默认情况下为in参数), 表示该参数的值必须由调用程序指定; out代表输出参数,表示该参数的值经存储 过程计算后,将out参数的计算结果返回给调 用程序;
8.1.1 创建存储过程的语法格式
创建存储过程的语法格式如下。 create procedure 存储过程名(参数1,参 数2,…) [存储过程选项] begin 存储过程语句块; end;
8.1.1 创建存储过程的语法格式
存储过程选项由以下一种或几种选项组合而成。 具体含义请查看函数选项的内容。 language sql | [not] deterministic | { contains sql | no sql | reads sql data | modifies sql data } | sql security { definer | invoker } | comment '注释'
存储过程与函数之间的不同之处在于: 函数体内可以使用select…into语句为某个 变量赋值,但不能使用select语句返回结果(或 者结果集)。存储过程则没有这方面的限制,存 储过程甚至可以返回多个结果集。
相关文档
最新文档