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
P粉677684876
P粉677684876 2023-09-14 21:54:36
0
1
493

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粉677684876
P粉677684876

répondre à tous (1)
P粉950128819

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

    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!