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
Pernyataan DELIMITER mengubah pembatas standar yang merupakan titik koma (;) ke yang lain. Pembatas diubah dari titik koma (;) menjadi garis miring ganda //.
Mengapa kita harus mengubah pembatas?
Karena kami ingin meneruskan prosedur tersimpan, fungsi khusus, dll ke server secara keseluruhan daripada membiarkan alat mysql untuk menginterpretasikan setiap pernyataan sekaligus.
sumber
Saat Anda membuat rutin yang tersimpan yang memiliki
BEGIN...END
blok, pernyataan di dalam blok diakhiri dengan tanda titik koma(;)
. NamunCREATE PROCEDURE
pernyataan itu juga membutuhkan terminator. Jadi menjadi ambigu apakah titik koma dalam tubuh rutin berakhirCREATE PROCEDURE
, atau mengakhiri salah satu pernyataan dalam tubuh prosedur.Cara untuk menyelesaikan ambiguitas adalah dengan mendeklarasikan string yang berbeda (yang tidak boleh terjadi dalam tubuh prosedur) yang diakui oleh klien MySQL sebagai terminator sebenarnya untuk
CREATE PROCEDURE
pernyataan tersebut.sumber
Pembatas adalah karakter atau serangkaian karakter yang akan Anda gunakan untuk memberi tahu klien MySQL bahwa Anda telah selesai mengetikkan pernyataan Sql.
sumber
Anda mendefinisikan DELIMITER untuk memberi tahu klien mysql untuk memperlakukan pernyataan, fungsi, prosedur tersimpan atau pemicu sebagai keseluruhan pernyataan. Biasanya dalam file .sql Anda menetapkan DELIMITER berbeda seperti $$. Perintah DELIMITER digunakan untuk mengubah pembatas standar dari perintah MySQL (yaitu;). Karena pernyataan dalam rutinitas (fungsi, prosedur tersimpan atau pemicu) diakhiri dengan titik koma (;), untuk memperlakukannya sebagai pernyataan majemuk, kami menggunakan DELIMITER. Jika tidak ditentukan saat menggunakan rutinitas berbeda di file atau baris perintah yang sama, itu akan memberikan kesalahan sintaksis.
Perhatikan bahwa Anda dapat menggunakan berbagai karakter yang tidak disediakan untuk membuat pembatas kustom Anda sendiri. Anda harus menghindari penggunaan karakter backslash (\) karena itulah karakter escape untuk MySQL.
DELIMITER sebenarnya bukan perintah bahasa MySQL, ini perintah klien.
Contoh
sumber
DELIMITER memberi tahu klien mysql untuk memperlakukan pernyataan, fungsi, prosedur tersimpan atau pemicu sebagai keseluruhan pernyataan. Biasanya dalam a. sql Anda menetapkan DELIMITER berbeda seperti $$. Perintah DELIMITER digunakan untuk mengubah pembatas standar dari perintah MySQL
sumber
Pembatas adalah karakter dalam SQL yang digunakan untuk memisahkan item data dalam database. Ini mengidentifikasi awal dan akhir dari string karakter. Secara umum, pembatas yang digunakan dalam SQL adalah ';'.
sumber