こんにちは
卒論のテーマは大体決まってる気がする、カイセン
1.MySQL
-----カスタム関数-----
----基本
2 つの必要な条件: パラメーターと戻り値 (この 2 つの間に必要な関係はありません。パラメーターは存在しない可能性がありますが、戻り値は存在する必要があります)
関数本体: 正当な SQL ステートメントと単純な SELECT または INSERT ステートメント。複合構造の場合は BEGIN...END ステートメントを使用します。
----パラメータのないカスタム関数現在の瞬間を中国語表示に変換すると、効果は次のようになります
mysql> SET NAMES gbk;
クエリ OK、影響を受ける行は 0 (0.05 秒)
+------------- - -----------------------------------+
| DATE_FORMAT(NOW(),'%YYY% 月%d 日 %h ポイント: %I 分: %s 秒') |
+-------------------------- ----- ----------+
| 2015 年 11 月 11 日 07:07:39 秒|
+----------- -------- -----------------------------+
セット内 1 行 (0.00 秒)
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);
+----------+
+----------+
| 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 |
+----------+
----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 秒)
+------+
| @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
true
http://www.bkjia.com/PHPjc/1070040.html
技術記事
基本的なトピックができた気がします - MySQL の続き (カスタム関数ストアド プロシージャ)、トピック - mysql こんにちは 論文のテーマはほぼ決まった気がします、Kaisen 1、MySQL -----カスタム関数----- --- -ガイ...