MySQLの例外定義と例外処理の詳細説明
MySQL では、特定の例外には特定の処理が必要です。これらの例外は、サブルーチン内の一般的なフロー制御だけでなく、エラーにもリンクされている可能性があります。例外の定義とは、プログラムの実行中に発生する問題を事前に定義することです。例外処理は、問題が発生したときに採用する必要がある処理方法を定義し、エラーや警告が発生した場合でもストアド プロシージャや関数が実行を継続できるようにします。
1 例外定義
1.1 構文
DECLARE 条件名 CONDITION FOR
[condition_type];
1.2 説明
condition_name パラメータは例外の名前を表し、condition_type は SQLSTATE で表されます。
[VALUE] sqlstate_value|mysql_error_code は以下で構成されます:
sqlstate_value は長さ 5 の文字列型のエラー コードです。
mysql_error_code は数値型のエラー コードです。
「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;
DECLARE handler_type HANDLER FOR condition_value [,...] sp_statement
CONTINUE はエラーを処理せずに実行を継続することを意味します。
EXIT はエラーが発生したときにすぐに終了することを意味します。前の操作を元に戻した後、MySQL はまだロールバック操作をサポートしていません: SQLSTATE [VALUE] sqlstate_value| SQLWARNING|NOT
FOUND|SQLEXCEPTION|mysql_error_code
condition_value はエラーの種類を示します
condition_name は DECLARE を意味します。
CONDITION で定義されたエラー条件名は、
SQLWARNING で始まるすべての SQLSTATE エラー コードと一致します。
FOUND は 02 で始まるすべての SQLSTATE エラー コードに一致します。
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)
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 が実行が終了したことを示しています。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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