MySql ビュー トリガー ストアド プロシージャの詳細な説明

MySql ビュー トリガー ストアド プロシージャの詳細な説明

ビュー:

一時テーブルを繰り返し使用する場合、将来の使用を容易にするために別名を付けることができます。その後、ビューを作成できます。別名はビューの名前になります。ビューは単なる仮想テーブルであり、そのデータは物理テーブルから動的に読み取られるため、物理テーブルを変更するとビューも変更されます。

作成する:

SQLとしてビューv1を作成する

たとえば、create view v1 as select * from student where sid<10 のように記述します。

作成後、MySQLターミナルを使用するとv1というテーブルが表示されます。navicateを使用すると、ビュー内にv1というビューが生成されていることがわかります。

再度使用する場合は、クエリテーブル方式を直接使用できます。例えば: v1から*を選択

変更: ビュー内のSQL文のみ変更できます

ビュー名をSQLとして変更する

消去:

ビューをドロップ ビュー名

トリガー:

テーブルを追加、削除、変更、またはチェックする場合 (前、後、または後)、トリガーを使用して関連する動作をカスタマイズできます。

SQL文のターミネータ区切り文字を変更する

前 後

--区切り文字 //
  
-- before または after は、操作の前または後の操作 (挿入など) を定義します -- on は、そのテーブルで操作が発生した後のトリガー操作を表します -- CREATE TRIGGER t1 BEFORE INSERT on teacher for EACH row
 - 始める
-- Course(cname) に VALUES('Ultraman') を挿入します。
 - 終わり //
 - デリミタ;
 
 
-- teacher(tname) に VALUES('triggertest111') を挿入します
--
--区切り文字 // 
-- 各行の学生に対して INSERT の前にトリガー t1 を作成します
 - 始める
-- teacher(tname) に VALUES('Ultraman') を挿入します。
 - 終わり //
 - デリミタ;
 
 
-- 学生(性別、名前、クラスID)にVALUES('男','1小刚111',3)を挿入します。
-- トリガーを削除します -- トリガー t1 を削除します。
 
 
-- NEW と OLD は、一貫性を保つために新しいデータと古いデータを表します -- 区切り文字 //
-- 各行の学生に挿入する前にトリガー t1 を作成します
 - 始める
 
--ここで new は新しく挿入されたデータを指定し、old は通常削除に使用されます -- insert into teacher(tname) VALUES(NEW.sname);
 -  終わり //
 - デリミタ;
学生に性別、名前、クラスIDを挿入します。VALUES('男','蓝大蟹',3);

ストアドプロシージャ:

本質的には、これは SQL ステートメントのコレクションであり、このコレクションにはエイリアスが付けられます。ビューとテーブルの違いは、ビューはテーブルとして扱われる SQL クエリ ステートメントであるということです。

方法:

1 msyql----プログラム呼び出し用のストアド プロシージャ

2 msyql---ストアドプロシージャを実行しないでください。プログラムはSQLを書き込みます。

3 mysql - ストアドプロシージャを実行せず、プログラムでクラスとオブジェクトを記述します(SQL文に変換されます)

作成方法:

-- 1 パラメータなしのストアドプロシージャを作成する
--区切り文字 //
-- PROCEDURE p1() を作成します。
- 始める
-- 学生から*を選択します。
-- teacher(tname) に VALUES('cccc') を挿入します。
- 終わり //
- デリミタ;

-- ストアドプロシージャの呼び出し

 p2(5,2) を呼び出します<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql で cursor.callproc('p1',(5,2)) を実行します</em>
-- 2 パラメータ内にパラメータあり -- 区切り文字 //
-- PROCEDURE p2( を作成する
-- n1 int では、
-- n2 int 内
-- )
 - 始める
-- sid<n1 の場合、学生から * を選択します。
-- 
-- 終了 //<br data-filtered="filtered"><br data-filtered="filtered"> p2(5,2) を呼び出します<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql で cursor.callproc('p1',(5,2)) を実行します</em>
-- 3 outパラメータストアドプロシージャでoutをパラメータとして使用すると、変数を外部から呼び出すことができます -- ストアドプロシージャには戻り値がありません。変数を外​​部から呼び出す場合は、outを使用する必要があります
--区切り文字 //
-- PROCEDURE p3( を作成する
-- n1 int では、
--出力 n2 整数
-- )
 - 始める
