mysql批量插入存储函数
DROP PROCEDURE test_insert ;
DELIMITER $$
CREATE PROCEDURE test_insert()
BEGIN
DECLARE v_deviceid VARCHAR(2000) DEFAULT '';
DECLARE i tinyint DEFAULT '1';
WHILE i<99999
DO
SET v_deviceid = round(round(rand(),4)*10000);
INSERT INTO `device_base` VALUES (v_deviceid, 'test', 0, '1.0.0', 2, 37, '/124.42.103.1:21668', now(), now(), '正常');
SET i=i+1;
END WHILE ;
commit;
END $$
DELIMITER ;
CALL test_insert();
在执行的时候发现异常:Out of range value for column 'i' at row 1,并成功执行了127条数据
百度的结果说:
修改my.ini,将
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
改为
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"。
重新启动MySQL。
发现并不是那么回事,最后问题定位在变量 i 的类型 tinyint上
tinyint有固定范围值,带符号的范围是-128到127。无符号的范围是0到255。
最后把变量 i 的类型定义为varchar,问题解决
备注:
以后写sql语句时,类型和值最好严格一些。