mysql存储过程小例子

DROP PROCEDURE IF EXISTS customview_logs_pro;
DELIMITER //
CREATE PROCEDURE customview_logs_pro(IN counts BIGINT)
BEGIN
DECLARE i BIGINT DEFAULT 1;
DECLARE total_count INT DEFAULT 1;
DECLARE timestr VARCHAR(19);
DECLARE from_source_id VARCHAR(64);
DECLARE daytime BIGINT;
DECLARE longtime BIGINT DEFAULT 0;
DECLARE answer_rand INT;
DECLARE answer_id INT;
DECLARE answer_name VARCHAR(64);
DECLARE input_model INT;
DECLARE input_rand INT;
WHILE i<=counts DO
  SET daytime = (SELECT ROUND(RAND()*30)) + 1;
  SET timestr=CONCAT('2017-04-',daytime,' 20:00:00');
  SET longtime=longtime+i;
  SET answer_rand = (SELECT ROUND(RAND()*5)) + 1;
  SET input_rand = (SELECT ROUND(RAND()*4)) + 1;
  
  IF input_rand=1
  THEN
	SET input_model = 0;
  ELSE
	SET input_model = 1;
  END IF;
  
  IF answer_rand=1
  THEN
	SET answer_id = 1;
	SET answer_name = 'xiaoxiao';
  ELSEIF answer_rand=2
  THEN
	SET answer_id = 3;
	SET answer_name = 'hasika';
  ELSEIF answer_rand=3
  THEN
	SET answer_id = 4;
	SET answer_name = 'tianlalu';
  ELSEIF answer_rand=4
  THEN	
	SET answer_id = 6;
	SET answer_name = 'shuren';
  ELSE 
  	SET answer_id = 8;
	SET answer_name = 'lianjin';
  END IF;
  
  SET from_source_id=CONCAT('userid_',(SELECT ROUND(RAND()*1000000)),'_',longtime);
  INSERT INTO table_name(ID,from_source_id) VALUES(i,191585688,2,from_source_id);
  IF MOD(i,10000)=0 THEN
   COMMIT;
  END IF;
  SET i = i + 1;
END WHILE;
COMMIT;
END

CALL service_logs_pro(10000000);

需要注意的是:

如果不需要将插入千万级数据的操作写在一个事务中,那么就需要如上所示,每隔10000条数据提交一次,否则会报“事务日志已满”的错误,导致无法完成插入操作;

如果需要写在一个事务中,那么可以考虑将事务日志的空间扩展。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值