MySQL必知必会 | 存储过程、游标、触发器
创始人
2024-05-31 13:27:06
0

使用存储过程

存储过程
简单来说就是为了以后的使用而保存的一条或多条MySQL语句的集合。
我觉得就是封装了一组sql语句

为什么需要存储过程(简单来说就是,简单、安全、高性能

  • 通过把处理封装在容易使用的单元中,简化复杂操作
  • 所有开发人员和应用程序都是用同一存储过i成,则使用的sql语句都是一样的,保证了数据的完整性(防止数据库中存在不正确的数据
  • 简化对变动的管理,保证了数据库的安全性(防止数据库中存在不正确的数据
  • 提高了性能
  • 增加了代码功能的灵活性

执行存储过程

CALL procedure_name(参数);

创建存储过程

CREATE POCEDURE procedure_name()
BEGINSQL语句
END

MYSQL命令行客户机的分隔符
默认的MYSQL语句分割符为 ;
如果希望自定义分隔符,可以使用 DELIMITER关键字

DELIMITER //
CREATE PROCEDURE procedure_name
BEGINSQL 语句
END //DELIMITER ;

存储过程实际上是一种函数,所以存储过程名后边需要有 ()

删除存储过程

存储过程在创建之后,被保存在服务器上以供使用,直到被删除

DROP PROCEDURE procedure_name;

注意,只需要给出存储过程名,不需要加 ()

使用参数

变量
内存中的一个特定的位置,用来临时存储数据

参数的数据类型
存储过程的参数允许的数据类型与表中使用的数据类型相同

变量名
MYSQL中所有变量都必须以@开始

游标

为什么需要游标
MySQL检索操作,返回一组成为结果集的行,有时,需要在检索出来的行中前进或者后退几行,这就需要游标

游标的定义
游标是一个存储在MySQL服务器上的数据库查询,它是被语句查询出来的结果集
在存储了游标以后,应用程序可以根据需要滚动或浏览器中的数据
游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改

使用游标

  • 使用游标前,需要声明游标,这个过程实际上没有检索数据,只是定义要使用的select语句
  • 声明游标以后,需要将它打开来使用,这个过程会使用上一步定义的select语句把数据实际检索出来
  • 对于填有数据的游标,根据需要取出各行
  • 在结束游标使用时,必须关闭游标

创建游标

CREATE PROCEDURE procedure_name
BEGINDECLARE vernier_name CURSORFORSELECT语句
END

打开和关闭游标

OPEN vernier_nameCLOSE vernier_name

在一个游标关闭后,如果没有重新打开,则不能使用他
但是,声明过的游标,关闭后不需要再次声明

隐含关闭,如果你不明确关闭游标,MySQL会在 END语句使,自动关闭游标

使用游标数据

当一个游标被打开后,可以使用FETCH来访问他的每一行
FETCH指定检索什么数据,检索出来的数据存储在什么地方,还可以向前移动游标中的内部行指针,使下一条FETCH语句检索下一行

DECLARE vernier_name CURSOR
FOR
SELECT语句OPEN vernier_nameDECLARE O INT
REPEATFETCH vernier_name INTO O
UNTIL condition END REPEATCLOSE vernier_name

DECLARE 语句的次序
局部变量 > 游标 > 句柄

触发器

为什么需要触发器
有时需要,某个表发生改动时,自动处理,这种情况下,就需要触发器

MySQL中可以触发触发器的语句
DELETE\INSERT\UPDATE

创建触发器

触发器需要在每个表中唯一命名,但不需要在每个数据库中唯一,即数据库中的两个表可具有相同名字的触发器

CREATE TRIGGER trigger_name AFTER/BEFORE operation ON table_name
FOR EACH ROW 

只有表才支持触发器,视图不支持
触发器按每个表每个事件每次定义,每个表每个事件每次只允许一个触发器
每个表最多支持6个触发器(3种操作 * ( before || after ) = 6
单一触发器不能与多个事件或多个表关联

删除触发器

触发器的类型

  • INSERT
    • INSERT触发器代码内,可以引用一个名为NEW的虚拟表,访问被插入的行,
    • before insert 触发器中, new的值也可以被更新,
    • 对于auto_increment列,newinsert执行前包含0,在INSERT执行后包含新的自动生成值
  • DELET
    • DELET触发器代码内,可以引用一个名为OLD的虚拟表,访问被删除的行
    • OLD中的值全部都是只读的,不能更新
  • UPDATE
    • UPDATE触发器代码中,可以引用OLD虚拟表访问UPDATE前的值,引用NEW虚拟表,访问新更新的值
    • BEFORE UPDATE触发器中,NEW中的值可能也被更新
    • OLD中的值全部都是只读的,不能更新

触发器的使用要点

  • 创建触发器可能需要特殊的安全访问权限
  • 应该用触发器来保重数据的一致性
  • 触发器的一种非常有意义的使用是创建审计和跟踪
  • 触发器中不能调用存储过程

管理事务处理

COMMIT&ROLLBACK

事务管理

并非所有的引擎都支持事务处理,MyISAM不支持事务处理,InnoDB支持事务处理

事务处理
用于维护数据库的完整性,保证成批的MySQL操作要么完全执行,要么完全不执行

事务:指一组SQL语句
回退:被撤销指定SQL语句的过程
提交:将未存储的SQL语句结果写入数据库
保留点:事务处理中设置的临时占位符,可以对他发布回退

控制事务处理

管理事务处理的关键在于,将SQL语句组分解为逻辑块,并明确规定数据和是应该回退,何时不应该回退

SELECT * FROM table_name;
START TRANSACTION;
DELETE FROM table_name;
SELECT * FROM table_name;
ROLLBACK;
SELECT * FROM order_name;

使用COMMIT

隐含提交:一般的MySQL语句都是直接针对数据库表执行和编写的,即提交操作是自动进行的
隐含事务关闭:当COOMITROLLBACK语句执行后,是误会自动关闭

使用保留点

为了支持回退部分事务处理,可以在事务处理块中的合适位置防止占位符,如果需要回退,可以回退到某个占位符

保留点越多越好:可以在MySQL代码中设置任意多的保留点,保留点越多,你就越能按自己的意愿灵活的进行回退

释放保留点:保留点在事务处理完成后自动释放,也可以使用RELEASE SAVEPOINT明确的释放保留点

更改默认的提交行为

SET autocommit=0;

autocommit标志决定是否自动提交更改,不管有没有COMMIT语句
autocommit针对每个连接,而不是服务器

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...