Je suis vraiment mauvais en SQL, mais j'essaie de garder ma base de données simple et minimaliste que possible. Ne pas dupliquer les valeurs mais utiliser des références et des id à la place.# 1442 - Impossible de mettre à jour la table '*' dans la fonction/trigger stockée car elle est déjà utilisée par une instruction qui a invoqué cette fonction/déclencheur
Maintenant, après avoir inséré une requête que j'obtiens l'erreur
1442 - Impossible de mettre à jour la table « signé » en fonction/déclencheur stocké car il est déjà utilisé par une déclaration qui a invoqué cette fonction stockée/déclencheur
La requête peut être insérée lorsque le déclencheur est désactivé. Mais ma requête ne lit que les utilisateurs de la table, donc il ne devrait pas y avoir de conflit. J'ai lu quelque chose au sujet de l'interblocage - la requête verrouille la table en l'utilisant ou quelque chose comme ça et donc un déclencheur ne peut pas mettre à jour une rangée? Des idées comment pourrais-je y parvenir? J'ai simplifié ma requête pour que seules les choses importantes soient présentes.
Requête:
INSERT INTO signed (time_of_start, player)
SELECT time_of_game_id, users.user_id
FROM time_of_game, users
WHERE time_of_game.time_of_start = "2017-02-01 12:00:00"
AND users.steamid = "123456789";
Trigger:
CREATE TRIGGER `payment_for_joining`
AFTER INSERT ON `signed`
FOR EACH ROW
UPDATE users
SET users.credit = users.credit-1
WHERE users.user_id = NEW.player
Oui, j'espérais juste pouvoir faire 2 opérations avec seulement une requête/requête. Mais je vais prendre un pourboire du programmeur plus expérimenté, j'utilise votre solution :) Merci – Vergil333