mysql存储程序,存储函数

    xiaoxiao2022-07-04  156

    存储引擎

    ​ 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.过程独立使用,函数:作为语句的一部分

    最新回复(0)