多线程重复调用(插入)

当你有一个主键表时,发现数据没有,就向里面插入数据。当多线程调用时,可能存在与两个或两个以上的线程判断到数据不存在,同时去插入数据。此时主键就会发生冲突,报错。

停止报错的方法就是在存储过程中开启事务去发现错误,然后制止这个行为。

BEGIN

	DECLARE iid INT DEFAULT 0;
	DECLARE t_error TINYINT DEFAULT 0;
	DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error = 1;

	SELECT UserID INTO iid from fish_game_status WHERE UserID = User_ID;

	IF iid = 0 THEN
		START TRANSACTION;##插入的时候开启事务,捕捉错误回滚
		INSERT INTO fish_game_status VALUES(User_ID,Statu);
		IF t_error = 1 THEN
		ROLLBACK;
		ELSE
		COMMIT;
		END IF;
	ELSE
	UPDATE fish_game_status SET GameStatus = Statu WHERE UserID = User_ID;
	END IF;

END

首页 我的博客
粤ICP备17103704号