Pembatas selain ;
default default biasanya digunakan saat mendefinisikan fungsi, prosedur tersimpan, dan pemicu di mana Anda harus mendefinisikan beberapa pernyataan. Anda menentukan pembatas yang berbeda seperti $$
yang digunakan untuk mendefinisikan akhir dari keseluruhan prosedur, tetapi di dalamnya, pernyataan individual masing-masing diakhiri oleh ;
. Dengan begitu, ketika kode dijalankan di mysql
klien, klien dapat mengetahui di mana seluruh prosedur berakhir dan mengeksekusinya sebagai satu unit daripada mengeksekusi pernyataan individu di dalamnya.
Perhatikan bahwa DELIMITER
kata kunci adalah fungsi dari baris perintah mysql
klien (dan beberapa klien lain) saja dan bukan fitur bahasa MySQL biasa. Ini tidak akan berfungsi jika Anda mencoba meneruskannya melalui API bahasa pemrograman ke MySQL. Beberapa klien lain seperti PHPMyAdmin memiliki metode lain untuk menentukan pembatas non-default.
Contoh:
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 ;
Mencoba menggunakan DELIMITER
dengan klien yang tidak mendukungnya akan menyebabkannya dikirim ke server, yang akan melaporkan kesalahan sintaksis. Misalnya, menggunakan PHP dan MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Kesalahan dengan:
Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat 'DELIMITER $$' pada baris 1