10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


12.14情報関数

表12.18情報関数

名前 説明
基准() 式を繰り返し実行します
字符集() 引数の文字セットを返します
可压缩性() 文字列引数の照合順序強制性値を返します
排序() 文字列引数の照合順序を返します
CONNECTION_ID () 接続のための接続id(スレッドid)を返します
CURRENT_USER ()CURRENT_USER 認証済みユザ名とホスト名
数据库() デフォルト(現在)のデタベス名を返します
FOUND_ROWS () 限制句付き选择で,限制句がない場合に戻される可能性がある行の数です
LAST_INSERT_ID () 前回の插入でのautoincrementカラムの値です
ROW_COUNT () 更新された行数
模式() 数据库()のシノニムです
为SESSION_USER () 用户()のシノニムです
SYSTEM_USER () 用户()のシノニムです
用户() ユザ名と,クラアントによって提供されるホスト名です
(版本) MySQLサバのバジョンを示す文字列を返します

  • 基准(expr

    基准()関数は,式exprの回数だけ繰り返し実行します。MySQLによる式の処理速度を計測する際に使用される場合もあります。結果の値は常に0になります。この使用目的は,mysqlクラopenstackアント内から,クエリopenstackの実行時間をレポopenstackトすることです。

    mysql >选择基准(1000000,编码(“你好”,“再见”));+----------------------------------------------+ | 基准(1000000,编码(“你好”、“再见 ')) | +----------------------------------------------+ | 0  | +----------------------------------------------+ 1行集(4.74秒)

    レポートされる時間は,クライアント側での経過時間であり,サーバー側でのCPU時間ではありません。基准()を複数回実行し,サ。

    基准()の目的は,スカラ式の実行時パフォマンスを測定することです。これにより,その使用方法や結果の解釈方法に,重要ないく。

    • スカラ式しか使用できません。式をサブクエリーにすることはできますが,単一のカラムおよび最大でも単一の行が返される必要があります。たとえば,テブルtに複数のカラムや複数の行が含まれていると,BENCHMARK(10, (SELECT * FROM t))は失敗します。

    • 选择exprステトメントをN回実行する場合と,选择基准(Nexprを実行する場合とでは,発生するオバヘッドの量が異なります。この2。前者では,パ,オプティマ,テ,および実行時評価がそれぞれN回ず発生します。後者では,実行時評価のみがN回発生し,その他のすべてのコンポネントは1回だけ発生します。割り当て済みのメモリー構造体は再使用され,集約関数で評価済みの結果をローカルキャッシュに入れるなどの実行時最適化によって,結果が変わる可能性もあります。したがって,基准()を使用して,実行時コンポーネントに高い重みを付加し,ネットワーク,パーサー,オプティマイザなどで導入されたノイズを削除することで,そのコンポネントのパフォマンスが測定されます。

  • 字符集(str

    文字列引数の文字セットを返します。

    mysql >选择字符集(' abc ');——> 'latin1' mysql> SELECT CHARSET('abc' USING utf8));- mysql> 'utf8' SELECT CHARSET(USER());——>“use utf8”
  • 可压缩性(str

    文字列引数の照合順序強制性値を返します。

    mysql> SELECT ('abc' COLLATE latin1_swedish_ci);mysql: SELECT (USER());3 mysql> SELECT mandatory ('abc');- > 4

    戻り値の意味は,次の表に示すとおりです。値が低いほど,優先順位は高くなります。

    型変換属性 意味
    0 明示的な照合順序 核对句の値
    1 照合順序なし さまざまな照合順序との文字列の連結
    2 暗黙的な照合順序 カラム値,ストアドルチンパラメタ,またはロカル変数
    3. 系統定数 用户()の戻り値
    4 型変換可能 リテラル文字列
    5 無視可能 またはから派生した式
  • 排序(str

    文字列引数の照合順序を返します。

    mysql >选择排序(' abc ');-> 'latin1_swedish_ci' mysql> SELECT COLLATION(_utf8'abc');——>“utf8_general_ci”
  • CONNECTION_ID ()

    接続用の接続id(スレッドid)を返します。すべての接続は,現在接続されているクラ邮箱アントのセット間で一意のidを持っています。

    CONNECTION_ID ()で返される値の型は,INFORMATION_SCHEMA。PROCESSLISTテブルのIDカラム,显示PROCESSLIST出力のIdカラム,およびパフォマンススキマ线程テブルのPROCESSLIST_IDカラムに表示される値と同じです。

    mysql >选择CONNECTION_ID ();- > 23786
  • CURRENT_USERCURRENT_USER ()

    現在のクライアントを認証する際にサーバーで使用されたMySQLアカウントを表すユーザー名とホスト名の組み合わせを返します。このアカウントで,アクセス権限が決まります。戻り値は,use utf8文字セット内の文字列です。

    CURRENT_USER ()の値は,用户()の値とは異なる可能性があります。

    mysql >选择用户();——> 'davida@localhost' mysql> SELECT * FROM mysql.user;错误1044:用户访问mysql数据库的权限被拒绝——>“@localhost”

    この例は、クラ以及アントが黛维达のユザ名を指定(用户()関数の値で指定されます)したが,サ(CURRENT_USER ()値の空のユザ名部分に表示されます)を使用してクラ。これが発生する原因として,黛维达の付与テブルにアカウントが一覧表示されていないことが考えられます。

    ストアドプログラムまたはビュでは,SQL安全调用程序特性で定義されていなければ,CURRENT_USER ()はオブジェクトを定義したユザ(その.定义者値で指定されます)のアカウントを返します。後者の場合,CURRENT_USER ()はオブジェクトを呼び出したユザを返します。

    トリガおよびベントには,SQL安全特性を定義するためのオプションがありません。したがって,このようなオブジェクトの場合,CURRENT_USER ()はオブジェクトを定義したユザのアカウントを返します。呼び出したユザを返すには,用户()または为SESSION_USER ()を使用します。

    次のステートメントでは,影響を受けるユーザーや定義したユーザーの名前(ホストの可能性もあります)の代わりに,CURRENT_USER ()関数を使用することがサポトされています。このような場合,必要に応じてCURRENT_USER ()が拡張されます。

    • 减少用户

    • 重命名用户

    • 格兰特

    • 撤销

    • 创建函数

    • 创建过程

    • 创建触发器

    • 创建事件

    • 创建视图

    • 改变事件

    • 改变观点

    • 设置密码

    このようなCURRENT_USER ()の拡張がさまざまなMySQL 5.6リリスのレプリケションで持セクション17.4.1.7 " current_user()のレプリケション"を参照してください。

  • 数据库()

    デフォルト(現在)のデタベス名をuse utf8文字セット内の文字列として返します。デフォルトのデタベスがない場合は,数据库()を返します。ストアドルーチン内では,デフォルトのデータベースはルーチンが関連付けられたデータベースですが,これは呼び出し元のコンテキストでのデフォルトのデータベースと同じであるとはかぎりません。

    mysql >选择数据库();——>“测试”

    デフォルトのデタベスがない場合は,数据库()を返します。

  • FOUND_ROWS ()

    サバからクラアントに返される行の数を制限するために,选择ステトメントに限制句が含まれている場合があります。場合によっては,ステ,トメントを再度実行せずに,限制を付けなかった場合にステトメントで返されるはずの行数を知っておくことが望ましいことがあります。この行数を取得するには,选择ステトメントにSQL_CALC_FOUND_ROWSオプションを付けてから,FOUND_ROWS ()を呼び出します。

    SELECT SQL_CALC_FOUND_ROWS * FROMtbl_name- WHERE id > 100 LIMIT 10;mysql >选择FOUND_ROWS ();

    2番目の选择は,1番目の选择限制句なしで記述した場合に返される行数を示す数字を返します。

    最近成功した选择ステトメントにSQL_CALC_FOUND_ROWSオプションを付けなければ,FOUND_ROWS ()は,そのステトメントで返された結果セットの行数を返します。ステトメントに限制句が含まれている場合,FOUND_ROWS ()はその制限値以下の行数を返します。たとえば,ステトメントに限制10または限制50,10が含まれている場合,FOUND_ROWS ()はそれぞれ10と60を返します。

    FOUND_ROWS ()から取得できる行数は一時的なもので,选择SQL_CALC_FOUND_ROWSステトメントのあとに,このステトメントを発行しても取得できるようには設計されていません。あとで値を参照する必要がある場合は,保存してください。

    SELECT SQL_CALC_FOUND_ROWS * FROM…;SET @rows = FOUND_ROWS();

    选择SQL_CALC_FOUND_ROWSを使用している場合は,MySQLでは完全な結果セット内の行数を計算する必要があります。ただし,結果セットはクラ限制なしでクエリを再度実行するよりも速くなります。

    SQL_CALC_FOUND_ROWSおよびFOUND_ROWS ()は,クエリーで返される行数を制限するが,クエリーを再度実行しないで完全な結果セット内の行数を確認する必要がある状況でも役立ちます。例として,検索結果のほかのセクションを表示するページへのリンクを含むページが表示されるWebスクリプトがあります。FOUND_ROWS ()を使用すると,残りの結果を表示するために必要なその他のペジ数を確認できます。

    SQL_CALC_FOUND_ROWSおよびFOUND_ROWS ()を使用すると,联盟の複数箇所で限制が発生する可能性があるため,単純な选择ステトメントよりも,联盟ステトメントで使用した方が複雑になります。これは,联盟内の個々の选择ステトメントに適用される場合と,联盟の結果全体にグロバルに適用される場合があります。

    联盟SQL_CALC_FOUND_ROWSを使用する目的は,グロバルな限制なしで返される行数を返すことです。联盟SQL_CALC_FOUND_ROWSを使用する条件は,次のとおりです。

    • 联盟の1番目の选择に,SQL_CALC_FOUND_ROWSキワドが表示される必要があります。

    • FOUND_ROWS ()の値は,UNION ALLが使用されている場合にのみ正確です。所有なしで联盟が使用される場合は,重複の削除が発生し,FOUND_ROWS ()の値が単なる近似値になります。

    • 联盟限制が表示されない場合は,SQL_CALC_FOUND_ROWSが無視され,联盟を処理するために作成された一時テブル内の行数が返されます。

    ここで説明した以外のケスでは,FOUND_ROWS ()の動作(エラが発生して)选择ステトメントに失敗したあとの値など)が定義されません。

    重要

    ステトメントベスのレプリケションでは,確実にFOUND_ROWS ()をレプリケトすることはできません。行ベスのレプリケションを使用すると,この関数は自動的にレプリケトされます。

  • LAST_INSERT_ID ()LAST_INSERT_ID (expr

    LAST_INSERT_ID ()に引数を付けない場合は,最近実行された插入ステトメントの結果として,最初に自動的に生成され,正常にAUTO_INCREMENTカラムに挿入された値を表す64ビット値が返されます。この値の型は,MySQL 5.6.9の時点では长整型数字无符号,それよりも前では长整型数字(符号付き)です。正常に挿入された行がない場合は,LAST_INSERT_ID ()の値は未変更のままです。

    LAST_INSERT_ID ()に引数を付けない場合は,MySQL 5.6.9の時点では符号なし整数,それよりも前では符号付き整数が返されます。

    たとえば,AUTO_INCREMENT値を生成する行を挿入したあとは,次のようにして値を取得できます。

    mysql >选择LAST_INSERT_ID ();- > 195

    現在実行中のステトメントによって,LAST_INSERT_ID ()の値は影響を受けません。1のステトメントでAUTO_INCREMENT値を生成してから,独自のAUTO_INCREMENTカラムを含むテブルに行を挿入する複数行の插入ステトメントでLAST_INSERT_ID ()を参照すると仮定します。LAST_INSERT_ID ()の値は,2番目のステトメントでも未変更のままです。2番目以降の行でも、その値は以前に行われた行の挿入による影響を受けません。(ただし、LAST_INSERT_ID ()LAST_INSERT_ID (exprへの参照を混在させると,効果は定義されません。)

    以前のステトメントでエラが返された場合は,LAST_INSERT_ID ()の値が定義されません。トランザクションテブルでは,エラ,LAST_INSERT_ID ()の値は未定義のままです。手動の回滚では,LAST_INSERT_ID ()の値はトランザクション前の値にリストアされず,回滚時点と同じままです。

    MySQL 5.6.15よりも前では,レプリケーションのフィルタ処理ルールが使用されている場合に,この関数が正常にレプリケートされませんでした。(Bug #17234370, Bug #69861)

    ストアドルチン(プロシジャや関数)またはトリガの本文内では,LAST_INSERT_ID ()の値は,このような種類のオブジェクトの本文外で実行されたステトメントと同様に変更されます。あとに続くステトメントで参照されるLAST_INSERT_ID ()の値でのストアドルチンまたはトリガの効果は,ルチンの種類によって異なります。

    • ストアドプロシジャでLAST_INSERT_ID ()の値を変更するステートメントが実行される場合は,プロシージャー呼び出しが続くステートメントで変更された値が参照されます。

    • 値を変更するストアドファンクションおよびトリガーでは,値は関数やトリガーが終了したときにリストアされ,あとに続くステートメントでは変更された値が参照されません。

    生成されたidは,接続ごとにサバ内に保持されます。つまり,関数によって指定されたクライアントに返された値は,そのクラ邮箱アントによってAUTO_INCREMENTカラムに影響を与える最近のステトメント用に最初に生成されたAUTO_INCREMENT値です。この値は、ほかのクラ以及アントが独自のAUTO_INCREMENT値を生成した場合でも影響を受ける可能性はありません。この動作によって,各クライアントはほかのクライアントのアクティビティーを気にすることなく,ロックやトランザクションを実行しないで独自のIDを取得できます。

    行のAUTO_INCREMENTカラムを非マジック値(まり,でも0でもない値)に設定する場合は,LAST_INSERT_ID ()の値が変更されません。

    重要

    単一の插入ステトメントを使用して複数の行を挿入する場合,LAST_INSERT_ID ()は,最初に挿入された行のみに対して生成された値を返します。この理由は,ほかの一部のサバに対して同じ插入ステトメントを簡単に再現できるようにするためです。

    例:

    mysql >使用测试;Database changed mysql> CREATE TABLE t (-> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -> name VARCHAR(10) NOT NULL ->);查询OK, 0行影响(0.09秒)mysql> INSERT INTO t VALUES (NULL, 'Bob');查询OK, 1行影响(0.01秒)mysql> SELECT * FROM t;+----+------+ | id |名称  | +----+------+ | 1 |鲍勃  | +----+------+ 1行组(0.01秒)mysql >选择LAST_INSERT_ID ();+------------------+ | LAST_INSERT_ID () | +------------------+ | 1  | +------------------+ 1行集(0.00秒)mysql >插入t值- > (NULL,“玛丽”),(NULL,“简”),(NULL,“丽莎”);查询OK, 3 rows affected (0.00 sec) Records: 3 duplicate: 0 Warnings: 0 mysql> SELECT * FROM t;+----+------+ | id |名称  | +----+------+ | 玛丽鲍勃| 1 | | 2 | | | 3 |简| | 4 |丽莎  | +----+------+ 4行集(0.01秒)mysql >选择LAST_INSERT_ID ();+------------------+ | LAST_INSERT_ID () | +------------------+ | 2  | +------------------+ 1行集(0.00秒)

    2番目の插入ステトメントで3の新しい行がtに挿入されましたが,これらの行の1番目に生成されたidは2であり,あとに続く选择ステトメントでも,この値がLAST_INSERT_ID ()によって返されます。

    插入忽略を使用し,その行が無視された場合,LAST_INSERT_ID ()は現在の値から未変更のままです(接続で正常な.插入が実行されていない場合は,0が返されます)。トランザクショナル以外のテブルでは,AUTO_INCREMENTカウンタが増分されません。InnoDBテブルでは,innodb_autoinc_lock_mode1または2に設定されている場合は,次の例で示すようにAUTO_INCREMENTが増分されます。

    mysql >使用测试;SELECT @@innodb_autoinc_lock_mode;+----------------------------+ | @@ innodb_autoinc_lock_mode  | +----------------------------+ | 1  | +----------------------------+ 1行组(0.00秒)mysql >创建表“t”(“id”INT(11)不是零AUTO_INCREMENT,“val”INT(11)默认为空,主键(id),唯一键的i1 (val))引擎= InnoDB默认字符集= latin1;中的一个查询OK, 0 rows affected(0.02秒)——Insert two rows mysql> Insert INTO t (val) VALUES (1),(2);查询OK, 2行影响(0.00 sec)记录:2重复:0警告:0——auto_increment_offset=1,插入的行——结果AUTO_INCREMENT值为3 mysql> SHOW CREATE TABLE t\G *************************** 1。row *************************** Table: t Create Table: Create Table ' t ' (' id ' int(11) NOT NULL AUTO_INCREMENT, ' val ' int(11) DEFAULT NULL, PRIMARY KEY (' id '), UNIQUE KEY ' i1 ' (' val ')) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)——LAST_INSERT_ID()返回AUTO_INCREMENT列成功插入的第一个自动生成的——值mysql> SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID () | +------------------+ | 1  | +------------------+ 1行组(0.00秒)——企图插入重复的行失败但错误是忽略了mysql >忽略插入t (val)值(1),(2);查询OK, 0 rows affected (0.00 sec) Records: 2 duplicate: 2 warning: 0——innodb_autoinc_lock_mode=1, AUTO_INCREMENT计数器——为被忽略的行递增mysql> SHOW CREATE TABLE t\G *************************** 1。row *************************** Table: t Create Table: Create Table ' t ' (' id ' int(11) NOT NULL AUTO_INCREMENT, ' val ' int(11) DEFAULT NULL, PRIMARY KEY (' id '), UNIQUE KEY ' i1 ' (' val ')) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)——LAST_INSERT_ID是不变的,因为之前的插入是不成功的mysql> SELECT LAST_INSERT_ID();+------------------+ | LAST_INSERT_ID () | +------------------+ | 1  | +------------------+ 1行集(0.00秒)

    詳細は,セクション14.6.5 " InnoDBでのAUTO_INCREMENT処理"を参照してください。

    exprLAST_INSERT_ID ()への引数として指定されている場合は,その引数の値が関数によって返され,LAST_INSERT_ID ()によって次に返される値として記憶されます。これを使用すると,シケンスのシミュレションを行うことができます。

    1. シケンスカウンタを保持するテブルを作成し,それを初期化します。

      CREATE TABLE sequence (id INT NOT NULL);INSERT INTO sequence VALUES (0);
    2. そのテブルを使用して,次のようにシケンス番号を生成します。

      UPDATE sequence SET id=LAST_INSERT_ID(id+1);mysql >选择LAST_INSERT_ID ();

      更新ステトメントは,シケンスカウンタを増分し,LAST_INSERT_ID ()への次の呼び出しで更新された値が返されるようにします。选择ステトメントは,その値を取得します。mysql_insert_id ()C API関数を使用して,値を取得することもできます。セクション23.7.7.37 " mysql_insert_id() "を参照してください。

    LAST_INSERT_ID ()を呼び出さずに,シケンスを生成できます。このように関数を使用する有用性は,id値が最後に自動的に生成された値として保持されることです。独自のシケンス値を生成するほかのクラ更新ステトメントを発行し,选择ステトメント(またはmysql_insert_id ())で独自のシケンス値を取得できるため,マルチユでも安全です。

    mysql_insert_id ()関数は,插入および更新ステトメントのあとにしか更新されないため,选择などのその他のSQLステトメントを実行したあとに,このc API関数を使用しても,LAST_INSERT_ID (exprの値を取得できません。

  • ROW_COUNT ()

    MySQL 5.6では;ROW_COUNT ()は次のように値を返します。

    • DDLステトメント:0。これは,创建表删除表などのステトメントに適用されます。

    • 选择以外のDMLステトメント:影響を受ける行数です.これは,(以前と同様に)更新插入删除などのステトメントに適用されますが,ALTER TABLE数据加载INFILEなどのステトメントにも適用されるようになりました。

    • 选择:ステトメントで結果セットが返される場合は-1,そうでない場合は影響を受ける行数。たとえば,SELECT * FROM t1の場合,ROW_COUNT ()は-1を返します。SELECT * FROM t1 INTO OUTFILE 'file_nameの場合,ROW_COUNT ()はファ邮箱ルに書き込まれた行の数を返します。

    • 信号ステトメント:0。

    更新ステトメントの場合,デフォルトで影響を受けた行の値は実際に変更された行の数です。mysqldへの接続時にCLIENT_FOUND_ROWSフラグをmysql_real_connect ()に指定した場合,影響を受けた行の値は見かった、まり在哪里句に一致した行数です。

    取代ステトメントの場合,影響を受けた行の値は,新しい行が古い行に置き換わった場合2です。この場合,重複が削除されたあとに行が挿入されたためです。

    插入……重复密钥更新ステートメントの場合,行ごとの影響を受けた行の値は,その行が新しい行として挿入された場合は1,既存の行が更新された場合は2,既存の行がその現在の値に設定された場合は0です。CLIENT_FOUND_ROWSフラグを指定した場合,影響を受けた行の値は,既存の行がその現在の値に設定された場合は(0ではなく)1になります。

    ROW_COUNT ()は,mysql_affected_rows ()C API関数から取得される値と同様で,ステ,トメントの実行後にmysqlクラ邮箱アントに表示される行数です。

    INSERT INTO t VALUES(1),(2),(3);查询OK, 3 rows affected (0.00 sec) Records: 3 duplicate: 0 Warnings: 0 mysql> SELECT ROW_COUNT();+-------------+ | ROW_COUNT () | +-------------+ | 3  | +-------------+ 1行集(0.00秒)mysql >删除从t,我在(1、2);查询OK, 2 rows affected (0.00 sec) mysql> SELECT ROW_COUNT();+-------------+ | ROW_COUNT () | +-------------+ | 2  | +-------------+ 1行集(0.00秒)
    重要

    ステトメントベスのレプリケションでは,確実にROW_COUNT ()をレプリケトすることはできません。行ベスのレプリケションを使用すると,この関数は自動的にレプリケトされます。

  • 模式()

    この関数は数据库()のシノニムです。

  • 为SESSION_USER ()

    为SESSION_USER ()用户()のシノニムです。

  • SYSTEM_USER ()

    SYSTEM_USER ()用户()のシノニムです。

  • 用户()

    現在のMySQLユザ名とホスト名をuse utf8文字セット内の文字列として返します。

    mysql >选择用户();——>“davida@localhost”

    この値は,サ。CURRENT_USER ()の値とは異なる可能性があります。

    次のように,ユザ名の部分のみを抽出できます。

    mysql >选择SUBSTRING_INDEX(用户(),' @ ',1);——>“黛维达”
  • (版本)

    MySQLサバのバジョンを示す文字列を返します。この文字列では,use utf8文字セットが使用されます。値にはバジョン番号に加えて,サフィクスが付いている場合もあります。セクション5.1.4 "サバシステム変数"内の版本システム変数の説明を参照してください。

    この関数は,ステトメントベスのレプリケションでは安全に使用できません。binlog_format声明に設定されているときに,この関数を使用すると,警告のログが記録されます。

    mysql >选择版本();——>“5.6.23-standard”