Jag håller på med ett uppdrag åt en kund som har plats på One.com (danskt billigt webbhotell som är välanvänt av svenskar). Vid en snabb överblick tänkte jag att det bara var att flytta över allt och köra på. Riktigt så lätt var det förstås inte…
Transaktionssäkerhet
Transaktionssäkerhet är en funktion som man bland annat kan använda med MySQL tabeller om man ger dem formatet InnoDB istället för det vanligare MyISAM. Transaktionssäkerhet innebär att du kan genomföra en rad databasfrågar och om någon slår fel ut kan ”rulla tillbaka” dem, det vill säga ångra allt. Exempel:
// koppla till mysql $link = mysql_connect('localhost','user','pass'); // välj databas mysql_select_db('dbname'); // skicka en fråga för att starta transaktionssäkerhet mysql_query('START TRANSACTION'); // kör lite frågor, här radera användare och dess bilder $user_delete = 'DELETE FROM users WHERE user_id = 2'; $user_image_delete = 'DELETE FROM images WHERE image_user = 2'; // om frågorna lyckades if ($user_delete && $user_image_delete) { // genomför databasfrågorna mysql_query('COMMIT'); // eller ångra } else { mysql_query('ROLLBACK'); } mysql_close();
Koden ovan är förstås inte helt bra, jag skrev så kort som möjligt för att visa principen :) Poängen är att du kan manipulera mycket relaterad data i många tabeller, utan risk för att skapa hål när en viss fråga misslyckas.
Säg att du ska radera en bildkategori i ett galleri, men när du ska flytta bilderna i den till en annan kategori så misslyckas det. Du har en massa herrelösa bilder, som inte ägs av någon kategori… de bara ligger i systemet utan att visas. Perfekt läge att kunna backa/ångra alla ändringarna.
Helst skulle jag vilja använd transaktioner jämt, men det finns nackdelar. Som jag nämnde stöds det inte av alla webbhotell. Det är också snabbare med MySQLs MyISAM-tabeller än med InnoDB, och MyISAM stödjer inte transaktioner.
(Det här är ingen kritik-aritkel mot one.com, snarare en information till de som funderar på att byta men vill använda InnoDB).

