mysql利用存储过程批量插入

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语句时,类型和值最好严格一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值