Pembatas selain standar ;
biasanya digunakan ketika mendefinisikan fungsi, prosedur yang tersimpan, dan pemicu di mana Anda harus mendefinisikan banyak pernyataan. Anda mendefinisikan pembatas berbeda seperti $$
yang digunakan untuk menentukan akhir dari seluruh prosedur, tetapi di dalamnya, masing-masing pernyataan diakhiri oleh ;
. Dengan begitu, ketika kode dijalankan di mysql
klien, klien dapat mengetahui di mana seluruh prosedur berakhir dan menjalankannya sebagai unit daripada mengeksekusi pernyataan individu di dalamnya.
Perhatikan bahwa DELIMITER
kata kunci adalah fungsi dari mysql
klien baris perintah (dan beberapa klien lain) saja dan bukan fitur bahasa MySQL biasa. Ini tidak akan berhasil 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
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 $$' di baris 1