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针对每个连接,而不是服务器

相关内容

热门资讯

买菜小学作文【优质6篇】 买菜小学作文 篇一我喜欢去菜市场买菜我家离菜市场很近,所以每次我都会去买菜。我喜欢去菜市场买菜的原因...
逛书店的作文(最新3篇) 逛书店的作文 篇一逛书店的作文近年来,随着电子书的兴起,逛书店的人似乎越来越少了。然而,对我来说,逛...
心儿怦怦跳小学作文(最新6篇... 心儿怦怦跳小学作文 篇一心儿怦怦跳我是一颗小小的心儿,每天都在孩子们的胸腔中怦怦跳动。当孩子们快乐时...
大力士小学作文(优选6篇) 大力士小学作文 篇一我的偶像我有一个偶像,他就是大力士先生。大力士先生是我们学校的保安,他不仅身手敏...
我的伙伴小学作文【精彩6篇】 我的伙伴小学作文 篇一 我的伙伴小学作文 篇二我的伙伴小学作文 篇三   一天,我在院子里玩耍,无意...
春节联欢晚会小学作文(通用6... 春节联欢晚会小学作文 篇一喜迎新春,迎接春节联欢晚会今年的春节联欢晚会真是精彩纷呈!我和家人一起坐在...
同一个屋檐下作文600字【精... 同一个屋檐下作文600字 篇一家是一个温暖的港湾,是每个人一生中最重要的地方。在同一个屋檐下生活,意...
养兔真让我着迷小学作文(实用... 养兔真让我着迷小学作文 篇一 我家养了一只可爱的小兔子,从那时起,我就对养兔子产生了浓厚的兴趣...
春天作文【通用6篇】 春天作文 篇一春天的美丽春天是四季中最美丽的季节之一。当冬天的寒冷逐渐消退,春天的阳光温暖地洒在大地...
牛奶的自述小学作文(精彩3篇... 牛奶的自述小学作文 篇一我是一杯牛奶,来自一头温柔的奶牛妈妈。在牧场上,我见证了奶牛妈妈们辛勤的劳动...
言而有信小学作文(推荐5篇) 言而有信小学作文 篇一:诚信的重要性诚信是一种美德,是一个人最基本的道德品质之一。作为小学生,我们更...
我喜欢的小动物作文【实用6篇... 我喜欢的小动物作文 篇一我喜欢的小动物是松鼠。每次看到它们在树上迅速爬行,我总会被它们的灵活和机敏所...
杭州游之虎跑公园小学作文【经... 杭州游之虎跑公园小学作文 篇一我最喜欢的杭州景点之一就是虎跑公园。这个公园坐落在风景如画的西湖边,是...
“日”字变形记小学作文【推荐... “日”字变形记小学作文 篇一太阳的日子我喜欢太阳,因为它给了我们光明和温暖。太阳每天都会升起,照亮大...
小小的欲望作文350字(最新... 篇一:小小的欲望小小的欲望作文350字 篇一小小的欲望,是我们内心深处微不可见的火花,它时而燃烧得熊...
奇思妙想的作文400字(精选... 奇思妙想的作文400字 篇一标题:梦幻的花园我有一个奇妙的梦想,梦见自己拥有了一个令人惊叹的花园。这...
成长的烦恼四年级作文【优秀5... 成长的烦恼四年级作文 篇一成长的烦恼我是一名四年级的学生,正在经历着成长的烦恼。在成长的道路上,我遇...
爱人的作文【最新3篇】 爱人的作文 篇一爱人的作文我有一个特别重要的人,那就是我的爱人。他是我生命中最亲密的伴侣,也是我最深...
中秋之夜的小学作文500字 中秋之夜的小学作文500字  中秋节已悄悄的离我们近了,近了,此时我的心情又怎能不振奋呢?面临三天的...
有你真好的作文(最新6篇) 有你真好的作文 篇一爱与陪伴人生中,有太多的瞬间让我感受到了你的好。你是我最亲近的人,也是我最信任的...