欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程

 更新時(shí)間:2015年12月09日 14:52:19   作者:crazylaa  
這篇文章主要介紹了MySQL存儲(chǔ)過(guò)程中一些基本的異常處理教程,其中rollback命令的使用需要謹(jǐn)慎一些,需要的朋友可以參考下

有時(shí)候,不希望存儲(chǔ)過(guò)程拋出錯(cuò)誤中止執(zhí)行,而是希望返回一個(gè)錯(cuò)誤碼。 Mysql 支持異常處理,通過(guò)定義 CONTINUE/EXIT 異常處理的 HANDLER 來(lái)捕獲 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 無(wú)數(shù)據(jù) / 其他異常)。其中, FOR 后面可以改為 SQLWARNING, NOT FOUND, SQLEXCEPTION 來(lái)指示所有異常都處理,相當(dāng)于 oracle 中的 others 。例如,當(dāng)不進(jìn)行異常處理時(shí),以下代碼將直接拋出一個(gè) ERROR 1062 (23000) 錯(cuò)誤:

CREATE PROCEDURE test_proc_ins1(
     IN i_id INT,
     IN i_name VARCHAR(100)
)
BEGIN
     INSERT INTO testproc VALUES (i_id,i_name);
     INSERT INTO testproc VALUES (i_id,i_name);
END;

經(jīng)過(guò)異常處理后,可以避免拋出錯(cuò)誤,而是定義一個(gè)返回參數(shù) o_ret 賦予特殊值來(lái)表示失敗,這樣,比如在 java 代碼中,可以通過(guò)獲取返回值而不是捕獲異常的方式來(lái)處理業(yè)務(wù)邏輯。例如將返回值設(shè)置為 -1:

CREATE PROCEDURE test_proc_ins1(
     IN i_id INT,
     IN i_name VARCHAR(100),
     OUT o_ret INT)
BEGIN
     DECLARE EXIT HANDLER FOR SQLSTATE '23000' set o_ret = -1;
-- 也可以這樣使用:
-- DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION set o_ret=-1;
     INSERT INTO testproc VALUES (i_id,i_name);
     INSERT INTO testproc VALUES (i_id,i_name);
     set o_ret = 1;
END;

當(dāng)然,對(duì)于特定的SQL語(yǔ)句,也可以指定比如主鍵沖突,就rollback;

DECLARE exit HANDLER FOR SQLSTATE '23000'

delimiter //

CREATE PROCEDURE TEST()
BEGIN
DECLARE exit HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND
begin
rollback;
insert into bb values('error');
end;
START TRANSACTION;
INSERT INTO aa VALUES (1);
INSERT INTO aa VALUES (2);
COMMIT;
END;
//

CALL test()//

相關(guān)文章

  • 詳細(xì)介紹基于MySQL的搜索引擎MySQL-Fullltext

    詳細(xì)介紹基于MySQL的搜索引擎MySQL-Fullltext

    這篇文章主要詳細(xì)介紹基于MySQL的搜索引擎MySQL-Fullltext,需要用到C和C#以及JavaScript的知識(shí),屬于MySQL的高階應(yīng)用,需要的朋友可以參考下
    2015-04-04
  • MYSQL如何 查詢(xún)數(shù)據(jù)庫(kù)中所有表中的數(shù)據(jù)量

    MYSQL如何 查詢(xún)數(shù)據(jù)庫(kù)中所有表中的數(shù)據(jù)量

    INFORMATION_SCHEMA.TABLES 是 MySQL 中的系統(tǒng)表,用于存儲(chǔ)關(guān)于數(shù)據(jù)庫(kù)中的表的信息,這篇文章主要介紹了MYSQL如何 查詢(xún)數(shù)據(jù)庫(kù)中所有表中的數(shù)據(jù)量,需要的朋友可以參考下
    2024-01-01
  • MySQL全面瓦解之查詢(xún)的正則匹配詳解

    MySQL全面瓦解之查詢(xún)的正則匹配詳解

    這篇文章主要給大家介紹了關(guān)于MySQL全面瓦解之查詢(xún)的正則匹配的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 關(guān)于Mysql中ON與Where區(qū)別問(wèn)題詳解

    關(guān)于Mysql中ON與Where區(qū)別問(wèn)題詳解

    在編寫(xiě)SQL腳本中,多表連接查詢(xún)操作需要使用到on和where條件,但是經(jīng)常會(huì)混淆兩者的用法,從而造成取數(shù)錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于Mysql中ON與Where區(qū)別問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • MySQL建表和增添改查操作代碼

    MySQL建表和增添改查操作代碼

    這篇文章主要介紹了MySQL建表和增添改查操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • MySql 快速插入千萬(wàn)級(jí)大數(shù)據(jù)的方法示例

    MySql 快速插入千萬(wàn)級(jí)大數(shù)據(jù)的方法示例

    這篇文章主要介紹了MySql 快速插入千萬(wàn)級(jí)大數(shù)據(jù)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 刪除MySQL重復(fù)數(shù)據(jù)的方法

    刪除MySQL重復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了刪除MySQL重復(fù)數(shù)據(jù)的方法,通過(guò)建立中間表實(shí)現(xiàn)針對(duì)冗余數(shù)據(jù)的刪除功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-12-12
  • MySQL slave_net_timeout參數(shù)解決的一個(gè)集群?jiǎn)栴}案例

    MySQL slave_net_timeout參數(shù)解決的一個(gè)集群?jiǎn)栴}案例

    這篇文章主要介紹了MySQL slave_net_timeout參數(shù)解決的一個(gè)集群?jiǎn)栴}案例,問(wèn)題日志請(qǐng)見(jiàn)正文,本文使用slave_net_timeout參數(shù)解決了這個(gè)問(wèn)題,需要的朋友可以參考下
    2015-05-05
  • MySQL中json字段的操作方法

    MySQL中json字段的操作方法

    這篇文章主要介紹了MySQL中json字段的操作方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • MySQL約束constraint用法詳解

    MySQL約束constraint用法詳解

    大家都知道MySQL中經(jīng)常會(huì)需要?jiǎng)?chuàng)建父子表之間的約束,下面這篇文章主要給大家介紹了關(guān)于MySQL約束constraint用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05

最新評(píng)論