Ograniczniki inne niż domyślne ;
są zwykle używane podczas definiowania funkcji, procedur składowanych i wyzwalaczy, w których należy zdefiniować wiele instrukcji. Definiujesz inny separator, taki jak $$
używany do definiowania końca całej procedury, ale w nim poszczególne instrukcje są zakończone przez ;
. W ten sposób, gdy kod jest uruchamiany w mysql
kliencie, klient może powiedzieć, gdzie kończy się cała procedura i wykonać ją jako jednostkę, zamiast wykonywać poszczególne instrukcje wewnątrz.
Należy zauważyć, że DELIMITER
słowo kluczowe jest funkcją tylko mysql
klienta wiersza poleceń (i niektórych innych klientów), a nie zwykłą funkcją języka MySQL. Nie zadziała, jeśli spróbujesz przekazać go przez interfejs API języka programowania do MySQL. Niektórzy inni klienci, tacy jak PHPMyAdmin, mają inne metody określania niestandardowego separatora.
Przykład:
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 ;
Próba użycia go DELIMITER
z klientem, który go nie obsługuje, spowoduje wysłanie go do serwera, który zgłosi błąd składni. Na przykład używając PHP i MySQLi:
$mysqli = new mysqli('localhost', 'user', 'pass', 'test');
$result = $mysqli->query('DELIMITER $$');
echo $mysqli->error;
Błędy z:
Masz błąd w składni SQL; sprawdź podręcznik, który odpowiada Twojej wersji serwera MySQL, aby uzyskać właściwą składnię, której należy użyć w pobliżu „DELIMITER $$” w wierszu 1