MySQL存储过程用法举例

创建一个存储过程范例


CREATE DEFINER=`root`@`localhost` PROCEDURE `test_myisam`()
begin
	declare i int default 1;
	while i < 1000
	do

 INSERT INTO `epa_monit_alarm_data_myisam` (alarm_status,
data_type,
enterprise_code,
object_id,
date,
create_time,
tanker_id,
oil_gun,
gas_liquid_ratio,
impermeability,
fluidic_resistor,
zero_pressure_tank,
vacuum_valve_condition,
critical_pressure_state,
post_processing_device_status
) 
VALUES (  0, 2, '2019080002', '202004081846332005', '2020-04-08 18:46:33', '2020-04-08 18:59:09', '04', '01', '0', NULL, NULL, NULL, NULL, NULL, NULL);
  
		set i=i+1;
	end while;
	commit;
end

调用存储过程,可以界面化调用,也可以执行如下命令即可:

call test_myisam();

如图这个demo,可以用来实现批量插入数据,做一些测试之类的,批量插入1000次。

存储过程用法示例

批量构造UUID

先创建一个接收uuid的测试表:



SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for test_uuid
-- ----------------------------
DROP TABLE IF EXISTS `test_uuid`;
CREATE TABLE `test_uuid`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `str` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主键',
  `create_date` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 111 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

再创建一个批量插入uuid的测试存储过程:


CREATE DEFINER=`root`@`localhost` PROCEDURE `test_innodb`()
begin
	declare i int default 1;
	while i < 100
	do
   
	 -- 批量生成uuid的测试数据
	 INSERT INTO `test_uuid`(  `str`, `create_date`) VALUES ( (select REPLACE(uuid(), '-', '')), NOW() );

 		set i=i+1;
	end while;
	commit;
end

这样,我们每次只要执行这个存储过程,就能获得一组uuid,用来给别的测试程序使用,比如做批量插入数据等时,会比较方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mysql Partition 是一种将表分割成独立的、可控制的部分,表中的数据被分布在这些部分中,它可以提高查询效率并且减少维护时间。下面我会用一个例子来详细讲解 mysql partition 的用法: 假设我们有一个包含百万行数据的用户访问日志表,而我们又想对该表进行分区以提高查询效率,这时候我们可以考虑按照日期对该表进行分区。例如我们可以按照日期将该表分为 30 个分区(每个月一个分区),每个分区的命名方式如:log_201001、log_201002、log_201003 … log_201012,这样我们就可以将每个月访问日志存储在不同的分区之中,以便后期查询时可以快速定位并且减少查询时间。 下面我们就可以使用 MySQL 的分区语句来创建日志表: ``` CREATE TABLE `log` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL, `ip` varchar(20) DEFAULT NULL, `access_time` datetime NOT NULL, PRIMARY KEY (`id`,`access_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci PARTITION BY RANGE (YEAR(access_time)*12+MONTH(access_time)) ( PARTITION p0 VALUES LESS THAN (201001), PARTITION p1 VALUES LESS THAN (201002), PARTITION p2 VALUES LESS THAN (201003), PARTITION p3 VALUES LESS THAN (201004), PARTITION p4 VALUES LESS THAN (201005), PARTITION p5 VALUES LESS THAN (201006), PARTITION p6 VALUES LESS THAN (201007), PARTITION p7 VALUES LESS THAN (201008), PARTITION p8 VALUES LESS THAN (201009), PARTITION p9 VALUES LESS THAN (201010), PARTITION p10 VALUES LESS THAN (201011), PARTITION p11 VALUES LESS THAN (201012) ); ``` 在上述语句中,我们使用了 RANGE 分区方式,将访问日志表按照年份和月份进行划分,同时根据不同的时间范围将表数据分配到不同的分区之中,例如 LESS THAN (201004) 表示该分区存储的数据的时间戳小于 2010 年 4 月。 通过这样的方式,我们就可以快速地查询特定时间段内的数据,例如: ``` SELECT * FROM `log` PARTITION (p0,p1) WHERE `access_time` BETWEEN '2010-01-01' AND '2010-02-28'; ``` 该语句将查询 2010 年 1 月至 2010 年 2 月的访问日志,其中由于我们已经将访问日志表按照年份和月份进行了分区,该查询会在所有日志分区中进行,提高了查询效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值