zoukankan      html  css  js  c++  java
  • MySQL中的存储过程、函数及简单应用

    1,什么是存储过程、函数

      存储过程和函数是从5.0版本开始支持的,两者在定义上十分类似的,都是事先经过编译和存储在数据库中的SQL语句的集合,就相当于java中的方法。

    2,存储过程、函数的好处

      1,对于开发人员来说,可以极大的简化他们的工作。

      2,将有关数据的处理都放在了数据库端,这样就减少了数据库和应用服务器之间的传输,提高了数据的处理效率。

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

      1,函数必须有返回值,存储过程没有。

      2,存储过程的参数可以是IN,OUT或者INOUT类型,而函数只能是IN类型。

    4,存储过程的小案例

      下面的小案例是在Navicat中实现的。

      写案例之前先准备一个简单的表格:

    CREATE TABLE `users` (
      `u_id` int(4) NOT NULL AUTO_INCREMENT,
      `u_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
      `u_age` int(4) DEFAULT NULL,
      PRIMARY KEY (`u_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

      

      插入以上几条数据。

      在Navicat中新建存储过程的步骤:右击‘函数’->新建函数->过程->选择参数->完成

      1,创建一个无参的

    CREATE DEFINER=`root`@`localhost` PROCEDURE `noParamName_select`()
    BEGIN
        #Routine body goes here...
        select u_name as '用户名' from users where u_id = 1;
    END

      我们只需要写BEGIN和END之间的代码就好了,其他的Navicat会为我们创建好。

    #无参
    call noParamName_select();#调用方式是用call关键字

      2,IN类型参数

    CREATE DEFINER=`root`@`localhost` PROCEDURE `inParamName_select`(IN `user_id` int)
    BEGIN
        #Routine body goes here...
        select u_name as '用户名' from users where u_id = user_id;
    END

      改过程的作用是根据输入的用户id,查询对应的用户名

    #IN参数
    call inParamName_select(2);

      3,OUT类型参数

    CREATE DEFINER=`root`@`localhost` PROCEDURE `outParamName_select`(OUT `user_name` varchar(20))
    BEGIN
        #Routine body goes here...
        select u_name into user_name from users where u_id = 2;
    END

      这里要注意,形参类型把varchar后面一定要加长度,否则就会出现错误

    #OUT参数查id
    call outParamId_select(@a);
    select @a;

      对于OUT类型的参数,在调用函数时也要传参,使用@开头,因为OUT类型的参数的是作为输出,所以最后使用select进行查询。

      4,IN类型参数和OUT类型参数一起用

    CREATE DEFINER=`root`@`localhost` PROCEDURE `inAndOutParamName_select`(IN `user_id` int,OUT `user_name` varchar(20))
    BEGIN
        #Routine body goes here...
        select u_name into user_name from users where u_id = user_id;
    END
    #同时使用IN和OUT参数查询用户名
    call inAndOutParamName_select(1,@n);
    select @n as '用户名';

      5,INOUT参数,既作为输入又作为输出。

    BEGIN
        #Routine body goes here...
        set @number = num; #设置变量
        select @number + 10 into num;
    END
    #INOUT参数
    set @num = 2;
    call inoutParamName_select(@num);
    select @num;
  • 相关阅读:
    零散
    修改element的内部样式的两种方式
    在vue-cli项目中使用第三方的js,不是es6格式
    Docker知识
    golang使用grpc
    vue中axios导出文件
    nginx、vue和thinkphp配置
    Mysql的一些问题
    数据库索引失效原因
    golang中使用grpc服务
  • 原文地址:https://www.cnblogs.com/aixinyiji/p/11028970.html
Copyright © 2011-2022 走看看