iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mysql存储过程、触发器、事件调度器怎么使用
  • 571
分享到

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

2023-06-28 23:06:45 571人浏览 泡泡鱼
摘要

本文小编为大家详细介绍“Mysql存储过程、触发器、事件调度器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“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存储过程、触发器、事件调度器怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网数据库频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: Mysql存储过程、触发器、事件调度器怎么使用

    本文链接: https://www.lsjlt.com/news/321139.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

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

    下载Word文档
    猜你喜欢
    • Mysql存储过程、触发器、事件调度器怎么使用
      本文小编为大家详细介绍“Mysql存储过程、触发器、事件调度器怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql存储过程、触发器、事件调度器怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。存...
      99+
      2023-06-28
    • Mysql存储过程、触发器、事件调度器使用入门指南
      目录一、存储过程的简单使用二、存储过程中的变量三、变量的作用域四、存储过程参数五、逻辑控制语句1、条件语句2、循环语句3、case分支六、游标七、自定义函数八、触发器九、事件存储过程...
      99+
      2024-04-02
    • 怎么理解MySQL存储过程和触发器
      这期内容当中小编将会给大家带来有关怎么理解MySQL存储过程和触发器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。存储过程(stored procedure SP)是My...
      99+
      2024-04-02
    • 在MySQL中如何使用存储过程和触发器
      在MySQL中,可以使用存储过程和触发器来实现一些特定的功能。下面分别介绍如何创建和使用存储过程和触发器: 存储过程: 存储过程...
      99+
      2024-04-09
      MySQL
    • MySQL-SQL存储过程/触发器详解(下)
      ♥️作者:小刘在C站 ♥️个人主页: 小刘主页  ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术 ♥️小刘私信可以随便问,只要会...
      99+
      2023-09-01
      sql mysql 数据库
    • php中怎么调用存储函数和存储过程,它的触发器是什么
      本篇内容介绍了“php中怎么调用存储函数和存储过程,它的触发器是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在php中使用存储函数或存...
      99+
      2023-06-20
    • 【MySQL进阶教程】视图/存储过程/触发器
      前言 本文为 【MySQL进阶教程】视图/存储过程/触发器 相关知识,下边将对视图,存储过程,存储函数,触发器等进行详尽介绍~ 📌博主主页:小新要变强 的主页 👉Ja...
      99+
      2023-09-18
      mysql 数据库 java
    • MySQL 之视图、 触发器、事务、存储
      本文内容: 视图 触发器 事务 存储过程 内置函数 流程控制 索引 ---------------------------------------------------------------------...
      99+
      2023-01-31
      触发器 视图 事务
    • MySQL系列之五 视图、存储函数、存储过程、触发器
      目录系列教程一、视图 1、视图的创建 2、查看视图定义 3、删除视图 二、存储函数 1、系统函数 2、自定义函数(user-defined function:UDF) 三、存储过程 ...
      99+
      2024-04-02
    • 如何在MySQL中使用PHP编写触发器和存储过程
      在MySQL中使用PHP编写触发器和存储过程可以通过以下步骤实现:1. 连接到MySQL数据库:使用PHP的`mysqli`或`PD...
      99+
      2023-10-10
      MySQL
    • mysql存储过程中怎么使用事务
      在 MySQL 存储过程中,可以使用 START TRANSACTION 或者 BEGIN 语句开始一个事务,并使用 COMMIT ...
      99+
      2023-10-24
      mysql
    • mysql转储/恢复存储过程和触发器指的是什么
      这篇文章将为大家详细讲解有关mysql转储/恢复存储过程和触发器指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL5.0首先介绍了存储过程和触发器。因此,...
      99+
      2024-04-02
    • SQL Server中函数、存储过程与触发器怎么用
      这篇文章主要讲解了“SQL Server中函数、存储过程与触发器怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server中函数、存储过程与触发器怎么用”吧...
      99+
      2023-06-29
    • MySQL的存储过程怎么调用
      这篇文章主要讲解了“MySQL的存储过程怎么调用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的存储过程怎么调用”吧!概述由MySQL5.0 版本开始支持存储过程。如果在实现用户的...
      99+
      2023-07-02
    • 怎么在PostgreSQL中创建触发器和存储过程
      在PostgreSQL中创建触发器和存储过程需要使用SQL语句来实现。以下是创建触发器和存储过程的基本步骤: 创建存储过程: C...
      99+
      2024-03-12
      PostgreSQL
    • MySQL中的视图、存储函数、存储过程、触发器分别是什么
      这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一...
      99+
      2023-06-20
    • MySQL触发器使用过程详解
      目录mysql—触发器创建触发器查看触发器删除触发器触发器优缺点MySQL—触发器 ​ 将两个关联的操作步骤写到程序里面,并且要用事务包裹起来,确保两个操作称为一个原子操作,要么全部执行,要么全部...
      99+
      2023-03-01
      MySQL触发器怎么用 MySQL触发器
    • 如何编写和执行MySQL存储过程和触发器
      编写和执行MySQL存储过程和触发器可以通过MySQL客户端或者通过SQL脚本来实现。以下是详细的步骤: 创建存储过程: DEL...
      99+
      2024-03-06
      MySQL
    • Python中怎么调用MySql存储过程
      本篇文章为大家展示了Python中怎么调用MySql存储过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python调用MySql存储过程步骤一.数据库准备建立表view sourcep...
      99+
      2023-06-17
    • mysql存储过程用什么调用
      调用 mysql 存储过程的方法有:call 语句execute 语句预处理语句,分步骤为:a. 准备预处理语句b. 设置参数值c. 执行预处理语句d. 清理预处理语句 MySQL 存...
      99+
      2024-04-22
      mysql
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作