区切り文字を使用している人を頻繁に見かけます。区切り文字とは何か、その目的は何なのかを自分で調べてみました。20 分ほど Google 検索しましたが、満足のいく答えは見つかりませんでした。そこで、質問です。区切り文字とは何か、いつ使用すればよいのか。
ベストアンサー1
デフォルト以外の区切り文字は、;
通常、複数のステートメントを定義する必要がある関数、ストアド プロシージャ、およびトリガーを定義するときに使用されます。 などの別の区切り文字を定義して、$$
プロシージャ全体の終了を定義しますが、その内部では、個々のステートメントはそれぞれ で終了します;
。このようにして、クライアントでコードを実行するとmysql
、クライアントはプロシージャ全体の終了位置を認識し、内部の個々のステートメントを実行するのではなく、ユニットとして実行できます。
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 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'DELIMITER $$' の近くで使用する正しい構文を確認してください。