sql >> データベース >  >> RDS >> Mysql

MySQLの区切り文字

    デフォルトの;以外の区切り文字 通常、複数のステートメントを定義する必要がある関数、ストアドプロシージャ、およびトリガーを定義するときに使用されます。 $$のような別の区切り文字を定義します これは、プロシージャ全体の終わりを定義するために使用されますが、その内部では、個々のステートメントはそれぞれ;で終了します。 。そうすれば、コードがmysqlで実行されるときに クライアントの場合、クライアントは、プロシージャ全体がどこで終了するかを判断し、内部の個々のステートメントを実行するのではなく、1つの単位として実行できます。

    DELIMITERに注意してください キーワードはコマンドラインmysqlの機能です クライアント(および他のいくつかのクライアント)のみであり、通常のMySQL言語機能ではありません。プログラミング言語APIを介してMySQLに渡そうとした場合は機能しません。 PHPMyAdminのような他のクライアントには、デフォルト以外の区切り文字を指定する他のメソッドがあります。

    例:

    DELIMITER $$
    /* This is a complete statement, not part of the procedure, so use the custom delimiter $$ */
    DROP PROCEDURE my_procedure$$
    
    /* Now start the procedure code */
    CREATE PROCEDURE my_procedure ()
    BEGIN    
      /* Inside the procedure, individual statements terminate with ; */
      CREATE TABLE tablea (
         col1 INT,
         col2 INT
      );
    
      INSERT INTO tablea
        SELECT * FROM table1;
    
      CREATE TABLE tableb (
         col1 INT,
         col2 INT
      );
      INSERT INTO tableb
        SELECT * FROM table2;
      
    /* whole procedure ends with the custom delimiter */
    END$$
    
    /* Finally, reset the delimiter to the default ; */
    DELIMITER ;
    

    DELIMITERを使用しようとしています サポートしていないクライアントでは、サーバーに送信され、構文エラーが報告されます。たとえば、PHPとMySQLiを使用する:

    $mysqli = new mysqli('localhost', 'user', 'pass', 'test');
    $result = $mysqli->query('DELIMITER $$');
    echo $mysqli->error;
    

    エラー:

    SQL構文にエラーがあります。 1行目の「DELIMITER$$」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください



    1. データベースからCodeigniter言語ファイルを作成するにはどうすればよいですか?

    2. OracleのLobセグメント(SYS_LOB)を理解していますか?

    3. DjangoRestFrameworkのページネーションが非常に遅いカウント

    4. ソートを使用した再帰的サブクエリ