Estou perdendo alguma coisa sobre o uso de transações com o MySQL. Eu tenho um script que exclui dados de dados de algumas tabelas e, em seguida, insere dados nessas tabelas. Eu quero reverter tudo (exclusões e inserções concluídas) se houver algum erro. Eu li os documentos do MySQL sobre o assunto e eu entendo que usar START TRANSACTION
desabilitará a confirmação automática, mas quando propositalmente causar um erro no meu script, as alterações não serão revertidas (isto é, a transação não está fazendo o que eu esperava).
Encontrei esta pergunta (e outras semelhantes), mas todos eles usam procedimentos armazenados. Eu não quero usar sprocs, eu tenho um arquivo * .sql que eu executo em SQLyog (ferramenta de gerenciamento MySQL), apenas um grupo de declarações.
Aqui está uma versão reduzida do script em que estou trabalhando:
-- Start the transaction
START TRANSACTION;
-- Delete all the table data
-- All other qb_* tables are deleted by CASCADING DELETEs
DELETE FROM 'manfstudio_dev'.'qb_items';
DELETE FROM 'manfstudio_dev'.'qb_inventory_sites';
-- Insert Inventory Site records
INSERT INTO 'manfstudio_dev'.'qb_inventory_sites' ('site_id', 'name') VALUES ('80000002-1477203394', 'CA-Orange');
INSERT INTO 'manfstudio_dev'.'qb_inventory_sites' ('site_id', 'name') VALUES ('80000001-1476941342', 'Drop Ship');
-- Insert Item records
INSERT INTO 'manfstudio_dev'.'qb_items' ('item_id', 'name', 'item_number_type', 'type') VALUES ('8000000A-1484095135', '- Internal Labor -', 'NONE', 'Service');
-- The following insert will throw an exception
INSERT INTO 'manfstudio_dev'.'qb_items' ('item_id', 'name', 'item_numffffber_type', 'type') VALUES ('80000024-1484102389', 'General Device Assembly Labor', 'NONE', 'Service');
INSERT INTO 'manfstudio_dev'.'qb_items' ('item_id', 'name', 'item_number_type', 'type') VALUES ('80000009-1483733754', 'Miscellaneous', 'NONE', 'Service');
-- Commit the transaction
COMMIT;