--n2=444444 を設定します。
-- sid<n1 の場合、学生から * を選択します。
-- 
 -  終わり //
--
 - デリミタ;
--
-- set @v1=999 は、セッション レベルで変数を作成するのと同じです -- set @v1=999; 
-- p3(5,@v1) を呼び出します。
-- select @v1; #変数を渡してこの変数を監視することで、ストアドプロシージャが正常に実行されたかどうかを監視できます -- pymsyql の場合 --  
-- カーソル.callproc('p3',(5,2))
-- r2=カーソル.fetchall()
-- 印刷(r2)
--
-- ストアド プロシージャには out キーワードが含まれています。戻り値を取得する場合は、cursor.execute('select @_p3_0,@_p3_1') を使用します。
-- # このうち 'select @_p3_0,@_p3_1' は固定の書き方です select @_ストアドプロシージャ名_入力パラメータインデックス位置 -- cursor.execute('select @_p3_0,@_p3_1')
-- r3=カーソル.fetchall()
-- 印刷(r3)
--

結果セットがある場合、なぜ戻り値を偽造する必要があるのでしょうか?

ストアド プロシージャには複数の SQL ステートメントが含まれているため、すべての SQL ステートメントが正常に実行されたかどうかを判断することはできません。out 機能は、SQL ステートメントが正常に実行されたかどうかを識別するために使用されます。

たとえば、成功が1、部分的な成功が2、失敗が3とマークされている場合

ストアド プロシージャ内のトランザクション:

取引:

これをアトミック操作といいます。 DML (挿入、更新、削除) ステートメントはまとめて完了し、トランザクションは DML ステートメントにのみ関連しているか、DML のみにトランザクションがあります。

取引の特徴:

原子性 A: トランザクションは最小単位であり、分割できません。

一貫性 C: トランザクションでは、すべての DML ステートメントが実行時に成功または失敗する必要があります。

分離I: トランザクションAとトランザクションBの間には分離がある

永続性D: トランザクションの保証とトランザクション終了のサインです(メモリ内のデータはハードディスクに完全に保存されます)

取引キーワード:

トランザクションを開始: トランザクションを開始

取引終了: 取引終了

トランザクションをコミットする

ロールバックトランザクション

取引の基本操作

区切り文字 //
 プロシージャp5を作成します(
 n1 intでは、
 出力 n2 int
 )
 始める
 1 異常実行が発生した場合のステートメント(
   n2=1 を設定します。
   ロールバック;
  )
  2 取引開始 購入者アカウント - 100
        販売アカウント +100
        専念
  3 終了セット n2=2
   終わり //
   
   区切り文字 ;
   
 このように、n2を通じてエラーを検出し、ロールバックすることができます。以下は詳細なコード区切りです。
  プロシージャp6を作成します(
  出力コードTINYINT
  )
  始める
   SQLExceptionが発生した場合に次の操作を実行することを宣言します。DECLARE exit HANDLER for SQLEXCEPTION
   始める
     - エラー
      コード=1を設定します。
      ロールバック;
   終わり;
   トランザクションを開始します。
       tb1 から削除します。
       tb2(name)values('slkdjf') に挿入します
   専念;
    - -成功
   コード=2
   終わり //
区切り文字 ;

ストアド プロシージャでのカーソルの使用:

区切り文字 //
プロシージャ p7() を作成する
 始める
    row_id int を宣言します。
     row_num int を宣言します。
     宣言完了 int DEFAULT FALSE;
     カーソルを宣言します。declare my_cursor cursor for select id,num from A;
     データがない場合、doneをTrueに設定することを宣言します
     見つからない場合の継続ハンドラを宣言し、done=True を設定します。
     
     
     my_cursor を開きます。カーソル xxoo を開きます。LOOP xxoo というループを開始します。
            my_cursor を row_id、row_num にフェッチします。
              完了したら、完了が True の場合はループを終了し、xxoo を終了します。
              終了の場合;
              temp=row_id+row_num を設定します。
       B(数値)VALUES(一時)に挿入します。
            ループを終了 xxoo; ループを閉じます close my_cursor;
    終わり //
     
