我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mysql存储过程、触发器、事件调度器怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mysql存储过程、触发器、事件调度器怎么使用

本文小编为大家详细介绍“Mysql存储过程、触发器、事件调度器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql存储过程、触发器、事件调度器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    存储过程(Stored Procedure)是一种在数据库中存储复杂程序的数据库对象。为了完成特定功能的SQL语句集,经过编译创建并保存在数据库中。

    一、存储过程的简单使用

    创建存储过程

    create procedure test()begin    select * from users;end;

    调用存储过程

    call test();

    二、存储过程中的变量

    create procedure test()begin  -- 使用 declare语句声明一个变量  declare username varchar(32) default '';    -- 使用set语句给变量赋值  set username='xiaoxiao';    -- 将users表中id=1的名称赋值给变量username  select name into username from users where id=1;    -- 返回变量  select username;end;

    注意:

    • 变量可以通过set来赋值,也可以通过select into的方式赋值;

    • 变量需要返回,可以使用select语句,如:select 变量名。

    三、变量的作用域

    存储过程的作用域在begin和end块之间,变量声明在begin之外,可以作为全局变量使用:

     create procedure test()    begin      declare userscount int default 0; -- 用户表中的数量      begin            select count(*) into userscount from users;            select userscount; -- 返回用户表中的数量      end;      begin         declare maxmoney int default 0; -- 最大金额        select max(money) into maxmoney from orders;        select userscount,maxmoney; -- 返回用户表中的数量、最大金额       end;    end;

    四、存储过程参数

    create procedure 名称([IN|OUT|INOUT] 参数名 参数数据类型 )begin......end

    IN: 传入参数(不指定时,默认就是IN类型)

     create procedure test(userId int)    begin        declare username varchar(32) default '';        select name into username from users where id=userId;        select username;    end;

    OUT:传出参数

    create procedure test(in userId int,out username varchar(32))   begin     select name into username from users where id=userId;   end;

    INOUT: 既是传入又是传出参数

    create procedure test6(inout userId int,inout username varchar(32))begin    set userId=2;    set username='';    select id,name into userId,username from users where id=userId;end;

    五、逻辑控制语句

    1、条件语句

    if() then...elseif() then...else ...end if;
    create procedure test(in userid int)begin   declare my_status int default 0;   select status into my_status from users where id=userid;      if(my_status=1)   then        update users set score=score+10 where id=userid;   elseif(my_status=2)   then        update users set score=score+20 where id=userid;   else        update users set score=score+30 where id=userid;   end if;end;

    2、循环语句

    (1)while

    while(表达式) do    ......  end while;
    create procedure test()begin  declare i int default 0;  while(i<10) do      begin         select i;        set i=i+1;        insert into test1(id) values(i);     end;  end while;end;

    (2)repeat

    repeat...until...end repeat;

    只有当until为真是才跳出循环:

    create procedure test()begin    declare i int default 0;    repeat      begin         select i;        set i=i+1;        insert into test1(id) values(i);     end;    until i>=10 -- 如果i>=10,则跳出循环    end repeat;end;

    3、case分支

    case ...when ... then....when.... then....else ... end case;
     create procedure testcate(userid int)    begin         declare my_status int default 0;        select status into my_status from users where id=userid;         case my_status            when 1 then update users set score=10 where id=userid;            when 2 then update users set score=20 where id=userid;            when 3 then update users set score=30 where id=userid;            else update users set score=40 where id=userid;        end case;    end;

    六、游标

    游标保存了查询结果的临时区域

    declare 变量名 cursor ... -- 创建一个游标变量close 变量名; -- 关闭游标
    create procedure test()    begin        declare stopflag int default 0;        declare username VARCHAR(32);        declare username_cur cursor for select name from users where id%2=0;        -- 游标变量username_cur保存了查询的临时结果,即结果集        -- 在游标变量中数据的结尾,将变量stopflag设置为1,用于循环中判断是否结束        declare continue handler for not found set stopflag=1;         open username_cur; -- 打卡游标        fetch username_cur into username; -- 游标向前走一步,取出一条记录放到变量username中        while(stopflag=0) do -- 如果游标还没有结尾,就继续            begin                 -- 在用户名前门拼接 '_cur' 字符串                update users set name=CONCAT(username,'_cur') where name=username;                fetch username_cur into username;-- 游标向前走一步,取出一条记录放到变量username中            end;        end while; -- 结束循环        close username_cur; -- 关闭游标    end;

    七、自定义函数

    -- 创建函数create function 函数名(参数) returns 返回类型;-- 函数体begin ...... end;-- 指定函数的返回值returns--函数调用select 函数名()。
    create function getusername(userid int) returns varchar(32)    reads sql data  -- 从数据库中读取数据,但不修改数据    begin        declare username varchar(32) default '';        select name into username from users where id=userid;        return username;    end;

    八、触发器

    触发器也是一种数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。

    创建触发器create trigger 触发器名
    after、before:在对表操作之前(before)或者之后(after)触发动作。
    操作事件:insert,update,delete等修改操作
    影响的范围:for each row

    需求:出于审计目的,当有人往表users插入一条记录时,把插入的userid,username,插入动作和操作时间记录下来。

    create trigger tr_users_insert after insert on users    for each row     begin         insert into oplog(userid,username,action,optime)        values(NEW.userid,NEW.name,'insert',now());    end;

    需求:出于审计目的,当删除users表时,记录删除前该记录的主要字段值

    create trigger tr_users_delete before delete on users    for each row     begin         insert into oplog(userid,username,action,optime)        values(OLD.id,OLD.name,'delete',now());    end;

    九、事件

    触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。

    在使用这个功能之前必须确保事件调度器event_scheduler已开启:

    SET GLOBAL event_scheduler = 1;-- 或者SET GLOBAL event_scheduler = on;--查看开启情况show variables like '%event_scheduler%';
    create event[IF NOT EXISTS]event_name -- 创建使用create event    ON SCHEDULE schedule -- on schedule 什么时候来执行    [ON COMPLETION [NOT] PRESERVE] -- 调度计划执行完成后是否还保留    [ENABLE | DISABLE] -- 是否开启事件,默认开启    [COMMENT 'comment'] -- 事件的注释    DO sql_statement; -- 这个调度计划要做什么?

    需求:设计一个福彩的开奖过程,每3分钟开奖一次

    -- 存储过程create procedure test()        begin             insert into lottery(num1,num2,num3,ctime)            select FLOOR(rand()*9)+1,FLOOR(rand()*9)+1,FLOOR(rand()*9)+1,now();        end;
    -- 事件create event if not exists test_event -- 创建一个事件        on schedule every  3 minute -- on schedule 每三分钟执行一次        on completion preserve         do call test;  --调用存储过程

    读到这里,这篇“Mysql存储过程、触发器、事件调度器怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Mysql存储过程、触发器、事件调度器怎么使用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Mysql存储过程、触发器、事件调度器怎么使用

    本文小编为大家详细介绍“Mysql存储过程、触发器、事件调度器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql存储过程、触发器、事件调度器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。存
    2023-06-28

    在MySQL中如何使用存储过程和触发器

    在MySQL中,可以使用存储过程和触发器来实现一些特定的功能。下面分别介绍如何创建和使用存储过程和触发器:存储过程:存储过程是一组为了完成特定任务的SQL语句集合,可以被存储在数据库中并在需要时调用执行。使用存储过程可以简化复杂的操作和提高
    在MySQL中如何使用存储过程和触发器
    2024-04-09

    php中怎么调用存储函数和存储过程,它的触发器是什么

    本篇内容介绍了“php中怎么调用存储函数和存储过程,它的触发器是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在php中使用存储函数或存
    2023-06-20

    如何在MySQL中使用PHP编写触发器和存储过程

    在MySQL中使用PHP编写触发器和存储过程可以通过以下步骤实现:1. 连接到MySQL数据库:使用PHP的`mysqli`或`PDO`扩展来连接到MySQL数据库。例如:```php$conn = new mysqli($serverna
    2023-10-10

    如何在MySQL中使用PHP编写触发器和存储过程

    使用PHP在MySQL中编写触发器和存储过程,可提升数据库性能和灵活性。触发器在指定事件发生时自动执行,存储过程则用于执行复杂操作。使用PDO或MySQLi扩展可从PHP脚本中调用触发器和存储过程,实现数据验证、计算等功能。最佳实践包括仅在必要时使用、记录用途、定期审核,以确保效率和安全性。
    如何在MySQL中使用PHP编写触发器和存储过程
    2024-04-12

    SQL Server中函数、存储过程与触发器怎么用

    这篇文章主要讲解了“SQL Server中函数、存储过程与触发器怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server中函数、存储过程与触发器怎么用”吧!一、函数函数分为(
    2023-06-29

    mysql存储过程中怎么使用事务

    在 MySQL 存储过程中,可以使用 START TRANSACTION 或者 BEGIN 语句开始一个事务,并使用 COMMIT 语句提交事务,或者使用 ROLLBACK 语句回滚事务。下面是一个示例,演示如何在 MySQL 存储过程中
    2023-10-24

    【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数

    【目录】(其余均为了解知识)一 视图二 触发器三 事务(掌握)四 存储过程五 函数六 流程控制七、索引理论 一、视图1、什么是视图视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,
    【2020Python修炼记】MySQL之 视图、触发器、事务、存储过程、函数
    2018-03-18

    怎么在PostgreSQL中创建触发器和存储过程

    在PostgreSQL中创建触发器和存储过程需要使用SQL语句来实现。以下是创建触发器和存储过程的基本步骤:创建存储过程:CREATE OR REPLACE FUNCTION my_function()RETURNS VOID AS $$
    怎么在PostgreSQL中创建触发器和存储过程
    2024-03-12

    MySQL中的视图、存储函数、存储过程、触发器分别是什么

    这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一
    2023-06-20

    如何在MySQL中使用C#编写自定义触发器和存储过程

    要在MySQL中使用C#编写自定义触发器和存储过程,可以使用MySQL Connector/NET来连接MySQL数据库,并使用C#代码来编写触发器和存储过程。下面是使用C#编写自定义触发器和存储过程的一般步骤:1. 安装MySQL Con
    2023-10-20

    如何在MySQL中使用Python编写自定义触发器和存储过程

    如何在MySQL中使用Python编写自定义触发器和存储过程MySQL是一个流行的关系型数据库管理系统,而Python是一种简单易用的编程语言。结合二者,可以在MySQL中使用Python编写自定义触发器和存储过程来实现更高级的数据库操作。
    2023-10-22

    如何在MySQL中使用JavaScript编写自定义触发器和存储过程

    使用JavaScript编写MySQL自定义触发器和存储过程使用JavaScript编写MySQL自定义触发器可自动执行业务逻辑,而存储过程可提高复杂任务的性能和安全性。创建触发器时,编写JavaScript函数并使用CREATETRIGGER语法创建触发器。创建存储过程时,编写JavaScript函数并使用CREATEPROCEDURE语法创建存储过程。JavaScript代码可包含条件语句、循环、数组和对象操作,以及数据库操作。代码示例、触发器和存储过程的使用说明以及优点都包含在正文中。
    如何在MySQL中使用JavaScript编写自定义触发器和存储过程
    2024-04-11

    如何在MySQL中使用JavaScript编写自定义触发器和存储过程

    在MySQL中,可以使用JavaScript编写自定义触发器和存储过程,具体方法如下:1. 在MySQL中,JavaScript不是默认的编程语言,需要启用JavaScript扩展。可以通过以下命令启用JavaScript扩展:```mys
    2023-10-10

    如何在MySQL中使用PHP编写自定义触发器和存储过程

    如何在MySQL中使用PHP编写自定义触发器和存储过程引言:在开发应用程序时,我们经常需要在数据库层面进行一些操作,如插入、更新或删除数据。MySQL 是一个广泛使用的关系型数据库管理系统,而PHP是一种流行的服务器端脚本语言。本文将介绍如
    2023-10-22

    编程热搜

    目录