ホームページ > バックエンド開発 > PHPチュートリアル > 基本的なトピックオープンの感じはこちら - MySQLの続き(カスタム関数&ストアドプロシージャ)、トピックオープン - mysql_PHPチュートリアル

基本的なトピックオープンの感じはこちら - MySQLの続き(カスタム関数&ストアドプロシージャ)、トピックオープン - mysql_PHPチュートリアル

WBOY
リリース: 2016-07-12 09:05:09
オリジナル
790 人が閲覧しました

トピックを開くときの基本的な感じは - MySQL が続きます (カスタム関数 & ストアド プロシージャ)、トピックを開く - mysql

こんにちは

卒論のテーマは大体決まってる気がする、カイセン

1.MySQL

-----カスタム関数-----

----基本

2 つの必要な条件: パラメーターと戻り値 (この 2 つの間に必要な関係はありません。パラメーターは存在しない可能性がありますが、戻り値は存在する必要があります)

関数本体: 正当な SQL ステートメントと単純な SELECT または INSERT ステートメント。複合構造の場合は BEGIN...END ステートメントを使用します。

----パラメータのないカスタム関数

現在の瞬間を中国語表示に変換すると、効果は次のようになります

mysql> SET NAMES gbk;

クエリ OK、影響を受ける行は 0 (0.05 秒)

mysql> SELECT DATE_FORMAT(NOW(),'%Y 年 %m 月 %d 日 %h 時点:%I 分:%s 秒');

+------------- - -----------------------------------+
| DATE_FORMAT(NOW(),'%YYY% 月%d 日 %h ポイント: %I 分: %s 秒') |
+-------------------------- ----- ----------+
| 2015 年 11 月 11 日 07:07:39 秒|
+----------- -------- -----------------------------+
セット内 1 行 (0.00 秒)

この関数を関数 f1() として記述します

mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30)

-> RETURN DATE_FORMAT(),'%y 年 %m 月 %d 日 %h ポイント:%I 分:%s 秒');
クエリOK、影響を受ける行は 0 行あります (0.05 秒)

電話する

mysql>SELECT f1();

----パラメータ付き関数

mysql> CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)

-> RETURNS FLOAT(10,2) UNSIGNED
-> クエリ OK、影響を受ける行は 0 (0.00 秒)
mysql> SELECT f2(32,33);
+----------+

| f2(32,33) |

+----------+
| 65.00 |
+----------+
セット内の 1 行 (0.03 秒)

説明はしません、誰でもわかります

----複合構造による機能

複合構造の機能は、多くの場合、実装されるステートメントが複数あることを意味します。たとえば、次のデータベースでは、パラメータを新しいユーザー名として挿入し、最後に挿入されたフィールドの ID を返す関数を作成します

mysql> DESC テスト;

+----------+----------+------+-- ---+--------+----------------+

| デフォルト |

-------+----------+------+-----+---------- --+----------------+
| 署名なし | varchar(20) | NULL |
+----------+----------+-----+----- +--------+----------------+

mysql> SELECT * FROM テスト;
+-----+----------+
ID |

+------+----------+

| 111 |
|
+-----+-----+

実装してみると分かりますが、直接書くとセミコロンが必要な文が2つありますが、不適切な場合は変更してください。

mysql> 区切り文字 //

終了記号を // に変更します

実際の機能は

mysql> CREATE FUNCTION adduser(username VARCHAR(20))

-> INT UNSIGNED を返します

-> INSERT test(username) ;

-> RETURN LAST_INSERT_ID() > 終了

-> //

通話チェック

mysql> SELECT adduser('Rose')//
+-----------------+
|

+------ ----------+

|

+----------------+


もちろん、この時点で区切り文字に戻すこともできます

mysql> ;
mysql> SELECT adduser('Rose2');
+---------------+

| ---------------+

| 4 |

+----------------+


----最後のメモ

カスタム関数は通常は使用されず、めったに使用されません。組み込み関数のみを使用してください

-----MySQL ストアド プロシージャ-----

----はじめに

一般的な目的は、MySQL の効率を向上させ、独自のストアド プロシージャを削除または削減することです

ストアド プロシージャの定義は次のとおりです。これは、SQL ステートメントと制御ステートメントのプリコンパイルされたコレクションであり、名前を付けて保存され、1 つの単位として処理されます (実際の理解は、一連の操作、またはもちろん特定の操作をマージ/カプセル化することです) 、これは MySQL 内にあるため、データベースの一般的な操作がストレージになるため、ストアド プロシージャと呼ばれます)。

ストアド プロシージャを使用した後は、構文チェックとコンパイルが初めて実行されるため、今後の呼び出し時にこれら 2 つの手順が保存され、効率が向上します。

---

利点: SQL ステートメントの機能と柔軟性が強化され、実行速度が向上します (上記のように)。ネットワーク トラフィックが削減されます (つまり、コマンドの長さが短縮されます)。

----構造解析・作成

カスタム関数の作成と似ていますが、パラメーターが異なります

---パラメータ

