[解決済み] MySQLのデリミタ
2022-04-28 18:17:22
質問
デリミタを使っている人をよく見かけます。私もデリミタとは何か、その目的は何かを調べてみました。20分ほどググってみましたが、納得のいく答えが見つかりませんでした。そこで質問です。デリミタとは何か、そしていつ使うべきか?
どのように解決するのですか?
デフォルト以外のデリミタ
;
は通常、関数、ストアドプロシージャ、およびトリガを定義する際に使用され、複数のステートメントを定義する必要があります。 のような別のデリミタを定義します。
$$
これはプロシージャ全体の終わりを定義するために使用されますが、その内部では個々のステートメントはそれぞれ
;
. そうすると、コードが実行されたときに
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の構文に誤りがあります。 1行目の 'DELIMITER $$' 付近で使用する正しい構文については、お使いの MySQL サーバのバージョンにお問い合わせください。
関連
-
mysqlにおけるvarcharの日付比較とソートの実装
-
[解決済み】MySQLのエラーコードです。MySQL WorkbenchでUPDATE中に1175のエラーが発生しました。
-
SQLException。オペランドは1列でなければなりません。
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] MySQLのクエリ結果をCSV形式で出力するにはどうすればよいですか?
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み】MySQLでカラムに同じ値を持つ行を検索する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysqlにおけるvarcharの日付比較とソートの実装
-
MySQLはこのようなUpdateステートメントを書くべきではありません
-
Mysqlデータベースの手動および定期的なバックアップ手順
-
MySQLインストールチュートリアル(Linux版
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
MySQLにおけるvarchar型とchar型の違い
-
'INSERT文はFOREIGN KEY制約「FK_TourismReservation_Users」と競合していました。その
-
[解決済み] MySQLでのループの例
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?