存储过程
首先学习定义:
存储过程是一组预编译的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 触发器名字;