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 |
#2 · Zasláno: 23. 12. 2012, 14:36:11
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 |
#3 · Zasláno: 23. 12. 2012, 15:01:09 · Upravil/a: Magnus123
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 |
#4 · Zasláno: 23. 12. 2012, 16:22:28
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/ |
||
Časová prodleva: 11 let
|
0