zoukankan      html  css  js  c++  java
  • MySQL基础_存储过程与函数

    1. 存储过程

    含义:一组经过预先编译的sql语句的集合,存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
    好处:

    • 存储过程在创建的时候直接编译,而sql语句每次使用都要编译,提高执行效率
    • 提高了sql语句的重用性
    • 减少网络之间的数据传输,节省开销
    /*
    ✳1.创建存储过程
    语法:
    	delimiter 新的结束标记
    	create procedure 存储过程名(in|out|inout 参数名  参数类型,...)
    	begin
    		存储过程体;
    	end 新的结束标记	
    注意:
    	①in、out、inout都可以在一个存储过程中带多个,且in可以省略
    	②由于MySQL默认以";"为分隔符,如果我们没有声明新的分隔符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过
    	 程会报错,所以要事先用delimiter关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用
    	 完了通过delimiter ;语句将分隔符还原。
    	③参数前面的符号的意思
    		in:该参数只能作为输入 (该参数不能做返回值)
    		out:该参数只能作为输出(该参数只能做返回值)
    		inout:既能做输入又能做输出
    	④存储过程体的每一条sql语句都需要用分号结尾!!!!!!!!!!!!
    	⑤带out/inout的参数由于会返回某个结果值,所以在调用时,需要将参数列表设置为一个变量,那么返回结果就会赋值给该变量,我们	 通过使用该变量,即能使用返回的结果。
    	
    ✳2.调用存储过程
    语法:
    	call 存储过程名(实参列表)
    举例:
    	调用in模式的参数:
    		call 存储过程名(‘值’);
    	调用out/inout模式的参数:
    		set @变量名;
            call 存储过程名(@变量名);
            select @变量名;
            
    ✳3.删除存储过程
    	drop procedure 存储过程名;
    */
    #示例:创建一个名为name_to_score的存储过程,调用该存储过程时,输入学生姓名name,返回分数score,比如输入张三,返回90。
    	delimiter //
    	create procedure name_to_score(in NAME varchar(20),OUT score int)
    	begin
    		select s.score into score
    		from students s
    		where s.name=name;
    	end //
    	call name_to_score('张三',@score);
    	select @score //
    

    2. 函数

    含义和好处与存储过程类似。

    /*
    ✳1.创建函数
    语法:
    	CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
    	BEGIN
    		函数体
    	END
    注意:
    	①函数体中肯定需要有return语句;
    	②由于MySQL默认以";"为分隔符,如果我们没有声明新的分隔符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过	  
             程会报错,所以要事先用delimiter关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用
    	 完了可以通过delimiter ;语句将分隔符还原。
    
    ✳2.调用函数
    	SELECT 函数名(参数列表)
    	
    ✳3.删除函数
    	drop function 函数名;
    */
    #示例:创建一个名为name_to_score的函数,函数功能是:输入学生姓名name,返回分数score,比如输入张三,返回90。
    	delimiter //
    	create function name_to_score(name varchar(20)) returns int
    	begin
    		declare ss int default 0;
    		select s.score into ss
    		from students s
    		where s.name=name;
    		return ss;
    	end //
    	select name_to_score('张三') //
    

    3. 函数和存储过程的区别

    关键字 调用语法 返回值 是否有return语句
    函数 function select 函数(参数列表); 通过return,有且只能有一个
    存储过程 procedure call 存储过程(参数列表); 通过out/inout,可以为零个、一个或多个
  • 相关阅读:
    Json解析
    Nopcommerce 使用Task时dbcontext关闭问题
    Webview离线功能(优先cache缓存+cache缓存管理)
    Android按钮单击事件的四种常用写法
    xUtils 源码解析
    返回键的复写onBackPressed()介绍
    GBK、GB2312和UTF-8编码区分
    Android 动画之RotateAnimation应用详解
    Android getWidth和getMeasuredWidth的区别
    WebView三个方法区别(解决乱码问题)
  • 原文地址:https://www.cnblogs.com/tianyi-comeon/p/13280675.html
Copyright © 2011-2022 走看看