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

2024/09/07 db

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

Search

    Table of Contents