mysql通过存储过程插入大量数据

https://www.jianshu.com/p/7d7e45eef622

参考这个

DELIMITER $$
DROP PROCEDURE IF EXISTS `proc_auto_insertdata`$$
CREATE PROCEDURE `proc_auto_insertdata`()
BEGIN
DECLARE init_data INTEGER DEFAULT 1;
WHILE init_data <= 10000 DO
INSERT INTO t_1 VALUES(init_data, CONCAT('测试', init_data), init_data + 10);
SET init_data = init_data + 1;
END WHILE;
END$$
DELIMITER ;
CALL proc_auto_insertdata();

但是我自己的表总是报错

Data truncation: Out of range value for column 'init_data' at row 1

看上去没毛病啊。

DELIMITER $$
DROP PROCEDURE IF EXISTS `proc_auto_insertdata`$$
CREATE PROCEDURE `proc_auto_insertdata`()
BEGIN
DECLARE init_data INTEGER DEFAULT 700000000000000000;
WHILE init_data <=700000000000000010 DO
INSERT INTO t_1 VALUES(init_data, CONCAT('测试', init_data), init_data + 10);
SET init_data = init_data + 1;
END WHILE;
END$$
DELIMITER ;
CALL proc_auto_insertdata();

并且数据库也没有字段 init_data

后来才发现  init_data INTEGER  的值太大,超过了 INTEGER的上限。修改成 bigint 之后可以了

DELIMITER $$
DROP PROCEDURE IF EXISTS `proc_auto_insertdata`$$
CREATE PROCEDURE `proc_auto_insertdata`()
BEGIN
DECLARE init_data bigint DEFAULT 700000000000000000;
WHILE init_data <=700000000000000010 DO
INSERT INTO t_1 VALUES(init_data, CONCAT('测试', init_data), init_data + 10);
SET init_data = init_data + 1;
END WHILE;
END$$
DELIMITER ;
CALL proc_auto_insertdata();

 

posted @ 2022-01-24 19:34  zhaoyansheng  阅读(248)  评论(0编辑  收藏  举报