2009-07-09 9 views
14

Ce script MySQL installe plusieurs déclencheurs.Erreurs de syntaxe MySQL DELIMITER

Cela fonctionne sur une machine exécutant la communauté MySQL 5.0.51b. Sur une autre machine exécutant MySQL 14.12 Distrib 5.0.45, redhat-linux-gnu (i386) échoue, avec ce message d'erreur, qui semble être lié au DELIMITER // ... // DELIMITER; syntaxe:

ERREUR 1064 (42000) à la ligne 272: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel correspondant à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'DELIMITER; DROP TRIGGER IF EXISTS trigger_name; DELIMITER » à la ligne 1

La syntaxe de script (résumé) est:

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 

Quel est le problème avec le script, et comment puis-je corriger?

Répondre

22

Essayez

DELIMITER ; 

pas

DELIMITER; 

vous spécifiez en fait ; comme argument à la commande DELIMITER, afin de ne pas avoir l'espace il peut y avoir confondre.

+0

Je ne savais pas que, merci pour expliquer :) – Sophia

4

Vous avez besoin d'un espace entre 'DELIMITER' et ';'

DELIMITER ; 
# not: 
DELIMITER; 
0

Hmm J'ai des problèmes similaires. Je fais un mysqldump à partir de Debian Lenny en cours d'exécution 5.0.51 et essayez d'importer à OpenSolaris en cours d'exécution 5.0 et obtenez la même erreur. Et j'ai DELIMITER;

Conflit de version?

+0

Il semble être lié aux versions pour nous, d'une version travaillé sans virgule, un autre a travaillé avec seulement un point-virgule, et un autre requis un point-virgule et pas d'espace. – Sophia

2

Tout comme un add-on, pour quelqu'un d'autre:

Le séparateur est nécessaire pour permettre la définition entière à transmettre au serveur comme une seule instruction.

0

Essayez ci-dessous.

Je suis sûr que cela devrait résoudre le problème.

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; + 

De ce qui précède lorsque nous utilisons un DELIMITER. Il devrait être sous la forme de

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

Dans la version de MySql j'utilise la même erreur se produit lorsque vous utilisez la commande delimiter, mais cette version gère le séparateur « ; » pour les déclarations et le délimiteur "|" pour les procédures stockées et les fonctions, qui je pense résout le problème; essayez ceci:

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

Quelle version serait-ce? –