1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Trigger kann Tabelle nicht Updaten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Th3RaZe, 28 Dezember 2017.

  1. Th3RaZe

    Th3RaZe Aktiver Benutzer

    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.
     
  2. Kampfgummibaerlie

    Kampfgummibaerlie Datenbank-Guru

    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.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  4. Th3RaZe

    Th3RaZe Aktiver Benutzer

    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.
     
  5. Th3RaZe

    Th3RaZe Aktiver Benutzer

    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.
     
Die Seite wird geladen...

Diese Seite empfehlen