この記事では、例を使用して、MySQL ストアド プロシージャの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。 ストアド プロシージャには、一連の実行可能な SQL ステートメントが含まれています。ストアド プロシージャは MySQL に保存され、その名前を呼び出すことで実行できます。 ストアドプロシージャの利点
ストアドプロシージャの欠点
パラメータなしのストアドプロシージャ 区切り文字 // プロシージャ p1() を作成する 始める ブログから*を選択します。 blog(name,sub_time) に値 ("xxx",now()) を挿入します。 終わり // 区切り文字 ; #mysqlでp1()を呼び出す #Python で pymysql に基づいて cursor.callproc('p1') を呼び出す print(カーソル.fetchall()) パラメータ付きストアドプロシージャ ストアド プロシージャの場合、次の 3 つのカテゴリに分類されるパラメーターを受け取ることができます。
ストアドプロシージャ mysql> emp から * を選択します。 +----+----------+-----+--------+ | ID | 名前 | 年齢 | dep_id | +----+----------+-----+--------+ | 1 | 張さん | 18 | 1 | | 2 | リシ | 19 | 1 | | 3 | エゴン | 20 | 2 | | 5 | アレックス | 18 | 2 | +----+----------+-----+--------+ 4 列セット (0.30 秒) mysql> 区切り文字 // mysql> プロシージャ p2 を作成します (n1 には int、n2 には int) -> 開始 -> id >n1 かつ id <n2 の場合、emp から * を選択します。 -> 終了 // クエリは正常、影響を受けた行は 0 行 (0.28 秒) mysql> 区切り文字; mysql> p2(1,3) を呼び出す -> ; +----+------+-----+--------+ | ID | 名前 | 年齢 | dep_id | +----+------+-----+--------+ | 2 | リシ | 19 | 1 | +----+------+-----+--------+ セット内の1行(0.07秒) クエリは正常、影響を受けた行は 0 行 (0.07 秒) #Python で pymysql に基づいて cursor.callproc('p2',(1,3)) を呼び出す print(カーソル.fetchall()) それなし mysql> 区切り文字 // mysql> プロシージャ p3 を作成します (in n1 int、out res int) -> 開始 -> id >n1 の場合、emp から * を選択します。 ->res=1 を設定します。 -> 終了 // クエリは正常、影響を受けた行は 0 行 (0.28 秒) mysql> 区切り文字; mysql> @res=0 を設定します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> p3(3,@res); を呼び出します。 +----+------+-----+--------+ | ID | 名前 | 年齢 | dep_id | +----+------+-----+--------+ | 5 | アレックス | 18 | 2 | +----+------+-----+--------+ セット内の 1 行 (0.00 秒) クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> @res を選択します。 +------+ | @res | +------+ | 1 | +------+ セット内の 1 行 (0.00 秒) #python の pymysql に基づいて cursor.callproc('p3',(3,0)) を呼び出します #0 は set @res=0 と同等です print(cursor.fetchall()) #select のクエリ結果を照会します。cursor.execute('select @_p3_0,@_p3_1;') #@p3_0 は最初のパラメータを表し、@p3_1 は 2 番目のパラメータ、つまり戻り値を表します。print(cursor.fetchall()) inout の例 区切り文字 // プロシージャp4を作成します( 入出力 n1 int ) 始める id > n1 のブログから * を選択します。 n1 = 1 に設定します。 終わり // 区切り文字 ; #mysqlでset @x=3を呼び出します。 p4(@x) を呼び出します。 @x を選択; #Python で pymysql に基づいて cursor.callproc('p4',(3,)) を呼び出す print(cursor.fetchall()) #select のクエリ結果を照会します。cursor.execute('select @_p4_0;') print(カーソル.fetchall()) 取引 #導入区切り文字 // プロシージャp4を作成します( アウトステータス int ) 始める 1. 例外が発生した場合に{を実行することを宣言します。 ステータスを 1 に設定します。 ロールバック; } 取引開始 - Qin Bing のアカウントから 100 を減算 -- ファン・シャオウェイのアカウントに90を追加 -- 張根のアカウントプラス10 専念; 終了ステータスを 2 に設定します。 終わり // 区切り文字 ; #区切り文字を実装する // プロシージャp5を作成します( OUT p_return_code tinyint ) 始める sqlexception の終了ハンドラを宣言する 始める - エラー p_return_codeを1に設定します。 ロールバック; 終わり; sqlwarning の終了ハンドラを宣言する 始める - 警告 p_return_codeを2に設定します。 ロールバック; 終わり; トランザクションを開始します。 DELETE from tb1; #実行に失敗しました insert into blog(name,sub_time) values('yyy',now()); 専念; - 成功 p_return_code = 0 を設定します。#0 は実行成功を表します END // 区切り文字 ; #mysql のストアド プロシージャを呼び出します。@res=123 を設定します。 p5(@res) を呼び出します。 @res を選択します。 #python で pymysql に基づくストアド プロシージャを呼び出す cursor.callproc('p5',(123,)) print(cursor.fetchall()) #select のクエリ結果を照会します。cursor.execute('select @_p5_0;') print(カーソル.fetchall()) ストアドプロシージャの実行 mysqlで実行 -- パラメータなしでproc_name()を呼び出す -- パラメータ付き、すべて proc_name(1,2)を呼び出す -- パラメータはin、out、inoutです @t1=0 を設定します。 @t2=3 を設定します。 proc_name(1,2,@t1,@t2) を呼び出す pymsqlで実行 #!/usr/bin/env python # -*- コーディング:utf-8 -*- pymysqlをインポートする conn = pymysql.connect(ホスト='127.0.0.1'、ポート=3306、ユーザー='root'、パスワード='123'、データベース='t1') カーソル = conn.cursor(cursor=pymysql.cursors.DictCursor) # ストアドプロシージャを実行します。cursor.callproc('p1', args=(1, 22, 3, 4)) # 実行後にパラメータを取得して保存します cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3") 結果 = cursor.fetchall() conn.commit() カーソルを閉じる() 接続を閉じる() 印刷(結果) ストアドプロシージャの削除 プロシージャ proc_name を削除します。 MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL ストアド プロシージャ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、および「MySQL データベース ロック関連スキルの概要」 この記事が皆様のMySQLデータベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: VirtualBox ソフトウェアのダウンロードとインストール、および Linux 環境でのインストールと展開に関する詳細なグラフィック チュートリアル
Zabbix カスタム スクリプトを使用して監視データを収集する場合、通常、次の問題が発生します。サ...
<br />最近、UCDChina は「インターフェース上のテキストに注意を払う」という...
MySQL のデフォルトの動作モードは自動コミット モードです。つまり、明示的にトランザクションを開...
フォーラムでは、ネットユーザーから「HTML ファイル内の別の HTML ファイルの内容を読み取るこ...
1.ブラウザでmysqlを検索してダウンロードしてインストールしますアドレス: https://d...
InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...
この記事の例では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有しています。具体...
序文:この記事は、jackyzm のブログ https://www.cnblogs.com/jack...
任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...
純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...
Linux でバージョン情報を表示する方法。ビット数、バージョン情報、CPU コア情報、CPU 固有...
Windows フォームと同様の効果を得るには、中央をドラッグして div の位置を変更し、端をド...
この記事では、スキン変更効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
この記事では、広告を上下にスクロールする効果を実現するためのjQueryの具体的なコードを参考までに...
まずは栗を見てみましょう EXPLAIN select * from employees where...