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
Instrukcja DELIMITER zmienia standardowy separator, którym jest średnik (;), na inny. Separator został zmieniony ze średnika (;) na podwójne ukośniki //.
Dlaczego musimy zmienić ogranicznik?
Ponieważ chcemy przekazać procedurę składowaną, funkcje niestandardowe itp. Do serwera jako całość, zamiast pozwalać narzędziu mysql na interpretowanie każdej instrukcji na raz.
źródło
Podczas tworzenia procedury składowanej, która ma
BEGIN...END
blok, instrukcje w bloku są zakończone średnikiem(;)
. AleCREATE PROCEDURE
instrukcja wymaga również terminatora. Staje się więc niejednoznaczne, czy średnik w treści procedury kończyCREATE PROCEDURE
, czy kończy jedno z instrukcji w treści procedury.Sposobem na rozwiązanie tej niejednoznaczności jest zadeklarowanie odrębnego ciągu znaków (który nie może występować w treści procedury), który klient MySQL rozpoznaje jako prawdziwy terminator
CREATE PROCEDURE
instrukcji.źródło
Separator to znak lub ciąg znaków, których użyjesz do poinformowania klienta MySQL, że zakończyłeś wpisywanie instrukcji Sql.
źródło
Definiujesz DELIMITER, aby poinformować klienta mysql, aby traktował instrukcje, funkcje, procedury składowane lub wyzwalacze jako całą instrukcję. Zwykle w pliku .sql ustawia się inny DELIMITER, np. $$. Polecenie DELIMITER służy do zmiany standardowego separatora poleceń MySQL (tj.;). Ponieważ instrukcje w ramach procedur (funkcji, procedur składowanych lub wyzwalaczy) kończą się średnikiem (;), aby traktować je jako instrukcję złożoną, używamy DELIMITER. Jeśli nie zostanie zdefiniowany podczas używania różnych procedur w tym samym pliku lub linii poleceń, spowoduje błąd składni.
Pamiętaj, że możesz użyć różnych niezarezerwowanych znaków, aby utworzyć własny, niestandardowy separator. Należy unikać używania znaku ukośnika odwrotnego (\), ponieważ jest to znak zmiany znaczenia dla MySQL.
DELIMITER tak naprawdę nie jest poleceniem języka MySQL, jest to polecenie klienta.
Przykład
źródło
DELIMITER, aby poinformować klienta mysql, aby traktował instrukcje, funkcje, procedury składowane lub wyzwalacze jako całą instrukcję. Zwykle w. sql, ustawisz inny DELIMITER, na przykład $$. Polecenie DELIMITER służy do zmiany standardowego separatora poleceń MySQL
źródło
Separator to znak w języku SQL, który służy do oddzielania elementów danych w bazie danych. Określa początek i koniec ciągu znaków. Ogólnie separatorem używanym w SQL jest „;”.
źródło