MySQL 第六章 MySL过程式数据库对象 主讲内容:存储过程、存储函数、触发器、 事件 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第2页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 2 页 第六章 MySQL过程式数据库对象 主讲内容:存储过程、存储函数、触发器、 事件
·教学内容 MySQL 1.存储过程 2.存储函数 3.触发器 4.事件 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第3页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 3 页 教学内容 1. 存储过程 2. 存储函数 3. 触发器 4. 事件
61存储过程 MySQL 存储过程是组为了完成特定功能的SQL语句集,经编译后存储在数据库中, 用户通过指定存储过程名称和参数来调用它。 存储过程的优点 (1)在存储过程内部可以编写各种功能代码,完成复杂的判断和复杂的运算, 增强灵活性。 (2)存储过程被创建后,可以在程序中被多次调用,可以随时修改,不影响 应用程序和源代码。 (3)存储过程在服务器端运行,执行速度快 (4)增加安全性。通过设置存储过程权限,可以避免非授权用户对数据的访 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第4页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 4 页 6.1 存储过程 存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中, 用户通过指定存储过程名称和参数来调用它。 存储过程的优点: (1)在存储过程内部可以编写各种功能代码,完成复杂的判断和复杂的运算, 增强灵活性。 (2)存储过程被创建后,可以在程序中被多次调用,可以随时修改,不影响 应用程序和源代码。 (3)存储过程在服务器端运行,执行速度快。 (4)增加安全性。通过设置存储过程权限,可以避免非授权用户对数据的访 问
·6,11创建存储过程 MySQL 1、创建存储过程命令 语法格式: CREATE PROCEDURE存储过程名(过程参数….]) [特征…]存储过程体 说明: 过程参数格式为:[IN丨oUT|NoUT]参数名参数类型 系统默认在当前数据库中创建。需要在特定数据库中创建存储过程时,则要 在名称前面加上数据库的名称,格式为:数据库名.存储过程名。 当存储过程有多个参数时,中间用逗号隔开。 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第5页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 5 页 6.1.1 创建存储过程 1、创建存储过程命令 语法格式: CREATE PROCEDURE 存储过程名 ([过程参数 ... ]) [特征 ...] 存储过程体 说明: – 过程参数格式为:[ IN | OUT | INOUT ] 参数名 参数类型 – 系统默认在当前数据库中创建。需要在特定数据库中创建存储过程时,则要 在名称前面加上数据库的名称,格式为:数据库名.存储过程名。 – 当存储过程有多个参数时,中间用逗号隔开
061.2存储过程体 MySQL 案例: create procedure xx student (in xh char(6)) create procedure xsc j xx student(in xh char(6)) create procedure sex xs (in xh char(6), out shuchu char(20)) M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第6页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 6 页 6.1.2 存储过程体 案 例: create procedure xx_student(in xh char(6)) create procedure xscj.xx_student(in xh char(6)) create procedure sex_xs(in xh char(6), out shuchu char(20) )
·6,11创建存储过程 MySQL (1)存储过程特征的格式 Language SQL I [not deterministic I I contains SQL NO SQL reads SQL data modifies SQL data I SQL security( definer invoker I comment ' string 说明: (1) LANGUAGE S癿L:表明编写这个存储过程的语言为S呲L语言。 (2) DETERMINISTIC DETERMINISTIC:表示存储过程对同样的输入参数产生相同的结果; NOT DETERM|N|ST|G:表示会产生不确定的结果; 默认为 NOT DETERM|N|ST|C。 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第7页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 7 页 6.1.1 创建存储过程 (1)存储过程特征的格式 Language SQL | [not ] deterministic | { contains SQL | NO SQL | reads SQL data | modifies SQL data } | SQL security { definer | invoker } | comment 'string' 说明: (1)LANGUAGE SQL:表明编写这个存储过程的语言为SQL语言。 (2)DETERMINISTIC: – DETERMINISTIC:表示存储过程对同样的输入参数产生相同的结果; – NOT DETERMINISTIC:表示会产生不确定的结果; – 默认为NOT DETERMINISTIC
·6,11创建存储过程 MySQL 3) CONTAINS SQL:表示存储过程不包含读或写数据的语句 NoS0L:表示存储过程不包含SL语句; READS SQL_DATA:表示存储过程包含读数据的语句,但不包含写数据的语句; MODIFIES SQL DATA:表示存储过程包含写数据的语句 如果这些特征没有明确给定,默认的是 CONTAINS SQL。 (4) SQL SECURITY:用来指明谁有权来执行。 DEFINER:使用创建该存储过程的用户的权限来执行 INVOKER:使用调用者的权限来执行 默认值是 DEFINER。 5) COMMENT' string':注释信息,对存储过程的描述。 M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第8页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 8 页 6.1.1 创建存储过程 (3)CONTAINS SQL:表示存储过程不包含读或写数据的语句。 – NO SQL:表示存储过程不包含SQL语句; – READS SQL DATA:表示存储过程包含读数据的语句,但不包含写数据的语句; – MODIFIES SQL DATA:表示存储过程包含写数据的语句; – 如果这些特征没有明确给定,默认的是CONTAINS SQL。 (4)SQL SECURITY:用来指明谁有权来执行。 – DEFINER:使用创建该存储过程的用户的权限来执行; – INVOKER:使用调用者的权限来执行; – 默认值是DEFINER。 (5)COMMENT 'string':注释信息,对存储过程的描述
·6,11创建存储过程 MySQL (2)存储过程体 存储过程体包含了在过程调用的时候必须执行的语句。 de imiter结束符号 例如 delimiter $s egIn 过程体 leg end结束符号 过程体 end $$ de imiter delimiter M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第9页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 9 页 6.1.1 创建存储过程 (2)存储过程体 存储过程体包含了在过程调用的时候必须执行的语句。 delimiter 结束符号 begin 过程体 end 结束符号 delimiter ; 例如: delimiter $$ begin 过程体 end $$ delimiter ;
·6,11创建存储过程 MySQL 【例61】用存储过程实现删除一个特定学生的信息。 create procedure delete student(in xh char(6)) beg in delete from xs where学号=xh; end 代码的执行过程: del imiter ss create procedure delete student (in xh char(6)) begin delete from xs where学号=xh; end Ss del imiter M/ySQL数据库应用》hto:/ mysqlxg. hactcmeducn 第10页
《MySQL数据库应用》 http://mysql.xg.hactcm.edu.cn/ 第 10 页 6.1.1 创建存储过程 【例6.1】用存储过程实现删除一个特定学生的信息。 create procedure delete_student(in xh char(6)) begin delete from xs where 学号=xh; end; 代码的执行过程: delimiter $$ create procedure delete_student(in xh char(6)) begin delete from xs where 学号=xh; end $$ delimiter ;