mysql 存储过程 - 创建使用示例

● 测试需求场景描述

  使用存储过程循环插入 N 条数据

● 创建一张表

CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `real_name` varchar(20) NOT NULL COMMENT '流水号',
  `sex` tinyint(4) DEFAULT '1' COMMENT '性别:0-女,1-男',
  `mobile` varchar(20) DEFAULT NULL COMMENT '联系电话',
  `email` varchar(64) DEFAULT NULL COMMENT '电子邮箱',
  `address` varchar(128) DEFAULT NULL COMMENT '地址',
  `money` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '存款',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

-- UNIQUE KEY `unidx_mobile` (`mobile`)

● 创建一个插入数据的存储过程

-- 删除存储过程,防止重复: DROP PROCEDURE IF EXISTS procedure_name;
DROP PROCEDURE IF EXISTS batchInsertProcedure;

-- 创建
delimiter ;;
create procedure batchInsertProcedure (in amount int)
begin
    declare realName varchar(20) default '张三';
    declare sex tinyint(4) default '1';
    declare mobile varchar(20) default '177';
    declare email varchar(64) default '@sina.cn';
    declare address varchar(128) default '上海';
    declare money decimal(12,2) default '1000.00';
    declare insert_result int default 0;
    declare i int default 1;
    -- declare insert_log varchar(255) default 'insert log:';
    declare continue_handler int default 0;
    declare continue handler for SQLEXCEPTION set continue_handler = 1;
    -- declare exit handler for SQLEXCEPTION rollback;
    set i = 1;
    start transaction;
    while i <= amount do

      set realName = concat('张三', i);
      set sex = i%2;
      set mobile = concat('177', i);
      set email = concat(i, '@sina.cn');
      set money = i + 1000;

      if i%2=0 then
       set address = "上海";
      else
       set address = "北京";
      end if;

      insert into `t_user`(`real_name`,`sex`,`mobile`,`email`,`address`,`money`) 
      values (realName, sex, mobile, email, address, money);

      set i = i + 1;
    end while;
    -- 异常逻辑
    if continue_handler = 1 then
       rollback;
    else
       commit;
    end if;
end ;;
delimiter ;


● 调用存储过程
call batchInsertProcedure (10);

● 查询调用结果
select * from `t_user`;

● 查看存储过程状态
show procedure status like 'batchInsertProcedure';

● 性能参数查看:

SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
SHOW VARIABLES LIKE 'sync_binlog';

相关推荐

  1. mysql 存储过程 - 创建使用示例

    2024-06-18 18:48:03       10 阅读
  2. mysql 存储过程示例

    2024-06-18 18:48:03       19 阅读
  3. MySQL创建存储过程函数

    2024-06-18 18:48:03       13 阅读
  4. MySQL创建存储过程函数

    2024-06-18 18:48:03       12 阅读
  5. mysql编程--创建存储过程

    2024-06-18 18:48:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 18:48:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 18:48:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 18:48:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 18:48:03       20 阅读

热门阅读

  1. 微信小程序地图功能详解

    2024-06-18 18:48:03       7 阅读
  2. 决策树算法介绍:原理与案例实现

    2024-06-18 18:48:03       6 阅读
  3. C++中的::运算符

    2024-06-18 18:48:03       5 阅读
  4. 合并两个可能为空的List 的方法记录

    2024-06-18 18:48:03       5 阅读
  5. 从入门到精通:Linux多线程

    2024-06-18 18:48:03       6 阅读
  6. IDM下载管理器的优势分析:为什么选择IDM?

    2024-06-18 18:48:03       7 阅读
  7. MySQL触发器基本结构

    2024-06-18 18:48:03       8 阅读
  8. Hello, World

    2024-06-18 18:48:03       6 阅读