CREATE [AGGREGATE] FUNCTION function_name
    RETURNS {STRING|INTEGER|REAL|DECIMAL}
    SONAME shared_library_name
        This statement loads the loadable function named
        function_name. (CREATE
        FUNCTION is also used to created stored functions; see
        Section 13.1.16, “CREATE PROCEDURE and CREATE FUNCTION Statements”.)
      
        A loadable function is a way to extend MySQL with a new function
        that works like a native (built-in) MySQL function such as
        ABS() or
        CONCAT(). See
        Adding a Loadable Function.
      
        function_name is the name that should
        be used in SQL statements to invoke the function. The
        RETURNS clause indicates the type of the
        function's return value. DECIMAL is a legal
        value after RETURNS, but currently
        DECIMAL functions return string values and
        should be written like STRING functions.
      
        The AGGREGATE keyword, if given, signifies
        that the function is an aggregate (group) function. An aggregate
        function works exactly like a native MySQL aggregate function
        such as SUM() or
        COUNT().
      
        shared_library_name is the base name
        of the shared library file containing the code that implements
        the function. The file must be located in the plugin directory.
        This directory is given by the value of the
        plugin_dir system variable. For
        more information, see Section 5.6.1, “Installing and Uninstalling Loadable Functions”.
      
        CREATE
        FUNCTION requires the
        INSERT privilege for the
        mysql system database because it adds a row
        to the mysql.func system table to register
        the function.
      
        During the normal startup sequence, the server loads functions
        registered in the mysql.func table. If the
        server is started with the
        --skip-grant-tables option,
        functions registered in the table are not loaded and are
        unavailable.
          To upgrade the shared library associated with a loadable
          function, issue a
          DROP
          FUNCTION statement, upgrade the shared library, and
          then issue a
          CREATE
          FUNCTION statement. If you upgrade the shared
          library first and then use
          DROP
          FUNCTION, the server may unexpectedly shut down.