<?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>Webdesign Informatik &#187; MySQL</title>
	<atom:link href="http://www.webdesign-informatik.de/category/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webdesign-informatik.de</link>
	<description>Internet : SEO : Programmierung : Datenbank : Linux</description>
	<lastBuildDate>Sat, 19 Nov 2011 11:11:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MySQL String-Ersetzen mit REPLACE()</title>
		<link>http://www.webdesign-informatik.de/mysql/mysql-string-ersetzen-mit-replace/</link>
		<comments>http://www.webdesign-informatik.de/mysql/mysql-string-ersetzen-mit-replace/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 07:07:31 +0000</pubDate>
		<dc:creator>Elias</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.webdesign-informatik.de/?p=401</guid>
		<description><![CDATA[Oftmals muss man eindeutig identifizierbare Strings (Zeichenketten, Text) durch einen neuen String ersetzen, die in einer MySQL-Tabellenspalte liegen. Ein harter Weg wäre, alle Werte mit PHP auslesen, in PHP mit str_replace() ersetzen und wieder in die MySQL Datenbank zu schreiben &#8211; Gott sei Dank bietet MySQL hier direkt eine REPLACE()-Funktion in den Stringfunktionen an.
In diesem Beispiel [...]]]></description>
			<content:encoded><![CDATA[<p>Oftmals muss man eindeutig identifizierbare Strings (Zeichenketten, Text) durch einen neuen String ersetzen, die in einer MySQL-Tabellenspalte liegen. Ein harter Weg wäre, alle Werte mit PHP auslesen, in PHP mit str_replace() ersetzen und wieder in die MySQL Datenbank zu schreiben &#8211; Gott sei Dank bietet MySQL hier direkt eine <a title="MySQL String Replace Funktion" href="http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_replace">REPLACE()-Funktion</a> in den <a title="MySQL String Funktionen" href="http://dev.mysql.com/doc/refman/5.1/en/string-functions.html">Stringfunktionen</a> an.<span id="more-401"></span></p>
<p>In diesem Beispiel werden HTML-Links im Text von Wordpress-Artikeln gesucht und durch einen Host im Linkziel ergänzt:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">UPDATE</span> wp_posts<br />
<span class="kw1">SET</span> post_content = <span class="kw1">REPLACE</span><span class="br0">&#40;</span>post_content, <span class="st0">&#8216;&lt;a href=&quot;/&#8217;</span>, <span class="st0">&#8216;&lt;a href=&quot;http://www.example.com/&#8217;</span><span class="br0">&#41;</span>;<br />
<span class="kw1">WHERE</span> post_content <span class="kw1">LIKE</span> <span class="st0">&#8216;%&lt;a href=&quot;/%&#8217;</span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.webdesign-informatik.de/mysql/mysql-string-ersetzen-mit-replace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Abfrage Case-Insensitive mit UTF8</title>
		<link>http://www.webdesign-informatik.de/mysql/utf8-abfrage-case-insensitive/</link>
		<comments>http://www.webdesign-informatik.de/mysql/utf8-abfrage-case-insensitive/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 16:48:23 +0000</pubDate>
		<dc:creator>Elias</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.webdesign-informatik.de/?p=327</guid>
		<description><![CDATA[Ob WHERE-Abfragen nun Großkleinschreibung beachten, kann man mit der Kollation festlegen, in der die Datenbank und die Tabellenfelder definiert werden. Die Kollation utf8_bin ist case sensitive. Für ein case insensitives Datenbankdesign kann man die Kollation utf8_general_ci verwenden, wobei das &#8220;ci&#8221; für case insensitive steht. Mit utf8_bin sind aber trotzdem ist case insensitive Abfragen möglich, man muss nur die [...]]]></description>
			<content:encoded><![CDATA[<p>Ob WHERE-Abfragen nun Großkleinschreibung beachten, kann man mit der Kollation festlegen, in der die Datenbank und die Tabellenfelder definiert werden. Die Kollation <strong>utf8_bin</strong> ist <strong>case sensitive.</strong> Für ein case insensitives Datenbankdesign kann man die Kollation <strong>utf8_general_ci</strong> verwenden, wobei das &#8220;ci&#8221; für case insensitive steht. Mit <strong>utf8_bin</strong> sind aber trotzdem ist <strong>case insensitive </strong>Abfragen möglich, man muss nur die Kollation in der Abfrage mitlifern:</p>
<div class="dean_ch" style="white-space: wrap;">COLLATE utf8_general_ci</div>
<p><span id="more-327"></span></p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">SELECT</span> * <span class="kw1">FROM</span> <span class="kw1">TABLE</span> <span class="kw1">WHERE</span> name COLLATE utf8_general_ci = <span class="st0">&#8216;Peter&#8217;</span><br />
<span class="kw1">SELECT</span> * <span class="kw1">FROM</span> <span class="kw1">TABLE</span> <span class="kw1">WHERE</span> name COLLATE utf8_general_ci <span class="kw1">LIKE</span> <span class="st0">&#8216;P%&#8217;</span></div>
<p>Generell empfehle ich jedem, für internationale Projekte immer utf8 zu verwenden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webdesign-informatik.de/mysql/utf8-abfrage-case-insensitive/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Anfänger-Tutorial für MySQL Datenbank</title>
		<link>http://www.webdesign-informatik.de/mysql/tutorial-fuer-mysql-datenbanken-erstellen/</link>
		<comments>http://www.webdesign-informatik.de/mysql/tutorial-fuer-mysql-datenbanken-erstellen/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 10:45:07 +0000</pubDate>
		<dc:creator>Elias</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.webdesign-informatik.de/?p=244</guid>
		<description><![CDATA[Lerne in diesem Artikel die ersten Schritte mit einer MySQL Datenbank umzugehen.Wissen für die Erstellung eines Datenbankdesigns ist natürlich eine essentielle Voraussetzung. Das Erstellen eines komplexen Datenbank-Designs macht man lieber mit Datenbank-Design-Tools wie die kostenlose Software MySQL Workbench. Dort kann man sich die Datenbanktabellen zusammenklicken und das Programm generiert einem Code. Kleinere und einfache Projekte [...]]]></description>
			<content:encoded><![CDATA[<p>Lerne in diesem Artikel die ersten Schritte mit einer MySQL Datenbank umzugehen.<span id="more-244"></span>Wissen für die Erstellung eines <a href="http://www.google.de/search?q=datenbankdesign">Datenbankdesigns</a> ist natürlich eine essentielle Voraussetzung. Das Erstellen eines <strong>komplexen Datenbank-Designs</strong> macht man lieber mit Datenbank-Design-Tools wie die kostenlose Software <a href="http://www.mysql.de/products/workbench/">MySQL Workbench</a>. Dort kann man sich die Datenbanktabellen zusammenklicken und das Programm generiert einem Code. Kleinere und einfache Projekte müssen mit so einer Software nicht geplant werden. Hier reicht das erstellen des Designs per Hand. Ein Online-Tool zum pflegen der Daten ist <a href="http://www.phpmyadmin.net/">phpMyAdmin</a>, das direkt auf geichen Server wie die Datenbank läuft.</p>
<p>Die ersten Schritte sollten aber noch grundlegender sein, wenn man eine Datenbank verstehen will. In dem folgendem <strong>Datenbank Tutorial</strong> ist das Arbeiten mit der MySQL Datenbank ausführlich erklärt. Im Prinzip sendet man nur Befehle, die von der Datenbank ausgewertet werden. Das Erstellen und/oder Senden der Befehle machen die obigen Tools selbstständig.</p>
<p>Lernen für den Anfang aber selbst das warten einer Datenbank: <a href="http://net.tutsplus.com/tutorials/other/sql-for-beginners/"><strong>MySQL Datenbank Tutorial</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webdesign-informatik.de/mysql/tutorial-fuer-mysql-datenbanken-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Datenbank tunen mit InnoDb und Indizes</title>
		<link>http://www.webdesign-informatik.de/mysql/mysql-datenbank-tunen-mit-innodb-und-indizes/</link>
		<comments>http://www.webdesign-informatik.de/mysql/mysql-datenbank-tunen-mit-innodb-und-indizes/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 13:32:10 +0000</pubDate>
		<dc:creator>Elias</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[DirectUrl]]></category>
		<category><![CDATA[InnoDb]]></category>
		<category><![CDATA[MySQL Tuning]]></category>
		<category><![CDATA[XT Commerce]]></category>

		<guid isPermaLink="false">http://www.webdesign-informatik.de/?p=91</guid>
		<description><![CDATA[Es sind nur ein paar Handgriffe, die Welten bewegen. Ich hatte eine SQL Abfrage mit ein paar Joins, die bei steigender Anzahl von Datensätzen bis zu 5 Minuten dauerte. Das konnte so natürlich nicht weitergehen, also hab ich kurz eine Relation mittels Fremdschlüssel in der Datenbank-Struktur realisiert und die Abfrage dauerte von nun an 2 [...]]]></description>
			<content:encoded><![CDATA[<p>Es sind nur ein paar Handgriffe, die Welten bewegen. Ich hatte eine SQL Abfrage mit ein paar Joins, die bei steigender Anzahl von Datensätzen bis zu 5 Minuten dauerte. Das konnte so natürlich nicht weitergehen, also hab ich kurz eine Relation mittels Fremdschlüssel in der Datenbank-Struktur realisiert und die Abfrage dauerte von nun an 2 Sekunden &#8211; Wahnsinn! Das Problem mit der Geschwindigkeit hatte ich übrigens auch bei jedem XT Commerce Shop mit mehreren Hundert oder Tausend Artikeln, bei dem DirectUrl für suchmaschinenfreundliche URLs installiert ist. Das Problem ist, das DirectUrl die Tabelle mit den Alias-URLs  bei jeder Änderung des Produktkatalogs, der Kategorien und der Content Seiten neu erstellt. In Bezug auf das Bearbeiten von Produkten und Kategorien können wir das Laden von 5 Minuten auf 2 Sekunden verringern.  Die folgende MySQL Code zeigt die modifizierte Tabellenstruktur mit Indizes für die DirectUrl-Alias-Tabelle.<span id="more-91"></span></p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="kw1">IF</span> <span class="kw1">NOT</span> <span class="kw1">EXISTS</span> bluegate_seo_url <span class="br0">&#40;</span><br />
&nbsp; &nbsp; url_md5 varchar<span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; &nbsp; url_text varchar<span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,<br />
&nbsp; &nbsp; products_id int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">DEFAULT</span> <span class="kw1">NULL</span>,<br />
&nbsp; &nbsp; categories_id int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">DEFAULT</span> <span class="kw1">NULL</span>,<br />
&nbsp; &nbsp; content_group int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">DEFAULT</span> <span class="kw1">NULL</span>,<br />
&nbsp; &nbsp; language_id int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="nu0">0</span>,<br />
&nbsp; &nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span>url_md5<span class="br0">&#41;</span>,<br />
&nbsp; &nbsp; <span class="kw1">KEY</span> url_text <span class="br0">&#40;</span>url_text,products_id<span class="br0">&#41;</span>,</p>
<p>&nbsp; &nbsp; <span class="kw1">INDEX</span> fk_products_description <span class="br0">&#40;</span>products_id <span class="kw1">ASC</span><span class="br0">&#41;</span> ,<br />
&nbsp; &nbsp; CONSTRAINT fk_products_description<br />
&nbsp; &nbsp; <span class="kw1">FOREIGN</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>products_id<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">REFERENCES</span> products_description <span class="br0">&#40;</span>products_id<span class="br0">&#41;</span> ,</p>
<p>&nbsp; &nbsp; <span class="kw1">INDEX</span> fk_categories_description <span class="br0">&#40;</span>categories_id <span class="kw1">ASC</span><span class="br0">&#41;</span> ,<br />
&nbsp; &nbsp; CONSTRAINT fk_categories_description<br />
&nbsp; &nbsp; <span class="kw1">FOREIGN</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>categories_id<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">REFERENCES</span> categories_description <span class="br0">&#40;</span>categories_id<span class="br0">&#41;</span> ,</p>
<p>&nbsp; &nbsp; <span class="kw1">INDEX</span> fk_languages <span class="br0">&#40;</span>language_id <span class="kw1">ASC</span><span class="br0">&#41;</span> ,<br />
&nbsp; &nbsp; CONSTRAINT fk_languages<br />
&nbsp; &nbsp; <span class="kw1">FOREIGN</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>language_id<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">REFERENCES</span> languages <span class="br0">&#40;</span>languages_id<span class="br0">&#41;</span><br />
<span class="br0">&#41;</span> ENGINE=InnoDB <span class="kw1">DEFAULT</span> CHARSET=latin1;</div>
<p>Hier wurden lediglich 3 Fremdschlüssel ergänzt, weil die Joins der Abfrage über diese Fremdschlüssel verlaufen: fk_products_description, fk_categories_description und fk_languages.</p>
<p>Wichtig ist hierbei das Stichwort <strong>InnoDb</strong>. Das Verknüpfen der Tabellen mit Fremdschlüsseln funktioniert in MySQL nur mit der Storage-Engine <a href="http://www.innodb.com/">InnoDb</a>. Also müssen alle Tabellen, die verknüpft werden sollen vom Typ InnoDb sein. In phpMyAdmin kann man dies unter Operations ändern. Ansonsten einen ALTER TABLE Befehl auf die betreffenden Tabellen ausführe. Im Falle von der DirectUrl Optimierung wären das diese hier:</p>
<div class="dean_ch" style="white-space: wrap;"><span class="kw1">ALTER</span> <span class="kw1">TABLE</span> products_description ENGINE=InnoDb;<br />
<span class="kw1">ALTER</span> <span class="kw1">TABLE</span> categories_description ENGINE=InnoDb;<br />
<span class="kw1">ALTER</span> <span class="kw1">TABLE</span> languages ENGINE=InnoDb;</div>
<p>Am saubersten ist es jedoch, die Struktur mit InnoDb neu zu erstellen und nachträglich die Datensätze mittels INSERTs einfügen.</p>
<p>So dann gehen wir noch kurz auf einen Fremdschlüsseleintrag in der Tabellenstruktur ein, hier nochmals ein Auszug aus der Struktur oben:</p>
<div class="dean_ch" style="white-space: wrap;">&nbsp; &nbsp; <span class="kw1">INDEX</span> fk_categories_description <span class="br0">&#40;</span>categories_id <span class="kw1">ASC</span><span class="br0">&#41;</span> ,<br />
&nbsp; &nbsp; CONSTRAINT fk_categories_description<br />
&nbsp; &nbsp; <span class="kw1">FOREIGN</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>categories_id<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="kw1">REFERENCES</span> categories_description <span class="br0">&#40;</span>categories_id<span class="br0">&#41;</span> ,</div>
<p>Mit INDEX wird einfach mal ein Index auf das betreffende Feld gesetzt, welches den Schlüssel für das Verknüpfen der Tabellen enthält. Mit einem CONSTRAINT hat man nun die Möglichkeit den Fremdschlüssel zu definieren. REFERENCES gibt hierbei an, in welcher Tabelle und welcher Spalte sich der Fremdschlüssel befindet. Befindet sich die Tabelle in einer anderen Datenbank, kann dies natürlich auch definiert werden. Der Name der Datenbank mit einem Punkt einfach vor dem Tabellennamen geschrieben: DBNAME.TABLENAME. In dem Beispiel ist also <em>categories_description</em> die Tabelle die wir über <em>categories_id</em> verknüpfen wollen. Also ist bluegate_seo_url.categories_id == categories_description.categories_id. Sollte dies bei einem Datensatz nicht der Fall sein, so erscheint eine Fehlermeldung. Mit den Relationen wird also zugleich für eine schöne Datenkonsistenz gesorgt.</p>
<p>PS: Indizes ist die Mehrzahl von Index.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webdesign-informatik.de/mysql/mysql-datenbank-tunen-mit-innodb-und-indizes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

