mysql事务&批量插入

参考教程MySQL存储过程 事务transaction

操作mysql数据库时如果有大量sql操作需要控制要么一起成功,要么一起失败的时候,就需要用到事务操作,一旦使用事务在捕获到失败后就需要 rollback 回滚操作,如果不进行错误检测,可能会导致部分成功(因为没做报错判断就直接commit提交了)

一次性批量插入200条记录到数据库,并记录下每条插入记录的id

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
delimiter //
drop procedure if exists test_insert;
create procedure test_insert()
BEGIN
DECLARE i int DEFAULT 1;
DECLARE insert_times int DEFAULT 200;
DECLARE insert_id int DEFAULT 0;
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
start transaction; #--整个存储过程指定为一个事务
WHILE i < insert_times DO
insert into test(record)values(concat('这是插入的第',i,'记录'));
select last_insert_id() into insert_id;#获取mysql当前连接用户最近一次插入的id
update test set remark=concat('插入id=',insert_id) where id=insert_id;
SET i = i + 1;
END WHILE;
IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
select t_error; #返回标识位的结果集;
END
//
call test_insert();
delimiter // drop procedure if exists test_insert; create procedure test_insert() BEGIN DECLARE i int DEFAULT 1; DECLARE insert_times int DEFAULT 200; DECLARE insert_id int DEFAULT 0; DECLARE t_error INTEGER DEFAULT 0; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; start transaction; #--整个存储过程指定为一个事务 WHILE i < insert_times DO insert into test(record)values(concat('这是插入的第',i,'记录')); select last_insert_id() into insert_id;#获取mysql当前连接用户最近一次插入的id update test set remark=concat('插入id=',insert_id) where id=insert_id; SET i = i + 1; END WHILE; IF t_error = 1 THEN ROLLBACK; ELSE COMMIT; END IF; select t_error; #返回标识位的结果集; END // call test_insert();
delimiter //
drop procedure if exists test_insert;
create procedure test_insert()

BEGIN
DECLARE i int DEFAULT 1;
DECLARE insert_times int DEFAULT 200;
DECLARE insert_id int DEFAULT 0;

DECLARE t_error INTEGER DEFAULT 0;    
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 

start transaction; #--整个存储过程指定为一个事务 


WHILE i < insert_times DO

insert into test(record)values(concat('这是插入的第',i,'记录'));
select last_insert_id() into insert_id;#获取mysql当前连接用户最近一次插入的id
update test set remark=concat('插入id=',insert_id) where id=insert_id;

SET i = i + 1;
END WHILE;


 IF t_error = 1 THEN    
            ROLLBACK;    
 ELSE    
            COMMIT;    
 END IF;    

select t_error;   #返回标识位的结果集;


END
//

call test_insert();

基于互联网精神,在注明出处的前提下本站文章可自由转载!

本文链接:https://ranjuan.cn/mysql事务批量插入/

赞赏

微信赞赏支付宝赞赏