2016-06-23 2 views
-1

peut-on mettre un check (un peu) To-validation et d'annulation dans les cas prévus

  1. Vérifiez si les données sont commis à la base de données que lorsque l'opération est terminée avec succès.

  2. Les données doivent être annulées en cas de transactions échouées.

tel que celui-

DELIMITER $$ 

CREATE PROCEDURE `sp_fail`() 
BEGIN 
    DECLARE `_rollback` BOOL DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1; 
    START TRANSACTION; 
    UPDATE customer SET age= 20 WHERE name='stark'; 
    UPDATE customer SET age= 20 WHERE name='brian'; -- fail as there is no name as brian in the table customer 
    IF `_rollback` THEN 
     SELECT 'The transaction has failed' AS 'Result'; 
     ROLLBACK; 
    ELSE 
     SELECT 'The transaction was successful' AS 'Result'; 
     COMMIT; 
    END IF; 
END$$ 

DELIMITER ; 

sa mine version modifiée de l'une des réponses à stackoverflow itself.I Pensais d'utiliser ceci pour résoudre l'mentionnés ci-dessus points, mais quand je l'appelle procédure l'appel s'exécute avec succès mais aucune ligne n'est affectée.Pourquoi est-ce? Merci d'avance.

+0

votre question est trop vague. S'il vous plaît ajouter des détails. Comme – Drew

+1

[ce] (http://dev.mysql.com/doc/refman/5.7/en/commit.html) vous voulez dire? – PaulF

Répondre

0

Il y a des propriétés autocommit dans MySQL. Vous devez définir AUTOCOMMIT = 0 (cet ensemble le faux autocommit), après que vous pouvez émettre ou ROLLBACK à COMMIT la fin de requête en fonction de votre condition.

1. INSERT INTO table_name ...; 

2. COMMIT; -- confirm your changes 

     OR 

3. ROLLBACK; -- undo your changes