区切り文字 ;
 
 
上記のコードはPythonに変換されます 
my_cursor の row_id、row_num の場合:
  ループ内にデータがあるかどうかを確認し、ない場合は中断します
    壊す
    B(num) に値 (row_id+row_num) を挿入します

SQL を動的に実行し、データベース レベルで SQL インジェクションを配置します。

区切り文字 \\
プロシージャp6を作成します(
 intの場合
 始める
  1 特定のSQL文の正当性を事前コンパイル(事前チェック)する 2 sql=format tpl+arg
    3 SQLを実行する
 
  @nid=nid を設定する
    'select * from student where sid>?' から prod を準備します。
    @nid を使用して prod を実行します。
    割り当てを解除して本番環境を準備する
  終わり \\
  区切り文字 ;

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLシリーズ5つのビュー、ストアド関数、ストアドプロシージャ、トリガー
  • MySQL ストアド プロシージャの基本的な関数とトリガーに関するチュートリアル
  • MySQL トランザクション、ビュー、ストアド プロシージャ、トリガーに基づくアプリケーション分析
  • MySQLのイベントスケジューラEVENTを理解する
  • MySQL イベント スケジューラの使用の概要
  • MySQL ストアド プロシージャ、トリガー、イベント スケジューラの入門ガイド

<<:  仮想マシンでXshell5をLinuxに接続する方法と障害の解決方法

>>:  JSは検証コードのランダム生成を実装します

推薦する

Dockerコンテナデータをコピーしてバックアップする方法の詳細な説明

ここでは、Jenkins コンテナを例に 3 つの方法を紹介します。方法1コンテナをイメージにパッケ...

Tomcat8はcronologを使用してCatalina.Outログを分割します

背景tomcat によって生成された catalina.out ログ ファイルが分割されていない場合...

HTML CSS を使用して div またはテーブルを指定した位置に固定する方法

CSSコードコンテンツをクリップボードにコピー.bottomTable{背景色: rgb (249,...

LinuxでIPアドレスが表示されない問題の解決方法

目次序文解決:ステップ1ステップ2序文環境: VMware Workstation 上に Linux...

Ubuntu 18.04 に vsftpd をインストールするための実装コード

vsftpdをインストールする $ sudo apt-get install vsftpd -y v...

React 国際化 react-i18next の詳細な説明

導入react-i18next は、 i18nextをベースにした強力な国際化フレームワークです。 ...

Docker+Jenkinsによる自動デプロイの実現方法

Code Cloud を使用して Git コード ストレージ ウェアハウスを構築するhttps://...

Vueデータ監視の原理の詳細な説明

目次1. はじめにII. 監視対象2.1 なぜオブジェクトを監視する必要があるのですか? 2.2 デ...

Vueはソースコード付きのリファレンスライブラリのメソッドを使用します

monaco-editor-vueの公式ソースコードは次のとおりです。インデックス 'mon...

MacでMysqlのルートパスワードを忘れた場合の解決方法

長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...

ウェブページでグレーまたはブラックモードを実現するための CSS3 フィルターコード

フロントエンドcss3 フィルターは、Web ページのグレー効果を実現できるだけでなく、ナイト モー...

CSS を使用して等アスペクト比のアダプティブ コンテナを実装する方法

最近、モバイル ページを開発しているときに、ページの幅が 100% の場合、高さは幅の半分になり、携...

Windows でのシンプルな Mysql バックアップ BAT スクリプトの共有

序文この記事では、Windows で Mysql をバックアップするための簡単な BAT スクリプト...

jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

目次animate() アニメーションメソッドアニメーションキューイングdelay() メソッドアニ...

VirtualBox CentOS7.7.1908 Python3.8 ビルド Scrapy 開発環境 [グラフィックチュートリアル]

目次環境CentOSをインストールするyum 国内ミラーソースを構成するサードパーティの依存関係をイ...