mysql存储程序,存储函数

存储引擎

​ Mysql的核心就是存储引擎,DBMS(数据库管理系统)借助于引擎实现增删改查操作。可以根据不同的功能来设置不同的存储引擎。

​ InnoDB是事务型数据库的首选,执行安全性数据库,行锁定和外键。mysql5.5之后默认使用。

​ MyISAM插入速度和查询效率较高,但不支持事务。

​ MEMORY将表中的数据存储在内存中,速度较快。

事务

一系列的DML操作,要么同时成功,要么同时失败。

事务的ACID特性

​ 1.原子性Atomicity:一组DML操作,要么同时成功,要么同时失败

​ 2.一致性Consistency:

​ 数据一致性:事务执行前后整体状态不变

​ 约束:事务执行前后约束信息不变

​ 3.隔离性(独立性)Isolation:并发事务相互隔离

​ 4.持久性Durability:事务提交之后数据将持久化到数据库

事务的实现 tcl(事务控制语言) commit rollback

mysql数据库默认自动提交:

​ set autocommit =0;不自动提交

​ set autocommit =1;自动提交

mysql手动开启事务

​ start transaction/begin;

mysql手动提交或者回滚

​ commit;

​ rollback;

​ savepoint;保存点,相当于一个恢复点,恢复必须在事务提交之前,事务一旦提交,所有的保存点全部失效。

存储程序

​ 概念:存储程序指的一组存储和执行在数据库服务器端的程序。

​ 优点:效率高,简化开发

​ 缺点:占用服务器端资源,数据迁移时也要把这些存储过程迁移过去

分类

​ 1.存储过程-------有输入输出参数,可以执行一组sql指令

​ 2.存储函数-------有一个返回值,可以对sql进行有效扩展

​ 3.触发器----------事件响应,比如执行insert语句后执行另一个动作

存储过程

1.基本语法
create procedure sel_emp(参数列表)     
	begin     
	--操作  
end;    
2.无参存储过程
create procedure sel_emp()     
begin      
select * from emp where deptno=10;    
end; 
--存储过程的调用 
call sel_emp();  

3.有参存储过程

--IN模式传参,默认输入模式 
--根据部门编号查询员工信息 
delimiter //               -- 定义结束标识 
create procedure sel_emp2(dno int) 
begin     
	select * from emp where deptno=dno; 
	end //; 
--调用存储过程 
call sel_emp2(30);  

--OUT参数输出模式 
--根据员工编号查询员工名称 
delimiter //               -- 定义结束标识 
create procedure sel_emp3(eno int,OUT name varchar(20)) 
begin     
select ename into name from emp where empno=eno;   
end //; 
--调用 
call sel_emp3(7788,@name); 
select @name;  

--INOUT模式传参 
--根据员工编号查询所在部门编号 
delimiter //          --定义结束标识 
create procedure sel_emp4(INOUT eno int) 
begin    
select deptno into eno from emp where empno = eno; 
end //;
--调用 
set @eno = 7788; 
---- 
call sel_emp4(@eno);
--查看 
select @eno;   

4.流程控制语句

delimiter // 
create procedure cal_core(score int) begin 
--声明变量     
declare levels varchar(20);  --内部定义变量 
--分支     
	if score>80 then         
		set levels='优秀'; --变量赋值     
	elseif   score >= 80 then         
		set levels='良好';     
	else          
		set levels='不通过';     
	end if; 
	--输出     
	select levels; 
end //;    

存储函数

--根据员工编号查询名称 
delimiter //; 
create function sel_name(eno int)
returns varchar(20)  -- 返回值类型 
deterministic -- 确定的 
begin  	
	declare v_name varchar(20) -- 定义变量 	
	select ename into v_name from mktest.emp where empno=eno; 	
	return v_name;  -- 返回该变量 
end //;   
	select sel_name(7788);  
	
--函数有返回值  return 
存储过程可以单独使用;但是函数只能作为语句的一部分。 

存储过程于存储函数的区别:

​ 1.关键字不同

​ 2.过程:三者模式显示输入和输出,函数:返回值实现输出

​ 3.过程独立使用,函数:作为语句的一部分

你可能感兴趣的:(MySQL)