ďťż
 
MySQL i triggery ďťż
 
MySQL i triggery
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • bajkomoda.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com