Trigger kann Tabelle nicht Updaten

Th3RaZe

Aktiver Benutzer
Beiträge
37
Hallo,

diese Fehlermeldung kommt wenn ich INSERTe:

Code:
(SQLException) java.sql.SQLException: Can't update table 'member' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

ich habe ein wenig gegoogelt, aber alle Lösungen die ich gefunden habe ergeben keinen Sinn bei mir.

das ist mein Trigger:

Code:
CREATE DEFINER=`root`@`localhost` TRIGGER `mydatabase`.`content_AFTER_INSERT` AFTER INSERT ON `content` FOR EACH ROW
BEGIN

           UPDATE member
           SET member.points = member.points +10, member.postcountT = member.postcountT +1
         
           WHERE  member.user_id = NEW.owner;
  
END

Google meint zu dem Fehler das MySql es nicht zulässt direkt die gleiche spalte ein UPDATE zu verpassen, aber das ergibt keinen Sinn da der Trigger in der Tabelle "content" liegt und die Tabelle die ich Updaten will die Tabelle "member" ist.
 
Werbung:
Ich kenne mich bei MySQL nicht allzugut aus, aber ich glaube ich habe mal eine komplette Anleitung vom erstellen einer Trigger-Procedure und einem entsprechenden Trigger im PostgreSQL-Forum geschrieben zu haben.

Nach einer schnellen Suche, habe ich diese sogar gefunden:
Trigger-Aufstellung | Datenbank-Forum

Was mir auf jeden Fall mal "auf die Schnelle" auffällt wäre, dass mir das "Return New" abgehen würde.
Wenn das auch nicht hilft, geh mal einfach nach meiner Methode im anderen Thread nach :)

Falls das bei MySQL vollständig anders aufgebaut werden muss, entschuldige ich mich für einen solchen Post hier.

EDIT: Außerdem glaube ich, funktioniert es nicht, wenn man beides (Trigger und Function) in die Function packt, sprich du musst eine Trigger-Procedure erstellen, und entsprechend den Trigger, der diese Procedure for each row executed.
 
Vielleicht findest Du ja einen Unterschied:

Code:
[local]:5432 andreas@test=# create table x1(id int primary key, val text);
CREATE TABLE
[local]:5432 andreas@test=#* create table x2(id int, count int);
CREATE TABLE
[local]:5432 andreas@test=#* create or replace function update_x2() returns trigger as $$begin update x2 set count=count+1 where id=new.id;return new;end;$$language plpgsql;
CREATE FUNCTION
[local]:5432 andreas@test=#* create trigger trg1 after update on x1 for each row execute procedure update_x2();
CREATE TRIGGER
[local]:5432 andreas@test=#* insert into x1 values (1, 'x1');
INSERT 0 1
[local]:5432 andreas@test=#* insert into x1 values (2, 'x2');
INSERT 0 1
[local]:5432 andreas@test=#* insert into x2 values (1,0);
INSERT 0 1
[local]:5432 andreas@test=#* insert into x2 values (2,0);
INSERT 0 1
[local]:5432 andreas@test=#* update x1 set val = 'new' where id = 1;
UPDATE 1
[local]:5432 andreas@test=#* select * from x2;
 id | count
----+-------
  2 |  0
  1 |  1
(2 rows)

[local]:5432 andreas@test=#*

Ist mit PostgreSQL gemacht.
 
Das komische ist, dass ich schon andere Trigger am laufen habe, einige sind so ähnlich aufgebaut und funktionieren sehr gut, ich sehe weder einen Unterschied noch irgendeinen Fehler, ich habe alles nach Anleitung gebaut.
 
Werbung:
Hab den Fehler gefunden, ich hatte im INSERT befehl ein "SELECT thiscolumn FROM member" stehen, hab den raus genommen und einen weiteren Trigger erstellt wo ich dann dieses Select beim inserten hinzufüge, jetzt funktioniert alles.
 
Zurück
Oben