recherche

Maison  >  Questions et réponses  >  le corps du texte

Paramètres MySql et SQL avant le déclencheur de mise à jour Les mises à jour de différentes tables/colonnes ne peuvent pas mettre à jour les tables dans les fonctions/déclencheurs stockés

J'ai une table de jointure avec 2 tables (A et C) avec une relation n:m. La table de jointure (B) contient également certaines informations.

A ----- B ------ C

Dans le tableau A, j'ai une colonne when_modified que je veux toujours tenir à jour si quelque chose change. Cela devrait inclure des modifications sur le tableau B.

J'ai donc un déclencheur de pré-mise à jour sur la table B avec la requête suivante

UPDATE A SET when_modified = NOW() WHERE id = NEW.id;

Le problème est que si j'exécute maintenant une requête de mise à jour (joindre sur B), j'obtiens l'erreur suivante

Impossible de mettre à jour la table 'A' dans une fonction/déclencheur stocké car elle est déjà utilisée par une instruction qui appelle cette fonction/déclencheur stocké.

Update B vv JOIN A v on vv.id = v.id SET vv.block = 1 WHERE v.status = 'finished'

P粉677684876P粉677684876438 Il y a quelques jours576

répondre à tous(1)je répondrai

  • P粉950128819

    P粉9501288192023-09-15 09:46:17

    Vous devez réécrire l'instruction UPDATE.

    Vous ne pouvez pas mettre à jour un déclencheur, sinon cela pourrait arriver. Boucle infinie

    Mais de simples changements auront le même effet

    CREATE TABLE A (id int, status  varchar(10), when_modified  datetime)
    INSERT INTO A VALUES (1,'finished',now())
    CREATE TABLE B (id int, block int)
    INSERT INTO B VALUES(1,0)
    Update B vv JOIN A  v on vv.id = v.id SET vv.block = 1, v.when_modified = NOW()  WHERE v.status = 'finished'
    SELECT * FROM A
    id Statut quand_modifié
    1 Complet 2023-05-15 20:31:15
    SELECT * FROM B
    id Blocs
    1 1

    Violon

    répondre
    0
  • Annulerrépondre