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();