精华内容
下载资源
问答
  • MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...
  • 主要介绍了mysql创建存储过程实现往数据表中新增字段的方法,结合实例形式对比分析了通过存储过程新增字段相关操作技巧,需要的朋友可以参考下
  • MySQL创建存储过程

    万次阅读 多人点赞 2019-03-27 17:08:44
    Navicat for MySQL创建存储过程及MyBatis调用存储过程 问题描述 一条语句实现向两个表中添加数据 前段时间遇到需求,向一个表中添加数据,获取新增主键值。再向另一个表添加数据,其中一个字段为前一个表的主键值。...

    Navicat for MySQL创建存储过程及MyBatis调用存储过程


    问题描述

    一条语句实现向两个表中添加数据

    前段时间遇到需求,向一个表中添加数据,获取新增主键值。再向另一个表添加数据,其中一个字段为前一个表的主键值。并返回第二次添加的表的自增主键值。上网查到的一个方法为使用存储过程,便按照这个思路试着实现一下,现将过程回忆记录下来。

    项目环境

    SSM框架项目+Navicat管理MySQL数据库

    解决问题

    一、Navicat for MySQL创建存储过程

    1.新建函数→选择“过程”
    在这里插入图片描述
    2.添加参数

    模式:
    IN:输入参数
    OUT:输出参数
    INOUT:既作为输入参数,也作为输出参数

    在这里插入图片描述
    3.写存储过程里面要执行的内容

    CREATE DEFINER=`root`@`%` PROCEDURE `InsertNewConsultation`(IN `user_id` int,IN `doc_id` int,IN `now_time` datetime,IN `disease_id` int,IN `patient_id` int,IN `patient_speak_text` text,OUT `patient_speak_id` int)
    BEGIN
    --声明变量
    DECLARE consultation_id INT;
    	insert into 
    	consultation_basic
    		(user_id,last_reply_text,last_reply_time,consultation_status,doctor_unread_number,disease_id,patient_unread_number,patient_id,doc_id)
    	values
    		(user_id,patient_speak_text,now_time,1,1,disease_id,0,patient_id,doc_id);
    	
    	SET consultation_id = @@identity;
    	
    	insert into 
    	patient_speak
    		(patient_speak_text,patient_user_id,patient_speak_time,isread,consultation_id)
    	values
    		(patient_speak_text,user_id,now_time,0,consultation_id);
    	
    	SET patient_speak_id = @@identity;
    
    END
    

    4.保存即可

    二、MyBatis调用存储过程

    <select id="insertConsultationBasic"  parameterType="com.xxx.platform.entity.NewConsultationCustom" 
     	resultType="com.xxx.platform.entity.NewConsultationCustom" statementType="CALLABLE">
    	{
    		CALL InsertNewConsultation(
    			#{user_id,jdbcType=INTEGER,mode=IN},
    			#{doc_id,jdbcType=INTEGER,mode=IN},
    			#{last_reply_time,jdbcType=TIMESTAMP,mode=IN},
    			#{disease_type_id,jdbcType=INTEGER,mode=IN},
    			#{patient_id,jdbcType=INTEGER,mode=IN},
    			#{patient_speak_text,jdbcType=VARCHAR,mode=IN},
    			#{patient_speak_id,jdbcType=INTEGER,mode=OUT}
    		)
    	}
    </select>
    

    注:调用存储过程时,注意参数顺序不能错。

    展开全文
  • mysql 创建存储过程

    千次阅读 2021-01-19 07:27:58
    1. 首先呢,我这里给出存储过程的定义,到底什么是存储过程。存储过程是指,在大型数据库系统中,为了提高...2. 接下来怎么创建存储过程呢?这里有一张表 grade,里面有几行数据。创建存储过程语法create procedure...

    1. 首先呢,我这里给出存储过程的定义,到底什么是存储过程。

    存储过程是指,在大型数据库系统中,为了提高数据库操作的效率和SQL代码的封装,完成特定功能的SQL语句集,

    存储在数据库中,经过第一次编译后,再次调用不需要再次编译,用户只需指定存储过程名字并给定参数就可以执行完成任务。

    2. 接下来怎么创建存储过程呢?

    a01474e68ab260d8f4eb2ffeb551501f.png

    这里有一张表 grade,里面有几行数据。创建存储过程语法

    create procedure 存储过程名(参数) //这里参数有三种,in 要输入的参数,out 输出的参数 ,inout 输入输出的参数

    begin

    sql语句集   //因为sql语句集中需要使用  ;分号结尾,那么我把整个存储过程结尾符号改成#

    end

    使用 dilimiter $在当前窗口就改好了

    例如我创建下面的不带参数的存储过程

    delimiter #

    create procedure show_grade()

    begin

    select * from grade;

    select * from grade order by score desc;

    end$

    delimiter ;

    357ac3637bed99521701037e2d7bcb26.png

    3.创建带参数的存储过程格式,传入学生的id,返回学生的分数

    create procedure show_grade_by_sid(in id int,out score out)   //前面的in可以省略,省略默认是in类型

    begin

    end#

    13763b7acd370adac1ebcdcc9c3d2009.png

    4.用同一个变量名作为inout参数,如下:

    50356b6004a929664aadc9b77cd92b96.png

    意思就是存储过程的创建啦。

    要删除存储过程用 drop命令

    drop procedure pro_inout_test

    e74d3e1b3c1ffc0f81f4498331b7b61d.png

    展开全文
  • 1 用mysql客户端登入 2 选择数据库 mysql>use test 3 查询当前数据库有哪些存储过程 mysql>show procedure status where Db=’test’ 4 创建一个简单的存储过程 mysql>create procedure hi() select ‘hello’;...
  • mysql创建存储过程

    千次阅读 2017-09-08 11:08:01
    今天是2017年9月8日,距离国庆...好了不谈这些无用的东西了,我们来一起看看存储过程存储过程是一些sql语句的集合,比如有的时候我们可能需要一大串的sql语句,或者说在编写SQL语句的过程中还需要设置一些变量的

    今天是2017年9月8日,距离国庆还有1,2,3,4,...还有还些天呢,进入工作之后有的时候感觉对学习有了一个全新的认识,以前认为学习就是记住,现在才知道学习其实仅仅是知道就可以,知道有这一块就行了,大概会用就可以了。好了不谈这些无用的东西了,我们来一起看看存储过程。

    存储过程是一些sql语句的集合,比如有的时候我们可能需要一大串的sql语句,或者说在编写SQL语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。

    那么如何创建一个存储过程:

    drop procedure if EXISTS pr_sub;
    create PROCEDURE pr_sub(
      x int,
      y int
    )
    begin
     declare s int; 
    if x is null THEN
        set x=10;
    end if;
    if y is null THEN
       set y=20;
    end if;
      set s=y-x;
      SELECT s as subofyx;
    END
    set @a=10;
    set @b=20;
    call pr_sub(@b,@a);
    上面是一个存储过程活生生的例子,虽然说有点简单,但是也不妨碍我们对存储过程语法的研究。

    create procedure procedure_name

    (

       [in|out] param1 param_type,

       [in|out] param2 param_type

    )

    begin

         sql statements;

    end;

    从上面的活生生的例子我们就看出了一个简单那的存储过程一般的格式,[in|out]是表示in和out是可以选择的,in表示是输入参数,out表示是输出参数,我们在声明参数的参数的时候可以指定一个参数是输入参数或者是输出参数。当然也可以不写,比如说我们在上面活生生的例子中我们就是讲这两个采参数省略掉了,省略了不代表是没有,而是使用默认的in,输入参数。

    接下来我们来看看另外的一个活生生的例子,这个我们来看一下带有输出参数的out,,,,来来来大家快来看啊:

    drop procedure if exists pr_multi;
    create PROCEDURE pr_multi(
      out c int,
      a int,
      b int
    )
    begin
    if a is null THEN
        set a=10;
    end if;
    if b IS null THEN
        set b=20;
    end if;
    set c=a*b;
    END
    call pr_multi(@name,5,3);
    select @name
    我们看调用存储使用的关键字是call procedure_name(param,..)猜猜最后输出是多少:

    @name

    15

    猜中没有,没有的话就给自己一个耳光吧。。。。。开玩笑,别当真微笑

    展开全文
  • mysql 创建存储过程及函数

    千次阅读 2020-04-18 20:29:29
    1. 存储过程 1.1. 基本语法 create procedure name ([params]) UNSIGNED [characteristics] routine_body params : in|out|inout 指定参数列表 代表输入与输出 routine_body: SQL代码内容,以begin ..........

    1. 存储过程

    1.1. 基本语法

    create procedure name ([params])

    UNSIGNED [characteristics] routine_body

     params : in|out|inout 指定参数列表 代表输入与输出

    routine_body: SQL代码内容,以begin ........   end

    characteristics: 指定存储过程特性,包含5种

                               1 DETERMINISTIC 不确定的
                               2 NO SQL 没有SQl语句,当然也不会修改数据
                               3 READS SQL DATA 只是读取数据,当然也不会修改数据
                               4 MODIFIES SQL DATA 要修改数据
                               5 CONTAINS SQL 包含了SQL语句

    1.2 创建一个指定执行权限的存储过程

    create DEFINER=`root`@`%` procedure name ([params])

    UNSIGNED [characteristics] routine_body

    DEFINER:指明谁有权力来执行。

    1.3 DELIMITER 的使用

          ”DELIMITER //“ 表示设置“//”符号为结束语,因为mysql中默认语句结束为分号‘;’,为了避免存储过程与mysql语句符号冲突,所以有时使用DELIMITER来改变结束语符号,要配合end //来使用;

     示例:创建一个root账户执行的存储过程,输出给定字符串的长度


    DELIMITER //
    CREATE definer=`root`@`%` PROCEDURE `avgFruitPrice`(
    in f_string VARCHAR(200)
    )
    BEGIN
        select length(f_string);
    END//

    2. 创建函数 

    函数的创建与存储过程相同

    示例

    DELIMITER //
    CREATE definer=`root`@`%` FUNCTION `my_length`(
    f_string VARCHAR(200)
    )
    RETURNS INT(11)
    UNSIGNED  NO SQL
    BEGIN
        return length(f_string);
    END//

    注意: 创建函数需要注意3个地方,

    1.  RETURNS: 需指定返回类型

    2. UNSIGNED  NO SQL 需指定存储过程特性

    3.return: 返回需要的数据

     

    遇见的错误:

    如报错如上信息就是没有指定存储过程特性。

     

    存储过程函数中可以通过mysql查询结果为其参数复制: 其语句为select .... into

    begin

    declare onename char(50) default‘0’;

    declare twoname char(50);

    select f_name, b_name into onename, twoname from t_user where id =1;

    .......

    end//

     

    说明:

    declare: 存储过程及函数内部定义变量

    default:默认值

    展开全文
  • MySql创建存储过程(procedure)

    万次阅读 多人点赞 2018-09-27 16:48:53
    如果存储过程中含有动态SQL语句,在触发器中调用该存储过程时会报错ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger。 该错误的含义是:函数或者触发器不支持动态SQL语句。下面...
  • 使用Navicat for MySQL创建存储过程

    千次阅读 2019-10-21 15:39:53
    1.打开navicat选择要创建存储过程的数据库. 利用工具栏打开【函数】--【新建函数】: 2.添加所要输入的参数,选择模式和类型(注意:这里并没有默认提供大小)。 3.输入存储过程的定义语句。 4....
  • mysql存储过程会有三种参数,此文章只讨论in和out参数。本文章已创建用户为例子...一 创建mysql存储过程存储过程中有两个参数(in usernme,out result_id) 使用navicat做工具 insert into f_user(username) v...
  • create routine--创建存储过程/函数 execute--调用存储过程/函数 下面有一篇介绍MySQL所有权限的博文 http://www.cnblogs.com/fslnet/p/3143344.html 转载于:...
  • // 删除已有的user表 DROP TABLE IF EXISTS `user`...// 创建新的user表 CREATE TABLE `user` ( `userId` INT (11) NOT NULL AUTO_INCREMENT, `userLoginAccount` INT (255) NOT NULL, `userPassword` VARCHAR (2...
  • MYSQL存储过程创建,调用及语法

    千次阅读 2021-01-18 21:23:50
    MySQL 存储过程是从MySQL 5.0开始增加的新功能。存储过程的优点有一箩筐。不过最主要的还是执行效率和SQL 代码封装。特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如PHP),要组织很多SQL...
  • MySQL创建存储过程保留注释内容

    千次阅读 2018-03-07 15:12:25
    mysql 5.5 linux环境问题:每次创建过程后写上的注释全部会被去掉,造成后续看脚本或维护时狠痛苦;解决方式:用客户端连接数据库时加入选项: --comments 或者 --comment原文档说明 :--comments, -cWhether to ...
  • mysql 创建存储过程报错

    千次阅读 2015-11-13 14:34:50
    mysql5以上的版本都支持存储过程 我先创建了一张表: create table tb_user ( user_id int primary key, ...默认情况下,创建存储过程会报错,如下: mysql> create procedure pr_gen_users() -> begin
  • 1:是存储过程的参数没有设定长度导致的,我们在Navicat中创建存储过程时参数的长度需要自己动手去添加的否则就会包这种错误。 添加上参数的长度之后在保存就不会出错了。 2:如果参数没问题,检查下自己的...
  • mysql怎么用sql语句创建存储过程

    千次阅读 2021-01-19 07:34:03
    展开全部可以在客户端里面直接写 比如用 navicat 就写:delimiter$$;createprocedurelucia_proc16(countint)beginDECLAREname_procVARCHAR(20)CHARACTERSETutf8;DECLAREsex_procVARCHAR(4)CHARACTERSETutf8;...
  • 主要介绍了MySQL存储过程按月创建表的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • MySQL 有输入输出参数的存储过程实例
  • MySQL存储过程练习.pdf

    2020-07-02 16:14:39
    实用标准文案 存储过程实验 一 实验要求 1.理解存储过程的概念 2.... 实验 1 创建一个存储过程实现查询表 student 中的记录信息并执行存储过 程 (1) 创建存储过程 begin select * from student end 文档大全 实用标
  • 但是现在并不希望Mysql这么做,因为存储过程中可能 包含很多分号的语句,所以怎么办了,很简单Mysql给我们提供了 delimiter关键字, delimiter作用就是把;分号替换成指定的符号,比如 //或$$。当再出现 //或$$时,...
  • mysql 创建存储过程权限问题

    千次阅读 2014-03-14 13:33:39
    mysql创建存储过程,一直提示如下信息: 刚开始我给该用户授予create routine权限,但是还是不能创建,后来才发现在存储过程中也有select,insert等其他操作,并看到一篇日志如下 “ 首先,在mysql存储过程...
  • mysql创建使用存储过程

    千次阅读 2019-10-28 10:37:37
    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 283,399
精华内容 113,359
关键字:

mysql创建存储过程

mysql 订阅