この記事では、例を使用して、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 環境でのインストールと展開に関する詳細なグラフィック チュートリアル
目次1. はじめに2. vue-simple-uploaderについて3. vue-simple-u...
まず第一に、この効果は古い話題であるはずだということはわかっています。今日ファイルを整理していたら、...
1. はじめに不明な値または部分的に既知の値をフィルタリングする場合は、like 演算子を使用でき...
通常、Java の学習とプロジェクトのデプロイはローカルで行われますが、実稼働環境は Linux 環...
FirefoxでBGMを再生するための推奨コードがテストに合格しました空のコントロールパネルを開いて...
clear プロパティを使用してフロートをクリアすることはよくあることであり、clear プロパティ...
この古くからある疑問は、数え切れないほどのフロントエンド開発者やバックエンドプログラマーを悩ませてき...
私は最近、空洞化効果について研究しました。背景クリップ: テキスト背景はテキストの前景色にクリップさ...
結合クエリ結合クエリとは、2 つ以上のテーブル間のマッチング クエリを指し、一般的には水平操作と呼ば...
Win10はmysql5.7の解凍版をインストールします。参考までに、具体的な内容は次のとおりです...
目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...
1. イベント委任とは何ですか?イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべ...
目次1. 範囲1. グローバルな範囲2. ローカルスコープ2. 変数のスコープ1. グローバル変数2...
以前、raspbian で実行したときに opencv の一部の依存関係をパッケージ化できず、一部の...
目次1. Node.jsとVue 2. ローカル開発環境でフロントエンドのVueプロジェクトを実行す...