<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PHP-kurs &#187; myisam</title>
	<atom:link href="http://www.phpkurs.se/tag/myisam/feed" rel="self" type="application/rss+xml" />
	<link>http://www.phpkurs.se</link>
	<description>Lär dig PHP och MySQL på distanskurs</description>
	<lastBuildDate>Sun, 23 Oct 2011 08:35:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Transaktionssäkerhet och webbhotellet One.com</title>
		<link>http://www.phpkurs.se/mysql/transaktionssakerhet-och-webbhotellet-onecom.html</link>
		<comments>http://www.phpkurs.se/mysql/transaktionssakerhet-och-webbhotellet-onecom.html#comments</comments>
		<pubDate>Mon, 23 Mar 2009 17:36:02 +0000</pubDate>
		<dc:creator>Mattias</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[innodb]]></category>
		<category><![CDATA[myisam]]></category>
		<category><![CDATA[tabellformat]]></category>
		<category><![CDATA[transaktioner]]></category>

		<guid isPermaLink="false">http://www.phpkurs.se/?p=110</guid>
		<description><![CDATA[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&#8230; Transaktionssäkerhet Transaktionssäkerhet är en funktion som man bland annat [...]]]></description>
			<content:encoded><![CDATA[<p>Jag håller på med ett uppdrag åt en kund som har plats på <a class="external" rel="nofollow" href="http://www.one.com/init.do?locale=sv_SE" target="_blank">One.com</a> (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&#8230;</p>
<p><strong>Transaktionssäkerhet</strong><br />
Transaktionssäkerhet är en funktion som man bland annat kan använda med MySQL tabeller om man ger dem formatet <a title="InnoDB på WikiPedia" href="http://en.wikipedia.org/wiki/InnoDB" target="_blank">InnoDB</a> istället för det vanligare <a title="MyIsam på WikiPedia" href="http://en.wikipedia.org/wiki/MyISAM" target="_blank">MyISAM</a>. Transaktionssäkerhet innebär att du kan genomföra en rad databasfrågar och om någon slår fel ut kan &#8221;rulla tillbaka&#8221; dem, det vill säga <strong>ångra</strong> allt. Exempel:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// koppla till mysql</span>
<span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'user'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'pass'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// välj databas</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dbname'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// skicka en fråga för att starta transaktionssäkerhet</span>
<span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'START TRANSACTION'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// kör lite frågor, här radera användare och dess bilder</span>
<span style="color: #000088;">$user_delete</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'DELETE FROM users WHERE user_id = 2'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$user_image_delete</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'DELETE FROM images WHERE image_user = 2'</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// om frågorna lyckades</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$user_delete</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$user_image_delete</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// genomför databasfrågorna</span>
  <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'COMMIT'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// eller ångra</span>
<span style="color: #009900;">&#125;</span>  <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ROLLBACK'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">mysql_close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>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.</p>
<p>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&#8230; de bara ligger i systemet utan att visas. Perfekt läge att kunna backa/ångra alla ändringarna.</p>
<p>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.</p>
<p><span style="color: #999999;">(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)</span>.</p>
<div class="bloggar-se">Läs även andra bloggares åsikter om <a href="http://bloggar.se/om/php" rel="tag">php</a>, <a href="http://bloggar.se/om/mysql" rel="tag">mysql</a>, <a href="http://bloggar.se/om/databas" rel="tag">databas</a>, <a href="http://bloggar.se/om/innodb" rel="tag">innodb</a>, <a href="http://bloggar.se/om/myisam" rel="tag">myisam</a>, <a href="http://bloggar.se/om/kurser" rel="tag">kurser</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.phpkurs.se/mysql/transaktionssakerhet-och-webbhotellet-onecom.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

