2009-08-28 17 views

Odpowiedz

50

Zmienia ogranicznik instrukcji z ; na //. To jest tak, że możesz napisać ; w definicji wyzwalacza, a klient MySQL nie interpretuje tego w ten sposób, ponieważ oznacza to, że skończyłeś.

Pamiętaj, że podczas cofania się jest DELIMITER ;, a nie DELIMITER;, tak jak widziałem, jak ludzie próbują to zrobić.

+0

Czy jest to składnia mysql lub polecenie powłoki mysql? – nafg

+0

Polecenie powłoki mysql –

13

W języku SQL zamykasz każdą instrukcję ogranicznikiem, domyślnie średnikiem (;). W wyzwalaczu trzeba napisać wiele instrukcji, z których każda kończy się średnikiem. Aby powiedzieć MySQL, że te średniki nie są końcem Twojej instrukcji wyzwalacza, tymczasowo zmienisz separator; do //, więc MySQL będzie wiedział, że instrukcja wyzwalacza kończy się tylko wtedy, gdy ecnexnters jest //.

1

Przeczytaj (ummmm) mysql documentation.

delimiter to znacznik końca każdego polecenia wysyłanego do klienta wiersza poleceń mysql.

delimiter jest nie tylko związana z wyzwalaczami, ale definiowanie wyzwalaczy i procedur przechowywanych jest jednym z bardzo użytecznych przypadków, ponieważ chcesz, aby zawierały one średniki (;), które w przeciwnym razie są domyślne delimiter.

1

Proste ustawia koniec ogranicznika instrukcji (; średnik w standardowym, domyślnym języku SQL). Zmiana znaku może być przydatna, jeśli chcesz użyć kodu ; w swoim SQL lub używasz wbudowanego SQL (gdzie może to prowadzić do pomyłek). podobnie przykład // w twoim przykładzie może doprowadzić do zamieszania we wbudowanym SQL lub możesz użyć go w swoim SQL. Oznacza to, że należy użyć parametru DELIMITER, aby ustawić ogranicznik odpowiedni dla danej aplikacji i potrzeb.

0

Dodaj przykład:
Podczas pracy z komendą powłoki mysql używaliśmy ogranicznika ; do zamykania każdej instrukcji. Jednak w przypadku, gdy chcemy zbudować procedury i wyzwalacze sklepu, musimy dodać również średnik ; w tych instrukcjach.

> delimiter // 
> create trigger log_students after insert on students 
> for each row 
> begin 
> insert into log_students(change_by, change_at) values(USER(), NOW()); 
> end// 
> delimiter ;