第4章 関数

その他の関数

BENCHMARK(count, expr)
ベンチマーク

BENCHMARK()は、式EXPRをCOUNT回実行します。MySQLが式を処理する時間を測定するために使います。結果の値は常に 0 です。

SELECT BENCHMARK(1000000,"SELECT
* FROM item");
+-----------------------------------------+
| BENCHMARK(1000000,"SELECT * FROM item") |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
1 row in set (0.06 sec)

SELECT BENCHMARK(1000000,"SELECT id FROM item");
+------------------------------------------+
| BENCHMARK(1000000,"SELECT id FROM item") |
+------------------------------------------+
| 0 |
+------------------------------------------+
1 row in set (0.04 sec)

レポートされる処理の経過時間は、 CPU の時間ではなく、クライアントでの時間です。

CONNECTION_ID()

CONNECTION_ID()は、接続IDを返します。

SELECT CONNECTION_ID();
-> 1 

DATABASE() 
現在使用しているデータベース名を返す

DATABASE()は、現在使用しているデータベース名を返します。

SELECT DATABASE();
-> 'mysql'

もし、データベース名がなければ、空文字を返します。

des_encrypt(string_to_encrypt, flag, [, (key_number | key_string) ] )

Encrypts the string with the given key using the DES
algorithm, which provides strong encryption. Note that
this function only works if you have configured MySQL
with SLL support. 「4.3.8 Using Secure Connections」節参照. The encryption key to use is chosen the following way:


Argument

Description
Only one argument The first key from
des-key-file is used.
key number The given key (0-9) from
the des-key-file is used.
string The given key_string will
be used to crypt string_to_encrypt.

The return string will be a binary string where the
first character will be CHAR(128 | key-number). The 128
is added to make it easier to recognize a crypted key.
If one uses a string key, key-number will be 127. On
error, this function returns NULL. The string length for
the result will be new_length= org_length +
(8-(org_length % 8))+1. The des-key-file has the
following format:

key-number key-string key-number
key-string 

The key-number must be a number between 0-9. The
numbers may be in any order. des-key-string is string
that will be used to crypt the message. Between the
number and the key there should be at least one space.
The first key is the default key that will be used if
one doesn't specify a key to des_encrypt() You can tell
MySQL to read new key values from the key file with the
FLUSH DES_KEY_FILE command. One benefit with having a
set of default keys on can use is that it gives
applications a way to check for existence of crypted
column, without giving the end user the right to uncrypt
the data.

SELECT customer_address FROM
customer_table WHERE crypted_credit_card =
DES_ENCRYPT("credit_card_number"); 

des_decrypt(string_to_decrypt [, key_string])

Decrypts a string crypted with des_encrypt(). Note
that this function only works if you have configured
MySQL with SLL support. 「4.3.8 Using Secure Connections」節参照. If one only gives this
a string argument, then it will use the right key from
the des-key-file to decrypt the message. For this to
work the user must have the PROCESS_PRIV privilege. If
one calls this function with 2 arguments, the second
argument is used to decrypt the message. If the
string_to_decrypt doesn't look like a crypted string
MySQL will return the given string_to_decrypt. On error,
this function returns NULL.

ENCODE(str, pass_str)
UNIXの encrypt 命令文を実行する

ENCODE()は、パスワードとして pass_str を用いてstrを暗号化します。結果を復号化するには、DECODE()を使用します。 結果はバイナリ文字列で、長さはstringと同じです。フィールドにそれを保存したい場合はBLOBフィールド型を使用してください。

DECODE(crypt_str,pass_str)

DECODE()は、暗号化された文字列 crypt_str をパスワードとしてpass_strを用いて復号化します。crypt_str は ENCODE() から返された文字列であるべきです。

ENCRYPT(str [,salt]) 
UNIXのencrypt()命令文を実行する

ENCRYPT()は、UNIXの crypt システムコールで暗号化してsalt は2文字の文字列です。

SELECT ENCRYPT("hello");
-> 'VxuFAJXVARROc'

システムで crypt() が利用できない場合は ENCRYPT() は常に NULL を返します。

FORMAT(X, D)
数値書式を変更する

FORMAT()は、D で指定した10進数を #,###,###.## 形式に成形します。D が 0の場合は小数点以下を省略します。

SELECT FORMAT(12332.1234, 2);
-> '12,332.12'

SELECT FORMAT(12332.1,4);
-> '12,332.1000'

SELECT FORMAT(12332.2,0);
-> '12,332'

GET_LOCK(str, timeout)

GET_LOCK()は、timeout で指定したタイムアウトまで、一定秒間待機するロックを作成します。ロックには strで名前を指定することができ、同じロック名を使って連携するプログラム間でロックを作成する際に使用できます。
 ロックが成功すると1を返します。待機中にロックがタイムアウトすると 0を返します。そのほかのエラーはすべてNULL値を返します。RELEASE_LOCK の実行、新しい GET_LOCKの実行、スレッドの終了の場合に、ロックは解放されます。

SELECT GET_LOCK("lock1",10);
-> 1

INET_NTOA(expr)

INET_NTOA()は、数値表現に対するネットワークアドレス(4 または 8 バイト) を返します。

SELECT INET_NTOA(3520061480);
-> "209.207.224.40" 

INET_ATON(expr)

INET_ATON()は、ネットワークアドレスに対する数値を表す整数を返します。アドレスは 4 または 8 バイトアドレスです。

SELECT INET_ATON("209.207.224.40");
-> 3520061480 

生成された数値は常にネットワークバイトオーダです; たとえば、上記の数値は 209*255^3 + 207*255^2 + 224*255 +40 として計算されます。

LAST_INSERT_ID([expr]) 
最後にINSERTされた時にauto_increment指定で作成されたIDを返す

LAST_INSERT_ID()は、最後に INSERT された ID を返します。AUTO_INCREMENT指定のあるフィールドは自動的に生成された値が挿入されますが、その値が返されます。

SELECT LAST_INSERT_ID();
-> 12

MASTER_POS_WAIT(log_name, log_pos)

MASTER_POS_WAIT()は、複製の間、マスターログの指定された位置にスレーブが到達するまでブロックします。マスター情報が初期化されていない場合、NULLが返ります。スレーブが動作していない場合ブロックし、スレーブが起動し、指定位置にくるまで待ちます。スレーブが既に指定位置を通り過ぎていた場合、即時復帰します。戻り値は指定位置を得るために待つ必要のあるログイベントの数、またはエラーの場合NULL です。マスタースレーブ同期制御に有用ですが、元々は手軽な複製テストのために書かれました。

MD5(string)

MD5()は、文字列をMD5を使って変換した結果を返します。 値は 32 桁の 16進表示です。

SELECT MD5("password123");
-> 482c811da5d5b4bc6d497ffa98491e38

【MD5】
メッセージダイジェスト関数アルゴリズムのうちの1つで、RFC1321で定義されています。デジタル署名などの暗号アルゴリズムとして広く使われています。

PASSWORD(str) 
ユーザ権利テーブル用に文字列を変換する

PASSWORD()は、strで指定された文字列を暗号化します。この関数は MySQLにアクセスするユーザのパスワードを登録する際に使用されます。 PASSWORD()
暗号は不可逆、つまり元の文字列に戻す手段はありません。

SELECT PASSWORD('badpwd');
-> '7f84554057dd964b' 

RELEASE_LOCK(str)

RELEASE_LOCK()は、GET_LOCK で作成された str という名前のロックを解放します。解放に成功すると
1、失敗した場合は 0、ロックが存在しない場合は NULL を返します。

USER()

SYSTEM_USER()
SESSION_USER()
現在のユーザ名を返す

USER()は、MySQL接続に使用されているユーザ名を返します。

SELECT USER();
-> user@localhost

ユーザ名の部分だけ取り出すには次のようにします。

SELECT left(USER(),instr(USER(),"@")-1);
-> user

VERSION()
MySQLのバージョンを返す

VERSION()は、MySQLサーバのバージョンを返します。

SELECT VERSION();
-> 3.23.49-nt

関連記事