ホームページ データベース mysql チュートリアル MySQLの例外定義と例外処理の詳細説明

MySQLの例外定義と例外処理の詳細説明

Dec 15, 2016 pm 04:11 PM

MySQL では、特定の例外には特定の処理が必要です。これらの例外は、サブルーチン内の一般的なフロー制御だけでなく、エラーにもリンクされている可能性があります。例外の定義とは、プログラムの実行中に発生する問題を事前に定義することです。例外処理は、問題が発生したときに採用する必要がある処理方法を定義し、エラーや警告が発生した場合でもストアド プロシージャや関数が実行を継続できるようにします。

1 例外定義

1.1 構文

DECLARE 条件名 CONDITION FOR [condition_type];

1.2 説明

condition_name パラメータは例外の名前を表し、condition_type は SQLSTATE で表されます。 [VALUE] sqlstate_value|mysql_error_code は以下で構成されます:

sqlstate_value と mysql_error_code は両方とも MySQL エラーを表すことができます

sqlstate_value は長さ 5 の文字列型のエラー コードです。
mysql_error_code は数値型のエラー コードです。

1.3 例

「ERROR」の定義 1148(42000)" エラー、名前は command_not_allowed です。 2 つのメソッドがあります:

//方法一:使用sqlstate_value 
DECLARE command_not_allowed CONDITION FOR SQLSTATE '42000′; 
//方法二:使用mysql_error_code 
DECLARE command_not_allowed CONDITION FOR 1148;
ログイン後にコピー

2 カスタム例外処理


2.1 例外処理構文


DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement
ログイン後にコピー

2.2 パラメータの説明


handler_type : CONTINUE|EXIT|UNDO


handler_type はエラー処理メソッドであり、パラメータは 3 つの値のいずれかです。

CONTINUE はエラーを処理せずに実行を継続することを意味します。
EXIT はエラーが発生したときにすぐに終了することを意味します。前の操作を元に戻した後、MySQL はまだロールバック操作をサポートしていません: SQLSTATE [VALUE] sqlstate_value| SQLWARNING|NOT FOUND|SQLEXCEPTION|mysql_error_code


condition_value はエラーの種類を示します

SQLSTATE [VALUE] sqlstate_value は 5 文字を含む文字列エラー値です。

condition_name は DECLARE を意味します。 CONDITION で定義されたエラー条件名は、
SQLWARNING で始まるすべての SQLSTATE エラー コードと一致します。 FOUND は 02 で始まるすべての SQLSTATE エラー コードに一致します。

SQLEXCEPTION は SQLWARNING または NOT ではないすべての SQLSTATE エラー コードに一致します。 Found;

mysql_error_code によってキャプチャされた SQLSTATE エラー コードは、値タイプのエラー コードと一致します。例外処理を定義せずに実行されたステップを確認します。

/方法一:捕获sqlstate_value异常 
//这种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为”42S02″,执行CONTINUE操作,并输出”NO_SUCH_TABLE”信息 
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02′ SET @info='NO_SUCH_TABLE'; 
  
//方法二:捕获mysql_error_code异常 
//这种方法是捕获mysql_error_code值。如果遇到mysql_error_code值为1146,执行CONTINUE操作,并输出”NO_SUCH_TABLE”信息; 
DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE'; 
 
//方法三:先定义条件,然后捕获异常 
DECLARE no_such_table CONDITION FOR 1146; 
DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info='NO_SUCH_TABLE';  
  
//方法四:使用SQLWARNING捕获异常 
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';  
  
//方法五:使用NOT FOUND捕获异常 
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TABLE';
  
//方法六:使用SQLEXCEPTION捕获异常 
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';
ログイン後にコピー

例 1: 例外を定義しない場合

show databases;
use wms;
create table location
(
location_id int primary key,
location_name varchar(50)
);
ログイン後にコピー


ストアド プロシージャとその結果を呼び出す:

DELIMITER //
CREATE PROCEDURE handlerInsertNoException()
BEGIN
 /*DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;*/
 SET @x=1;
 INSERT INTO location VALUES (1,'Beijing');
 SET @x=2;
 INSERT INTO location VALUES (1,'Wuxi');
 SET @x=3;
END;
//
DELIMITER ;
ログイン後にコピー

注: 例 2 を操作する前に、テーブル内のデータをクリアし、ログアウトしてログを記録する必要があります。クライアント変数 @x の影響を回避するために再度入力します。詳細については、結論の最初の点を参照してください。

mysql> call handlerInsertNoException();
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select @x;
+------+
| @x  |
+------+
|  2 |
+------+
1 row in set (0.00 sec)
  
mysql> select * from location;
+-------------+---------------+
| location_id | location_name |
+-------------+---------------+
|      1 | Beijing    |
+-------------+---------------+
1 row in set (0.00 sec)
ログイン後にコピー

例 2: 例外処理を定義する場合:

mysql> truncate table location;
Query OK, 0 rows affected (0.04 sec)
mysql> select * from location;
Empty set (0.00 sec)
mysql> exit;
Bye
  
david@Louis:~$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
  
mysql> use wms;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
  
Database changed
mysql> select * from location;
Empty set (0.00 sec)
  
mysql> select @x;
+------+
| @x  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
ログイン後にコピー

ストアド プロシージャの呼び出しと結果:

