2009-07-09 11 views
14

Ten skrypt MySQL instaluje wiele wyzwalaczy.Błędy składni MySQL DELIMITER

Działa na jednym komputerze z zainstalowaną społecznością MySQL 5.0.51b. Na innym komputerze z uruchomionym MySQL 14.12 Distrib 5.0.45, dla redhat-linux-gnu (i386) nie powiedzie się, z tym komunikatem o błędzie, który wydaje się być związany z DELIMITER // ... // DELIMITER; składnia:

BŁĄD 1064 (42000) w linii 272: Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu 'DELIMITER; DROP TRIGGER JEŚLI EXISTS trigger_name; DELIMITER”w linii 1

Składnia skryptów (zestawione) wynosi:

DROP TRIGGER IF EXISTS trigger_name; 
DELIMITER // 
CREATE TRIGGER trigger_name BEFORE UPDATE ON table 
FOR EACH ROW BEGIN 
    -- Trigger logic goes here 
END // 
DELIMITER; 

-- More trigger drop/create statements follow 

Co jest nie tak ze skryptem i jak można go poprawić?

Odpowiedz

22

Spróbuj

DELIMITER ; 

nie

DELIMITER; 

Ty faktycznie określając ; jako argument do komendy DELIMITER, więc nie mając przestrzeń może być mylące go.

+0

nie zdawałem sobie sprawy, że dzięki za wyjaśnienia :) – Sophia

4

Potrzebujesz spacji między "DELIMITER" a ";"

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm Mam podobne problemy. Robię mysqldump z Debiana Lenny z wersji 5.0.51 i próbuję importować do OpenSolaris z wersji 5.0 i otrzymuję ten sam błąd. I mam DELIMITER;

Konflikt wersji?

+0

Wydawało się być związane z wersjami dla nas, jedna wersja pracował bez średnikiem, inny pracował tylko z średnikiem, a inny Wymagany średnik i brak miejsca. – Sophia

2

tylko jako dodatek, dla kogoś innego:

Separator jest zobowiązany do umożliwienia całą definicję być przekazywane do serwera za pomocą jednej instrukcji.

0

Spróbuj poniżej.

Jestem pewien, że powinno to rozwiązać cel.

DELIMITER + 
CREATE TRIGGER STUDENT_INSERT_TRIGGER BEFORE INSERT ON FSL_CONNECTIONS 
FOR EACH ROW BEGIN 
INSERT INTO STUDENT_AUDIT 
SET STUDENT_ID = NEW.STUDENT_ID, 
MAC_ADDRESS = NEW.MAC_ADDRESS, 
IPADDRESS = NEW.IPADDRESS, 
EMAIL_ID = NEW.EMAIL_ID , 
START_TIME=NEW.START_TIME, 
END_TIME=NEW.END_TIME, 
STATUS=NEW.STATUS; 
END; + 

Z powyższego, gdy używamy DELIMITERA. Powinien on być w formie

DELIMITER + 
-- 
BLOCK OF SQL WHATEVER YOU WANT TO MENTION 
-- 
+ 
1

W wersji MySQL używam ten sam błąd występuje podczas korzystania z polecenia ogranicznika, ale ta wersja obsługuje ogranicznika „;” dla instrukcji i ogranicznika "|" dla procedur przechowywanych i funkcji, które według mnie rozwiązują problem; spróbuj tego:

DROP TRIGGER IF EXISTS trigger_name;

CREATE TRIGGER trigger_name BEFORE UPDATE ON table FOR EACH ROW BEGIN -- Trigger logic goes here END |

-- other statements or functions here

+0

Jaka to by była wersja? –

Powiązane problemy