大二学数据库原理的时候学过,不过有些忘记了,整理一下。
存储过程:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
菜鸟教程写的很详细:https://www.runoob.com/w3cnote/mysql-stored-procedure.html
存储过程参数有三个参数:IN OUT INOUT(使用方法:https://www.yiibai.com/mysql/stored-procedures-parameters.html)
IN OUT示例:
USE `yiibaidb`;
DROP procedure IF EXISTS `CountOrderByStatus`;
DELIMITER $$
CREATE PROCEDURE CountOrderByStatus(
IN orderStatus VARCHAR(25),
OUT total INT)
BEGIN
SELECT count(orderNumber)
INTO total
FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ;
要获取发货订单的数量,我们调用CountOrderByStatus
存储过程,并将订单状态传递为已发货,并传递参数(@total
)以获取返回值。
CALL CountOrderByStatus('Shipped',@total);
SELECT @total;
存储函数:存储函数和存储过程很相像,但是它的执行结果会返回一个值。最重要的是存储函数可以被用来充当标准的 SQL 语句,允许程序员有效的扩展 SQL 语言的能力。
delimiter //
create function fun1(id int) returns int
begin
return (select sal from emp where empno=id);
end //
delimiter ;
select fun1(7698)
触发器: 触发器是用来响应激活或者触发数据库行为事件的存储程序。通常,触发器用来作为数据库操作语言的响应而被调用,触发器可以被用来作为数据校验和自动反向格式化。
提示:delimiter // --将结束符指定为“//”
示例:创建了一个含有update操作的存储过程
delimiter //
create procedure update_emp(in i int, in p int)
begin
update employee set phone = p where id = i;
end //
创建一个触发器
delimiter //
# 创建触发器,触发器名称为t1
create trigger t1
# 触发器执行在update操作之后
after update
# 监视employee表
on employee
for each row
begin
# 触发执行的SQL语句
update tb_class set num = num + 1 where id = 1;
end //
执行存储过程,触发触发器
call update_emp(2, 110);
查看已有触发器: show triggers
删除已有触发器: drop trigger 触发器名称
Comments | NOTHING