パラメータには値タイプ IN OUT INOUT を割り当てることができます

IN は、ストアド プロシージャを呼び出すときにこのパラメーターの値を指定する必要があり、返されないことを意味します

OUT は、ストアド プロシージャによって ~~~ を変更でき、返すことができることを意味します

INOUT は、呼び出し時に ~~~ が指定され、変更および返すことができることを意味します

---構造

機能体に似ています

任意の SQL ステートメントで構成できます

複合構造では BEGIN...END も使用する必要があります

宣言、ループなどが可能

----パラメーターのないストアド プロシージャ

mysql> CREATE PROCEDURE sp1() SELECT VERSION();
クエリ OK、影響を受ける行は 0 (0.00 秒)

mysql>SELECT sp1();
エラー 1305 (42000): FUNCTION test.sp1 が存在しません
mysql>CALL sp1();
+----------+
| +----------+
| 5.6.17 |
+----------+

ストアド プロシージャは CALL と呼ばれ、括弧ありまたは括弧なしの 2 つの呼び出しメソッドがあります

----IN 型パラメータを持つストアド プロシージャ

レコードを削除するストアドプロシージャ、IDで削除

mysql> DELIMITER //

mysql> CREATE PROCEDURE (IN id INT UNSIGNED)
-> BEGIN
-> DELETE FROM id=id;
-> //
クエリ0 行が影響を受けました (0.04 秒)

mysql> 区切り文字 ;

ここでid=idに注目してください。前者はテーブル内のid、後者はこのように記述できます(?)

ここの癖、DELIMITER + BEGIN...END文の書き方にも注意してください

電話する

mysql>removeUserById(3);

クエリ OK、4 行が影響を受ける (0.05 秒)

パラメータを含むプロシージャでは括弧を省略できないことに注意してください

ここでは、データ内のすべてのレコードが削除されます。したがって、通常、プロセスのパラメーターはデータ テーブルのフィールド名と同じであってはなりません。

ここでの変更は、プロセスを削除してから正しく再構築することによってのみ行うことができます。削除手順 REMOVEUSERBYID;

----IN パラメータと OUT パラメータあり

プロセスは次のように定義されます: 特定の ID のレコードを削除し、残っているレコードの数を返す

これは正規表現などを記述するプロセスに似ています。最初に要件を検討します。2 つの操作、値を返し、値を渡すため、IN と OUT の 2 つのパラメーターがあります

&Mysql & GT;

Mysql & GT; Create Procedure RemoveidReturnLENGTH & gt; select count (id) from test INTO usernums;

-> //

クエリは OK、影響を受ける行は 0 行あります (0.02 秒)


mysql> 区切り文字 ;

電話する

mysql> CALL REMOVEIDRETURNLENGTH(3,@NUMS);
クエリ OK、1 行が影響を受けました (0.03 秒)

mysql> @NUMS;

+------+

| @NUMS |

+------+

1 行設定(0.00秒)


@nums ここは変数です

mysql> SET @QQ=2;
クエリ OK、影響を受ける行は 0 (0.00 秒)

この種の変数はユーザー変数と呼ばれ、現在のユーザーに対してのみ有効であり、@ 記号が付いています

----複数の OUT パラメータを使用したプロシージャ

たとえば、多くのフィールドを持つデータテーブル

実装プロセス: 特定のIDのフィールドを削除し、削除されたユーザーを返し、残りのユーザーを返します


区切り文字 //

CREATE PROCEDURE Removereturn2(IN p_age SMALLINT UNSIGNED,OUT Remove_user SMALLINT UNSIGNED,OUT usercount SMALLINT UNSIGNED)

始めます

テスト WHERE age=p_age; から削除します

SELECT ROW_COUNT() INTO REMOVE_USER;

SELECT COUNT(ID) FROM test INTO USERCOUNT;

終了

//

区切り文字 ;

そのうち、ROW_COUNTは組み込み関数です

リムーバーETURN2(20,@A,@B)に電話します;

@A、@Bを選択;

なお、作成後のプロセスは変更できないので、初めて作成する場合は失敗しないように注意してください。

---ストアドプロシージャとカスタム関数の違い

ストアド プロシージャにはより複雑な関数があり、テーブルの操作によく使用されます。通常、関数はテーブルを操作する必要はありません。

~~~~複数の値を返すことができますが、関数は通常 1 つの値を返します

~~~~ 通常、関数は独立して実行され、他の SQL ステートメントのコンポーネントとして現れることがあります。

~~~~複雑なプロセスをカプセル化するために一般的に使用されますが、ほとんど使用されません

2.PHPとMySQL

明日から、PHP でよく使われる MySQL 関数を学び始めましょう (?)

さようなら

http://www.bkjia.com/PHPjc/1070040.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/1070040.html

技術記事

基本的なトピックができた気がします - MySQL の続き (カスタム関数ストアド プロシージャ)、トピック - mysql こんにちは 論文のテーマはほぼ決まった気がします、Kaisen 1、MySQL -----カスタム関数----- --- -ガイ...

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート