デフォルトの;
以外の区切り文字 通常、複数のステートメントを定義する必要がある関数、ストアドプロシージャ、およびトリガーを定義するときに使用されます。 $$
のような別の区切り文字を定義します これは、プロシージャ全体の終わりを定義するために使用されますが、その内部では、個々のステートメントはそれぞれ;
で終了します。 。そうすれば、コードが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サーバーのバージョンに対応するマニュアルを確認してください