Au cours des derniers jours, j'ai essayé d'écrire une procédure stockée dans MySQL et j'ai un peu de temps pour la faire fonctionner. Espérons que quelqu'un ici peut me donner une entrée :)Essayer d'apprendre MySQL et les transactions
L'exemple que je poste est pour le fournisseur d'adhésion asp.Net pour créer un nouvel utilisateur. Je m'attends à envoyer un courriel et un mot de passe à la base de données et à obtenir un retour int pour vérifier que l'utilisateur a été enregistré dans la base de données.
J'utilise une base de données MySQL DB 5.1 (je pense) et écris le SQL sur une interface web.
J'ai 2 questions latérales, quelqu'un peut-il expliquer cela aussi :): 1) J'utilise un DELIMITER, mais je ne sais pas ce qu'il fait. 2) Je ne suis pas sûr de devoir faire autre chose que de mettre autocommit = 0 pour que les transactions fonctionnent, ou même si je dois le faire.
Je sais que j'aurais pu utiliser une instruction IF/ELSE au lieu d'une transaction, mais je voudrais le faire avec un pour savoir comment cela fonctionne. (Je pense à l'utiliser beaucoup d'hôtels plus tard)
Le code que je ne peux pas travailler:
DELIMITER //
CREATE DEFINER=`websharp_dk`@`%` PROCEDURE `CreateUser`(
IN _username VARCHAR(100),
IN _Password VARCHAR(100))
RETURNS INT
BEGIN
SET autocommit = 0;
DECLARE return_value INT;
BEGIN TRY
START TRANSACTION
INSERT INTO User
(Email
,Password
,Failed_Password_Count
,Creation_Date)
VALUES
(_username
,_Password
,0
,Datetime.Now())
SET return_value = 1;
COMMIT;
END TRY
BEGIN CATCH
ROLLBACK
SET return_value = 0;
END CATCH
BEGIN FINALLY
RETURN return_value;
END FINALLY
END//
DELIMITER ;
Edit: Le message d'erreur que je reçois est:
Vous pourriez vouloir écrire un titre plus significatif pour votre question. –
Quelle est l'erreur? Vous n'avez jamais besoin d'envelopper une seule action dans une transaction, dans ce cas la transaction ne fait rien du tout. –
Changé le titre dans un essai pour mieux décrire le problème. – Jorn