2012-02-17 4 views
0

J'ai comme déclencheur SQLite:Trigger MySQL conversion

CREATE TRIGGER update_rating AFTER UPDATE ON gameServers 
FOR EACH ROW BEGIN UPDATE gameServers 
SET rated_order=NEW.rating || '#' || NEW._address 
WHERE rowid=NEW.rowid; END; 

Aidez-moi, s'il vous plaît, avec la convertir en MySQL.

+1

Sur le côté, juste attention: http://stackoverflow.com/questions/2334478/mysql-triggers-cannot-update-rows-in-same-table-the -trigger-is-assigned-to-sugg (pas possible de manipuler des lignes autres que celle dans laquelle le déclencheur a été appelé dans les déclencheurs mysql). Pas votre problème (maintenant), mais peut-être plus tard ... et il y a de bons exemples là-bas. –

Répondre

1
CREATE TRIGGER update_rating BEFORE UPDATE ON gameServers 
FOR EACH ROW SET NEW.rated_order=CONCAT(NEW.rating,' # ',NEW.address); 

DE COURS - cela ne fait rien ON INSERT ...

Notez que je l'ai changé de AFTER à AVANT (délibérément): En dehors de la question de savoir pourquoi je devrais commencer une autre mise à jour après (!) celui qui déclenche le déclencheur, il y a le problème Updating table in trigger after update on the same table Votre instruction "UPDATE" (complète) dans votre déclencheur AFTER provoquerait un déclencheur circulaire-appel-trigger-calling-trigger ... (que mysql empêcherait en refusant l'instruction) EDIT: Au début, je voulais utiliser le '||' aussi pour la concaténation de chaînes, mais ceci est MySQL et pas Oracle :)

Cela devrait fonctionner, je l'ai testé sur une de mes propres tables juste pour être sûr. Ce déclencheur est inconstant à certains moments :)

+0

Cela fonctionnera, car cela aidera à changer l'enregistrement avant de le modifier. – Devart

+0

@ Mörre Vous avez raison sur l'opérateur de concaténation ||, mais vous pouvez configurer le serveur mysql pour qu'il l'accepte dans le formulaire || comme oracle faire.Juste de noter :) – rkosegi

+0

Cool, merci, ne le savais pas. Je ne vais pas l'utiliser cependant, avec le logiciel et le matériel, j'essaie toujours d'utiliser les "défauts" - donc pas de gadgets ou trucs fantaisie sur mon écran et pas de "décorations" dans ou sur ma voiture :) Je veux savoir ce que tout le monde (et puisque je suis un pigiste, aucun sentiment de perte quand je vais au prochain client). –