テーブル カラムにデフォルト値を戻します。カラムがデフォルト値を持たない場合はエラーが発生します。
mysql> UPDATE t SET i = DEFAULT(i)+1 WHERE id < 100;
FORMAT(
X
,D
)
数字 X
を
'#,###,###.##'
のようにフォーマットし、D
少数位まで丸め、その結果をストリングとして戻します。詳細は、項11.3. 「文字列関数」
をご覧ください。
timeout
秒の待機時間を使用して、ストリング
str
によって与えられた名前でロックの獲得を試みます。ロックの獲得が成功した場合は
1
を戻し、試行が時間切れになった場合 (
例えば、他のクライアントがすでにその名前をロックしている場合
) は 0
を、または、エラーが発生 (
メモリの不足、または mysqladmin
kill によるスレッドの停止 )
した場合は NULL
を戻します。GET_LOCK()
でロックを獲得した場合、RELEASE_LOCK()
を実行した時、新しい GET_LOCK()
を実行した時、または接続が切断された時 (
正常または異常な終了を問わず )
にリリースされます。GET_LOCK()
でロックを獲得した場合は、トランザクションと対話しないようにしてください。これは、トランザクションをコミットしても、トランザクション中に獲得されたそれらのロックはリリースされないためです。
この関数は、アプリケーション
ロックの実装、またはレコード
ロックのシミュレートに使用することができます。名前はサーバ全体に渡ってロックされます。ひとつのクライアントが名前をロックすると、GET_LOCK()
が他のクライアントからの同じ名前の使用要求をブロックします。これによって、与えられたロック名を承認したクライアントが、名前を使用して協調任意型のロックを行うことができます。ただし同時に、協調するクライアントのセットにないクライアントも、過失にせよ故意にせよ、名前をロックすることができることになり、協調するクライアントがその名前を使用できなくなりますので注意してください。それを防ぐひとつの方法は、データベース固有、またはアプリケーション固有のロック名を使用することです。フォーム
db_name.str
または
app_name.str
のロック名を使用するのもその一例です。
mysql>SELECT GET_LOCK('lock1',10);
-> 1 mysql>SELECT IS_FREE_LOCK('lock2');
-> 1 mysql>SELECT GET_LOCK('lock2',10);
-> 1 mysql>SELECT RELEASE_LOCK('lock2');
-> 1 mysql>SELECT RELEASE_LOCK('lock1');
-> NULL
2 番目の RELEASE_LOCK()
呼び出しは、ロック
'lock1'
が 2 番目の
GET_LOCK()
呼び出しによって自動的にリリースされるため、NULL
を戻します。
注記
:ライアントが、他のクライアントによってすでに確保されたロックの獲得を試みると、timeout
引数によってそのクライアントはブロックされます。ブロックされたクライアントが停止する場合、そのスレッドはロックがタイムアウトを要求するまで停止しません。これは既知のバグです。
ネットワーク アドレスのドット形式のクワッド表示がストリングとして与えられ、アドレスの数値を示す整数を戻します。アドレスは 4 または 8 バイトのアドレスである可能性があります。
mysql> SELECT INET_ATON('209.207.224.40');
-> 3520061480
生成される数字は常にネットワーク バイト順になります。例えばこの例のように、数字は 209×2563 + 207×2562 + 224×256 + 40 として計算されます。
また INET_ATON()
は、短縮形式の
IP アドレスを理解します :
mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
-> 2130706433, 2130706433
注記
:INET_ATON()
によって記憶数値が生成される場合は、INT
UNSIGNED
カラムの使用を推奨します。(
符号付の ) INT
カラムを使用すると、最初のオクテットが
127 以上である IP
アドレスに対応する値は正しく保存されません。詳細は
項10.2. 「数値タイプ」
を参照してください。
数字のネットワーク アドレス ( 4 または 8 バイト ) を与えられ、アドレスのドット形式のクワッド表示をストリングとして戻します。
mysql> SELECT INET_NTOA(3520061480);
-> '209.207.224.40'
str
と名付けられたロックが使用可能か (
ロックされていないか )
調べます。ロックが使用可能 (
まだ使用されていない ) 場合は
1
を、すでに使用されている場合は
0
を戻し、エラーが発生した場合 (
引数が不正確、など ) は NULL
を戻します。
str
と名付けられたロックが使用されているか (
ロックされているか )
調べます。ロックされている場合は、ロックを持っているクライアントの接続識別子を戻します。ロックされていない時は
NULL
を戻します。
MASTER_POS_WAIT(
log_name
,log_pos
[,timeout
])
この関数は、マスター /
スレーブの同期化のコントロールに役立ちます。スレーブがマスター
ログで指定された位置まで読み取り、すべてのアップデートを適用するまでブロックします。戻り値は、指定の位置まで進むまでスレーブが待たなければいけないログ
イベントの数です。この関数は、スレーブ
SQL
スレッドが開始されていない、スレーブのマスター情報が初期化されていない、引数が正しくない、またはエラーが発生、という場合は
NULL
を戻します。タイムアウトの時間を越えると
-1
が戻されます。MASTER_POS_WAIT()
の待機中にスレーブ SQL
スレッドが停止すると、関数は
NULL
を戻します。スレーブが指定の位置を過ぎたら、関数はただちに戻しを行います。
timeout
値が指定された場合、timeout
の秒数を経過したのち
MASTER_POS_WAIT()
は待機をやめます。timeout
は 0
より大きい数字でなければなりません。0
または負数の timeout
では待機時間なしになります。
与えられた値を戻します。結果セットのカラムの生成に使用された場合、NAME_CONST()
が、カラムが与えられた名前を持つ原因になります。
mysql> SELECT NAME_CONST('myname', 14);
+--------+
| myname |
+--------+
| 14 |
+--------+
この関数は MySQL 5.0.12 から、内部使用のみの目的で追加されました。項17.4. 「ストアドルーチンとトリガのバイナリログ」 で説明されているように、ローカル ルーチン変数への参考を含むストアド ルーチンからのステートメントを書く時にサーバが使用します。mysqlbinlog からの出力にこの関数が含まれる場合があります。
GET_LOCK()
で獲得されたストリング
str
によって名付けられたロックをリリースします。ロックがリリースされた場合は
1
を、ロックがこのスレッドによって確立されていない場合
( その場合ロックはリリースされません ) は
0
を、そして、名前付きのロックが存在しない場合は
NULL
を戻します。GET_LOCK()
への呼び出しで獲得、またはすでにリリースされていない限り、ロックは存在しません。
DO
文は
RELEASE_LOCK()
との使用に便利です。詳細は 項12.2.2. 「DO
構文」
を参照してください。
duration
引数で指定され秒数間だけ休止 ( 一時停止 )
し、その後 0
を戻します。SLEEP()
が妨げられた場合は 1
を戻します。継続時間はマイクロ秒で指定された少数部を持つが場合があります。
1977 年 10 月に、The Open Group が発行した 「DCE 1.1:Remote Procedure Call」 (Appendix A) CAE (Common Applications Environment) Specifications ( Document Number C706 、http://www.opengroup.org/public/pubs/catalog/c706.htm ) に基づいて生成された Universal Unique Identifier (UUID) を戻します。
UUID
は、スペースおよび時間においてグローバルに一意の数字としてデザインされています。UUID()
へのふたつの呼び出しは、互いに接続されていない別々のコンピュータ上で行った場合でも、それぞれ異なるふたつの値を生成することが想定されます。
A UUID is a 128-bit number represented by a string of five
hexadecimal numbers in
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
format:
最初の 3 桁はタイムスタンプから生成されます。
4 番目の数字は、タイムスタンプ値が単調整を失う場合 ( 例えば、夏時間の影響などで ) に備えて、一時的な一意性を保ちます。
5 番目の数字は、スペースの一意性を提供する IEEE 802 ノード番号です。後者が利用できない場合 ( 例えば、ホスト コンピュータが Ethernet カードを持たない、または使用のオペレーション システムでインターフェイスのハードウェア アドレスを見つける方法が分からない、など ) 、ランダムな数字で代替されます。その場合、スペースの一意性は保証されません。しかしそれでも、不調和が起こる可能性は 非常に 低いと思われます。
現在、インターフェイスの MAC アドレスは、FreeBSD と Linux でのみ考慮されています。他のオペレーション システムでは、MySQL はランダムに生成された 48 ビットの数字を使用します。
mysql> SELECT UUID();
-> '6ccd780c-baba-1026-9564-0040f4311e29'
UUID()
はまだ複製との作業は不可能ですのでご注意ください。
INSERT ... ON DUPLICATE KEY UPDATE
文では、UPDATE
句の
VALUES(
関数を使用して、ステートメントの
col_name
)INSERT
部分からのカラム値を参照することができます。つまり、UPDATE
句内の
VALUES(
は、複製キーとの衝突もなく、インサートされる
col_name
)col_name
値を参照するということです。この関数は複数行のインサートにおいて特に便利です。VALUES()
関数は、INSERT ... ON DUPLICATE KEY
UPDATE
文においてのみ有用で、その他では
NULL
を戻します。項12.2.4.3. 「INSERT ... ON DUPLICATE KEY UPDATE
構文」
参照。
mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);