Skip to Content
《MySQL 烹饪书》第 4 版
book

《MySQL 烹饪书》第 4 版

by Sveta Smirnova, Alkin Tezuysal
May 2025
Beginner to intermediate
974 pages
14h 39m
Chinese
O'Reilly Media, Inc.
Content preview from 《MySQL 烹饪书》第 4 版

第 11 章 使用存储例程、触发器和计划事件 使用存储例程、触发器和计划事件

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

11.0 引言

在本书中,术语 "存储程序"是指存储例程、触发器和事件的统称,而 "存储例程"是指存储函数和存储过程的统称。

本章讨论的是存储程序,有多种类型:

存储函数和程序

存储函数或存储过程对象封装了用于执行操作的代码 ,使您可以通过名称轻松调用对象,而不必在每次需要时重复所有代码。存储函数执行计算并返回一个值,该值可以在表达式中使用,就像内置函数(如RAND()NOW()LEFT() )一样。存储过程执行不需要返回值的操作。存储过程通过CALL 语句调用,而不是在表达式中使用。存储过程可能会更新表中的行,或者产生一个结果集发送给客户端程序。

触发器

触发器是当表被INSERTUPDATEDELETE 语句修改时激活的对象。例如,可以在值插入表之前对其进行检查,或者指定从表中删除的任何行都应记录到另一个表中,作为数据更改日志。触发器可以自动执行这些操作。

预定活动

事件是在预定的 时间或时间执行 SQL 语句的对象。将预定事件想象成在 MySQL 中运行的 Unixcron 作业。例如,事件可以帮助你执行管理任务,如定期删除旧表行或创建夜间摘要。

存储程序是用户定义的数据库对象,但存储在 服务器端,供以后执行。这与从客户端向服务器发送 SQL 语句以便立即执行不同。每个对象也都有其属性,在该属性中定义了调用该对象时要执行的其他 SQL 语句。对象主体是一条 SQL 语句,但该语句可以使用包含多条语句的复合语句语法(一个BEGIN...END 块)。因此,主体的范围可以从非常简单到极其复杂。下面的存储过程是一个琐碎的例程,除了显示当前的 MySQL 版本外什么也不做,使用的主体由单条SELECT 语句组成:

CREATE PROCEDURE show_version()
SELECT VERSION() AS 'MySQL Version';

更复杂的操作使用BEGIN...END 复合语句:

CREATE PROCEDURE show_part_of_day()
BEGIN
  DECLARE cur_time, day_part TEXT;
  SET cur_time = CURTIME();
  IF cur_time < '12:00:00' THEN
    SET day_part = 'morning';
  ELSEIF cur_time = '12:00:00' THEN
    SET day_part = 'noon';
  ELSE
    SET day_part = 'afternoon or night';
  END IF;
  SELECT cur_time, day_part;
END;

在这里,BEGIN...END 块包含多条语句,但其本身被视为构成一条语句。通过复合语句,您可以声明局部变量,使用条件逻辑和循环结构。与在非复合语句(如SELECTUPDATE )中编写内联表达式相比,这些功能为算法表达提供了更大的灵活性。

复合语句中的每条语句必须以 ; 字符结束。如果使用mysql 客户端定义使用复合语句的对象,这一要求就会造成问题,因为mysql 本身是通过解释; 来确定语句边界的。解决办法是在定义复合语句对象时重新定义mysql的语句分隔符。语法 11.1介绍了如何做到这一点;在继续后面的语法之前,请务必阅读该语法。

本章通过示例说明了存储例程、触发器和事件,但由于篇幅有限,不再详细介绍它们的大量语法。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

SQL 口袋指南,第 4 版

SQL 口袋指南,第 4 版

Alice Zhao
《Java 思维》,第二版

《Java 思维》,第二版

Allen B. Downey, Chris Mayfield

Publisher Resources

ISBN: 9798341659452