Vecka 35, Fredag 3 September 2010 Prenumerera

Arkiv för kategori ‘MySQL’

Glöm inte funktionerna i SQL

torsdag, 28 januari, 2010

Ibland känner jag att man glömmer funktionerna i SQL (den tekniken vi använder för kommunicerar med databasen). I mycket litteratur och annat jag ser lär man sig SELECT, INSERT, UPDATE och sedan inte mycket mer. Alla operationer görs sedan i PHP-koden. Men till exempel MySQL har många inbyggda funktioner, som kan vara snabbare att använda och som sparar mycket kod.

Jag råkade här om dagen på ett inlägg av David Walsh, ”MySQL’s REPLACE is PHP’s STR_REPLACE()”, där han ersätter text med MySQLs gunktion istället för PHPs. Senast idag kunde jag använt en när jag flytta en WordPress Mu blogg till en annan server och skulle ersätta alla sökvägar (men med backup först!)

1
UPDATE mytable SET content = REPLACE(content,'kurswebben.se','phpkurs.se');

Vad händer med MySQLs framtid i Oracles regi?

tisdag, 28 april, 2009

För någon vecka sedan stod det klart att Oracle köper Sun, och därmed MySQL. MySQL är den mesta använda databasen med PHP, och vi använder den också i kursen. MySQL är släppt som fri mjukvara under GPL-licensen så att den kommer finnas kvar fri i någon variant är nog troligt, men hur kommer framtida utveckling se ut? Här kan man läser lite mer för den som vill förkovra sig:

Läs även andra bloggares åsikter om mysql, oracle, it-affärer, databaser, opensource

Transaktionssäkerhet och webbhotellet One.com

måndag, 23 mars, 2009

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).

Läs även andra bloggares åsikter om php, mysql, databas, innodb, myisam, kurser