當前位置:首頁 » 存儲配置 » mysql存儲過程異常回滾

mysql存儲過程異常回滾

發布時間: 2024-12-24 10:22:07

A. mysql 存儲過程 異常 是否自動 回滾

一般默認情況是會回滾的,但是如果你修改了My.ini文件裡面的安全級別就不一定了。

B. 如何 mysql 存儲過程返回值

mysql中要獲得存儲過程的返回值,可以增加一個out參數,用來返回。

mysql中存儲過程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;

SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN

SET result = 1;-- 已存在

SELECT
result;

ELSE

IF @c_count_a > 0 THEN

IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN

IF @isdead_a = 1 THEN
INSERT INTO t_user_voucher (userid, voucherid, isdead)
VALUES
(userid, voucherid, 1);
UPDATE t_voucher SET c_count = c_count-1 where id = voucherid;

SET result = 0;-- 成功
END;

C. mysql 多條語句,怎麼判斷其中一條執行錯誤,就執行回滾

寫一個存儲過程,在存儲過程里寫一個事物,再把你要的mysql 多條語句寫在事物裡面就行了,要用的時候調用一下存儲過程.大致格式是這樣的:

drop procere if exists accessCount;
delimiter $
create procere accessCount()
BEGIN
DECLARE t_error INTEGER DEFAULT 0;/*設置錯誤增量*/
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;/*開啟事物*/
xxxx(你的語句)
IF t_error = 1 THEN /*執行失敗回滾*/
ROLLBACK;
ELSE
COMMIT;
END IF;
end $
delimiter ;

D. mysql 存儲過程中update影響行數為0,回滾

使用FOUND_ROWS() 獲得影響的行數,再用IF判斷是否等於0就行了。

--開始事務
starttransaction;

callsetCoin(zjAmount,0,`uid`,liqType,`type`,info,_betId,serializeId,'');
updateblast_betssetlotteryNo=_kjData,zjCount=_zjCount,bonus=zjAmount,fanDianAmount=_fanDianAmountSelfwhereid=_betId;
IFFOUND_ROWS()=0THEN
ROLLBACK;
ELSE
COMMIT;
ENDIF;
commit;

E. mysql 存儲過程 異常 是否自動 回滾

是滴,默認是隱式的開始與提交,出現異常會默認自動回滾到開始位置,任何一個使用JDBC操作資料庫的SQL命令,在默認情況下,隱式開始與提交事務。當顯示的調用事物時,就必須顯示使用commit當使用rollback後也要進行commit;

F. MYSQL 存儲過程報錯Deadlock found when trying to get lock; try restarting transaction

這個死鎖估計是有數據沒了, 或者某個操作被回滾了

要避免這個問題方法有很多

  1. 事務盡量不要太復雜

  2. 在使用表或者行的時候, 盡量設定一個順序, 比如同一時間段線程A 競爭 1 2 資源, 線程 B 競爭 2 1 資源出現死鎖, 如果改成 A 使用 1 2 B 也是使用的 1 2 , 這樣再差也只會出現線程A/B去等待線程B/A執行完畢再去訪問資源

  3. 將一些容易出現死鎖的欄位改成索引, 這樣在競爭資源的時候mysql將不再上鎖[doge]

  4. 如果你是mysql資料庫, 則盡量避免使用 insert ... select 這樣的sql(oracle不用), 因為他會為你需要查詢的條件也上鎖, 這樣也會容易出現死鎖的問題

  5. 捕獲異常, 然後在出現這個異常的時候再次執行一次死鎖的sql語句

  6. 待續, 我也沒遇到更多的出現死鎖的情況了, 等遇到再說

以上幾點如果有錯的話, 請指出, 我們相互探討, 畢竟這也是我從筆記裡面找出來的, 可能有錯誤

G. mysql存儲過程執行一半出現異常會怎麼辦

如果在存儲過程調用的時候顯式的調用了事務處理,那麼,會回滾,否則執行到那裡就在哪裡生效。

熱點內容
路由器哪裡改密碼 發布:2024-12-25 00:53:18 瀏覽:658
編譯原理數組的翻譯三地址代碼 發布:2024-12-25 00:53:18 瀏覽:891
全新哈弗h6哪個車型配置夠用 發布:2024-12-25 00:51:35 瀏覽:887
安卓系統部落沖突如何用微信登錄 發布:2024-12-25 00:50:08 瀏覽:363
oracle啟動資料庫服務 發布:2024-12-25 00:50:03 瀏覽:65
手機游戲源碼開發 發布:2024-12-25 00:48:09 瀏覽:401
直流屏密碼是多少 發布:2024-12-25 00:28:26 瀏覽:655
汽車配置怎麼看馬力 發布:2024-12-25 00:23:49 瀏覽:83
ipad訪問許可權 發布:2024-12-25 00:23:01 瀏覽:690
rxjava上傳 發布:2024-12-25 00:22:59 瀏覽:306