CREATE [AGGREGATE] FUNCTIONfunction_nameRETURNS {STRING|INTEGER|REAL|DECIMAL} SONAMEshared_library_name
          ユーザー定義関数 (UDF)
          は、ABS() や
          CONCAT()
          などのネイティブな (組み込みの) MySQL
          関数のように機能する新しい関数によって
          MySQL を拡張するための方法です。
        
          function_name
          は、この関数を呼び出すために SQL
          ステートメントで使用される名前です。RETURNS
          節は、この関数の戻り値の型を示します。DECIMAL
          は RETURNS
          のあとの正当な値ですが、現在
          DECIMAL
          関数は文字列値を返すため、STRING
          関数のように記述してください。
        
          shared_library_name
          は、この関数を実装するコードを含む共有オブジェクトファイルのベース名です。
          このファイルは、プラグインディレクトリに存在する必要があります。このディレクトリは、plugin_dir
          システム変数の値で指定されます。
        
これは MySQL 5.1 での変更です。以前のバージョンの MySQL の場合、共有オブジェクトは、システムの動的リンカーによって検索される任意のディレクトリに配置できます。
          関数を作成するには、mysql
          データベースに対する
          INSERT
          権限が必要です。これが必要なのは、CREATE
          FUNCTION
          によって、関数の名前、型、および共有ライブラリ名を記録する
          mysql.func
          システムテーブルに行が追加されるためです。このテーブルがない場合は、mysql_upgrade
          コマンドを実行して作成する必要があります。mysql_upgrade
          を参照してください。
        
          アクティブ関数とは、CREATE
          FUNCTION
          でロードされていて、DROP
          FUNCTION
          で削除されていない関数です。アクティブ関数はすべて、--skip-grant-tables
          オプションで mysqld
          を起動していないかぎり、サーバーが起動するたびに再ロードされます。この場合は、UDF
          の初期化がスキップされ、UDF
          は使用できません。
        
ユーザー定義関数を記述するための手順については、Adding a New User-Defined Function を参照してください。UDF のメカニズムが機能するには、関数を C か C++ (または、C の呼び出し規則を使用できる別の言語) で記述する必要があり、オペレーティングシステムが動的ロードをサポートしている必要があり、さらに mysqld を (静的にではなく) 動的にコンパイルしている必要があります。
          AGGREGATE
          関数は、SUM や
          COUNT()
          などのネイティブな MySQL 集約 (集計)
          関数のように正確に機能します。AGGREGATE
          が機能するには、mysql.func
          テーブルに type
          カラムが含まれている必要があります。mysql.func
          テーブルにこのカラムが含まれていない場合は、mysql_upgrade
          プログラムを実行して作成する必要があります
          (mysql_upgrade を参照)。
        
            UDF
            に関連付けられた共有ライブラリをアップグレードするには、DROP
            FUNCTION
            ステートメントを発行し、共有ライブラリをアップグレードしたあと、CREATE
            FUNCTION
            ステートメントを発行します。最初に共有ライブラリをアップグレードしてから
            DROP FUNCTION
            を使用すると、サーバーがクラッシュする可能性があります。
          
