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