MySql procédures stockées, les transactions et les restaurations

Je ne peux pas trouver une façon optimale d'utiliser les transactions dans une base de données MySql Procédure Stockée. Je veux ROLLBACK si quelque chose échoue:

BEGIN

    SET autocommit=0;
    START TRANSACTION;

    DELETE FROM customers;
    INSERT INTO customers VALUES(100);
    INSERT INTO customers VALUES('wrong type');

    COMMIT;
END

1) Est autocommit=0 nécessaire?

2) Si le deuxième INSERT des pauses (et il le fait bien sûr) la première INSERT n'est pas annulée. La procédure continue simplement vers le bas pour le COMMIT. Comment puis-je éviter cela?

3) j'ai trouvé que je peux DECLARE HANDLER, devrais-je utiliser cette instruction ou est-il un moyen plus simple de dire que si une commande échoue, la procédure stockée doit ROLLBACK et aussi échouer?

DECLARE HANDLER fonctionne très bien, mais depuis j'ai la version de MySql 5.1 je ne peux pas utiliser RESIGNAL. Donc, si une erreur se produit, l'appelant ne sera pas notifié:

DECLARE EXIT HANDLER FOR SQLEXCEPTION 
BEGIN
    ROLLBACK; 
    -- RESIGNAL; not in my version :(
END;

START TRANSACTION;

OriginalL'auteur vulkanino | 2010-09-29