DELIMITER //
CREATE PROCEDURE handlerInsertWithException()
BEGIN
 DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2=1;
 SET @x=1;
 INSERT INTO location VALUES (1,'Beijing');
 SET @x=2;
 INSERT INTO location VALUES (1,'Wuxi');
 SET @x=3;
END;
//
DELIMITER ;
ログイン後にコピー

説明と結論:

1. MySQL では、@var_name はユーザー変数を表し、SET ステートメントを使用します。割り当ての場合、ユーザー変数は接続に関連しています。あるクライアントによって定義された変数は、他のクライアントからは参照または使用できません。クライアントが終了すると、そのクライアント接続のすべての変数が自動的に解放されます。

2. 例 1 では、注釈付きの例外ステートメント「」により、同じ主キーをテーブルに挿入すると例外がトリガーされ、デフォルト (EXIT) パスが使用され、この時点で @x がチェックされて 2 が返されます。


3. この時点でエラーが発生した場合、実行は続行されますが、最初のデータのみが挿入されます。このテーブルは、ユーザー変数 @x=3 が実行が終了したことを示しています。

以上が MySQL の例外定義と例外処理の詳細な説明です。記事については、PHP 中国語 Web サイト (www.php .cn) にご注意ください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

INNODBフルテキスト検索機能を説明します。 INNODBフルテキスト検索機能を説明します。 Apr 02, 2025 pm 06:09 PM

INNODBのフルテキスト検索機能は非常に強力であり、データベースクエリの効率と大量のテキストデータを処理する能力を大幅に改善できます。 1)INNODBは、倒立インデックスを介してフルテキスト検索を実装し、基本的および高度な検索クエリをサポートします。 2)一致を使用してキーワードを使用して、ブールモードとフレーズ検索を検索、サポートします。 3)最適化方法には、単語セグメンテーションテクノロジーの使用、インデックスの定期的な再構築、およびパフォーマンスと精度を改善するためのキャッシュサイズの調整が含まれます。

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

この記事では、MySQLのAlter Tableステートメントを使用して、列の追加/ドロップ、テーブル/列の名前の変更、列データ型の変更など、テーブルを変更することについて説明します。

MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? MySQLでインデックスを使用するよりも、フルテーブルスキャンがいつ速くなるのでしょうか? Apr 09, 2025 am 12:05 AM

完全なテーブルスキャンは、MySQLでインデックスを使用するよりも速い場合があります。特定のケースには以下が含まれます。1)データボリュームは小さい。 2)クエリが大量のデータを返すとき。 3)インデックス列が高度に選択的でない場合。 4)複雑なクエリの場合。クエリプランを分析し、インデックスを最適化し、オーバーインデックスを回避し、テーブルを定期的にメンテナンスすることにより、実際のアプリケーションで最良の選択をすることができます。

Windows 7にMySQLをインストールできますか? Windows 7にMySQLをインストールできますか? Apr 08, 2025 pm 03:21 PM

はい、MySQLはWindows 7にインストールできます。MicrosoftはWindows 7のサポートを停止しましたが、MySQLは引き続き互換性があります。ただし、インストールプロセス中に次のポイントに注意する必要があります。WindowsのMySQLインストーラーをダウンロードしてください。 MySQL(コミュニティまたはエンタープライズ)の適切なバージョンを選択します。インストールプロセス中に適切なインストールディレクトリと文字セットを選択します。ルートユーザーパスワードを設定し、適切に保ちます。テストのためにデータベースに接続します。 Windows 7の互換性とセキュリティの問題に注意してください。サポートされているオペレーティングシステムにアップグレードすることをお勧めします。

INNODBのクラスターインデックスと非クラスターインデックス(セカンダリインデックス)の違い。 INNODBのクラスターインデックスと非クラスターインデックス(セカンダリインデックス)の違い。 Apr 02, 2025 pm 06:25 PM

クラスター化されたインデックスと非クラスター化されたインデックスの違いは次のとおりです。1。クラスター化されたインデックスは、インデックス構造にデータを保存します。これは、プライマリキーと範囲でクエリするのに適しています。 2.非クラスター化されたインデックスストアは、インデックスキー値とデータの行へのポインターであり、非プリマリーキー列クエリに適しています。

人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? 人気のあるMySQL GUIツール(MySQL Workbench、PhpMyAdminなど)は何ですか? Mar 21, 2025 pm 06:28 PM

記事では、MySQLワークベンチやPHPMyAdminなどの人気のあるMySQL GUIツールについて説明し、初心者と上級ユーザーの機能と適合性を比較します。[159文字]

MySQLの大きなデータセットをどのように処理しますか? MySQLの大きなデータセットをどのように処理しますか? Mar 21, 2025 pm 12:15 PM

記事では、MySQLで大規模なデータセットを処理するための戦略について説明します。これには、パーティション化、シャード、インデックス作成、クエリ最適化などがあります。

ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? ドロップテーブルステートメントを使用してMySQLにテーブルをドロップするにはどうすればよいですか? Mar 19, 2025 pm 03:52 PM

この記事では、ドロップテーブルステートメントを使用してMySQLのドロップテーブルについて説明し、予防策とリスクを強調しています。これは、バックアップなしでアクションが不可逆的であることを強調し、回復方法と潜在的な生産環境の危険を詳述しています。

See all articles