MYSQL之存储过程学习和触发器学习

存储过程

首先学习定义

存储过程是一组预编译的SQL语句,可以在数据库中存储并重复使用。存储过程通常包含一系列的SQL语句、控制结构、变量、参数等,用于执行特定的任务或操作。存储过程可以接受参数输入,并返回结果,可以被其他程序或用户调用执行。

为什么使用存储过程

使用存储过程可以让数据库操作更快、更简单、更安全。存储过程就像是一个包裹,里面包含了一些可以重复使用的数据库操作步骤。当我们需要执行一些复杂的数据库操作时,可以直接调用存储过程,而不用每次都重新写一遍相同的代码。这样可以节省时间和精力,同时也可以提高数据库的性能和安全性。

MYSQL中的存储过程

1.使用CREATE PROCEDURE语句创建:
CREATE PROCEDURE 存储过程名字([参数列表])
AS
BEGIN
    -- SQL语句
END;
  • 可以在存储过程中定义参数,以便在调用存储过程时传递参数。参数可以是输入参数、输出参数或者输入输出参数。

  • CREATE PROCEDURE 存储过程名字([in/out/inout 参数名 参数类型])
    AS
    BEGIN
        -- SQL语句
    END;

  • create procedure p4(in score int,out result varchar(10))
    begin
        if score >= 85 then
            set result :='优秀';
        elseif score >= 60 then
            set result := '及格';
        else 
            set result := '不及格';
        end if;
    end;
    
    call p4(18,@result);
    select @result;

    inout类型参数

  • create procedure p5(inout score double)
    begin
        set score := score * 0.5;
    end;
    
    set @score = 78;
    call p5(@score);
    select @score;

例子:

create procedure p1()
begin
    select count(*)from student;
end;

在命令行如何执行时,需要通过关键字delimiter指定SQL语句的结束符,把end;改为end$$

 2.调用:
call 名称([参数]);

例子:

call p1();
3. 查看存储过程:
  • 查询指定数据库的存储过程及状态信息:
select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_SCHEMA = 'xxx';

其中routine_schema = 'XXX',xxx表示数据库名字,用于指定查看那个数据库下的存储过程 

  • 查询某个存储过程的定义
    show create procedure 存储过程名称;
 4.删除
drop procedure [if exists] 存储过程名字;

触发器

1.定义:

触发器是一种特殊的存储过程,它在数据库中的表上自动执行,当特定的事件发生时触发。

触发器是一种数据库对象,它与表相关联,并在表上的特定事件发生时自动执行。触发器通常包含一些SQL语句,用于实现特定的功能或逻辑。

2.使用的原因:

触发器是一种强大的数据库对象,可以在特定事件发生时自动执行一些操作,帮助确保数据的完整性、业务规则的实施和审计跟踪等功能。因此,触发器是数据库开发中常用的工具之一。

3.类型(mysql中只支持行级触发----比如执行一条update语句影响五行,触发五次)
类型new 和 old
insert型触发器new表示将要或者已经新增的数据
update型触发器old表示修改之前的数据,new表示将要或已经修改后的数据
delete型触发器old表示将要或者已经删除的数据
4.创建触发器
create trigger trigger_name
before/after insert/update/delete
on table_name for each row --行级触发器
begin
    触发器逻辑
end;
  • 首先先创建一个表

       

  •  创建
    create trigger tb_user_insert_trigger
        after insert on tb_suer for each row
    begin
        insert into user_logs(id,operation,operate_time,operate_params)values
        (null,'insert',now(),new.id,concat('插入的数据内容为:id=',new.id,',name=',new.name,',phone=',new.phone,',email=',new.email,',profession=',new.profession);
    end;

5.查看触发器
show triggers;

6.删除触发器

drop trigger 触发器名字;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值