MySQL i triggery
Dariusz Rodziewicz - 10-02-2007 00:02
MySQL i triggery
Witam
Nie wiem co robię źle. Stworzyłem trigger na bazie danych MySQL 5.0.26
create trigger test after insert on tabela for each row insert into tabela(kolumna) values (user());
Trigger został pięknie założony, co można było sprawdzić w bazie information_schema w tabeli triggers. Następnie po wykonaniu polecenia insert otrzymuję następujący komunikat:
ERROR 1442 (HY000): Can't update table 'sl_user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Gdzie popełniłem błąd ??? Aha, trigger zakładałem zgodnie ze wskazówkami zawartymi na stronie: http://gryf.mif.pg.gda.pl/~mate/wykl.../triggery.html
Darek
Maciek Dobrzanski - 10-02-2007 00:02
In news:eqiqui$5r9$1@nemesis.news.tpi.pl, Dariusz Rodziewicz <radziwil@no-spam.wp.pl> typed: > > ERROR 1442 (HY000): Can't update table 'sl_user' in stored > function/trigger because it is already used by statement which > invoked this stored function/trigger.
Dokładnie to co napisane w komunikacie błędu. Nie możesz używać triggera, który powoduje dodanie rekordów do tej samej tabeli, którą wykorzystują wyzwalające go kwerendy.
Maciek
Dariusz Rodziewicz - 10-02-2007 00:02
> Dokładnie to co napisane w komunikacie błędu. Nie możesz używać triggera, > który powoduje dodanie rekordów do tej samej tabeli, którą wykorzystują > wyzwalające go kwerendy. > > Maciek
Możesz jaśniej ??? Jakie kwerendy ??? Owszem w poprzednim triggerze był błąd, nie powinien być insert tylko update. Obecny trigger ma postać:
create trigger test after insert on tabela for each row update tabela set kolumna = user() where id = LAST_INSERT_ID();
po wykonaniu polecenia insert otrzymuję ten sam komunikat:
ERROR 1442 (HY000): Can't update table 'tabela' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Darek
Maciek Dobrzanski - 10-02-2007 00:02
In news:eqitst$k8a$1@atlantis.news.tpi.pl, Dariusz Rodziewicz <radziwil@no-spam.wp.pl> typed:
> Możesz jaśniej ??? Jakie kwerendy ??? Owszem w poprzednim triggerze > był błąd, nie powinien być insert tylko update. Obecny trigger ma > postać:
No te, które wyzwalają trigger (w tym przypadku INSERT ...).
> create trigger test > after insert on tabela > for each row > update tabela set kolumna = user() where id = LAST_INSERT_ID(); >
Znaczy chciałbyś tak naprawdę: CREATE TRIGGER test BEFORE INSERT ON tabela FOR EACH ROW SET NEW.kolumna = USER(); czy tak? :)
Maciek
Dariusz Rodziewicz - 10-02-2007 00:24
>> Możesz jaśniej ??? Jakie kwerendy ??? Owszem w poprzednim triggerze >> był błąd, nie powinien być insert tylko update. Obecny trigger ma >> postać: > > No te, które wyzwalają trigger (w tym przypadku INSERT ...). > >> create trigger test >> after insert on tabela >> for each row >> update tabela set kolumna = user() where id = LAST_INSERT_ID(); >> > > Znaczy chciałbyś tak naprawdę: > CREATE TRIGGER test BEFORE INSERT ON tabela FOR EACH ROW SET NEW.kolumna = > USER(); > czy tak? :) > > Maciek
Tak, to jest właśnie to o co mi chodziło. Wielkie dzięki. Teraz zaczynam dostrzegać błąd w swoim rozumowaniu.
Darek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plbajkomoda.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|