Autor Zpráva
Magnus123
Profil
Ahoj.

Zkoušel jsem si udělat takový jednoduchý trigger:
CREATE TRIGGER insert_message_unread AFTER INSERT ON user
FOR EACH ROW
BEGIN
    INSERT INTO message_unread (id, user_id, number) VALUES (NULL, NEW.id, NULL);
END;

Hlásí mi to tuto chybu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 2 

Mohl by mi někdo, prosím, poradit, v čem je chyba?
Děkuji.

Edit:
Jedná se o databázi MySQL.
juriad
Profil
tipuji, že se mu nelíbí středník na 4. řádku - považuje ho za konec nejen insertu, ale i triggeru
viz pojednání na http://dev.mysql.com/doc/refman/5.5/en/begin-end.html
ale také můžu být úplně vedle; žádný jiný syntaktický problém nevidím
Magnus123
Profil
juriad:
Bez středníku za koncem INSERTu jsem to též zkoušel, ale chybu to bohužel nevyřeší. Vypíše to chybu:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 3



OK, tak chyba byla způsobena PHPMyAdminem. Sice nevím proč, ale když trigger vytvořím nějakou query() funkcí, tak to jde bez problému.
juriad
Profil
způsobil to tedy onen středník, protože Adminer umí vykonat více příkazů najednou; jednotlivé příkazy jsou oddělené středníkem, vykoná se tedy:
první příkaz:
CREATE TRIGGER insert_message_unread AFTER INSERT ON user
FOR EACH ROW
BEGIN
    INSERT INTO message_unread (id, user_id, number) VALUES (NULL, NEW.id, NULL)

druhý příkaz:
END

oproti tomu query umí vykonat jen jeden příkaz, nebude ho tedy dělit podle středníku a vykoná to, co ty chceš
nežádoucí chování lze obejít nastavením delimiteru, viz například http://www.sitepoint.com/how-to-create-mysql-triggers/

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0