<?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>The WebDevil &#187; SQL</title>
	<atom:link href="http://dmitry.shaposhnik.name/category/sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://dmitry.shaposhnik.name</link>
	<description>Enjoy development</description>
	<lastBuildDate>Mon, 24 May 2010 01:29:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dump mysql db from php (hack) and capture STDERR</title>
		<link>http://dmitry.shaposhnik.name/2007/05/02/dump-mysql-db-from-php-hack-and-capture-stderr/</link>
		<comments>http://dmitry.shaposhnik.name/2007/05/02/dump-mysql-db-from-php-hack-and-capture-stderr/#comments</comments>
		<pubDate>Wed, 02 May 2007 16:38:11 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/05/02/dump-mysql-db-from-php-hack-and-capture-stderr/</guid>
		<description><![CDATA[Сразу скажу: решение не пройдет на всех хостингах, потому как вызывать сторонние процессы или shell-команды может быть запрещено настройками сервера!
Быстрое и простое решение было таким:

$out = exec_cmd&#40;&#34;mysqldump -Q -u '$[db_user'
&#160; --password='$db_pass' $db_name &#34;
&#160; .&#40;isset&#40;$db_tables&#41;?$db_tables:''&#41;
&#160; .&#34; &#124; bzip2 --best -f &#62; $db_name.sql.bz2&#34;&#41;;
Что есть exec_cmd:
function exec_cmd &#40;$cmd&#41; &#123;
&#160; &#160; $out = '';
&#160; &#160; $error = '';

&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Сразу скажу: решение не пройдет на всех хостингах, потому как вызывать сторонние процессы или shell-команды может быть запрещено настройками сервера!</p>
<p>Быстрое и простое решение было таким:<br />
<span id="more-109"></span></p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$out</span> <span style="color: #339933;">=</span> exec_cmd<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;mysqldump -Q -u '$[db_user'<br />
&nbsp; --password='<span style="color: #006699; font-weight: bold;">$db_pass</span>' <span style="color: #006699; font-weight: bold;">$db_name</span> &quot;</span><br />
&nbsp; <span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$db_tables</span><span style="color: #009900;">&#41;</span>?<span style="color: #000088;">$db_tables</span><span style="color: #339933;">:</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; | bzip2 --best -f &gt; <span style="color: #006699; font-weight: bold;">$db_name</span>.sql.bz2&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Что есть <tt>exec_cmd</tt>:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> exec_cmd <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$out</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$descriptorspec</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;">0</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pipe'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;">1</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pipe'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #cc66cc;">2</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'pipe'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$resource</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/proc_open"><span style="color: #990000;">proc_open</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #339933;">,</span> <span style="color: #000088;">$descriptorspec</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pipes</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_resource"><span style="color: #990000;">is_resource</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$stdin</span>&nbsp; <span style="color: #339933;">=</span> <span style="color: #000088;">$pipes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$stdout</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pipes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$stderr</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pipes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <a href="http://www.php.net/feof"><span style="color: #990000;">feof</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stdout</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$out</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/fgets"><span style="color: #990000;">fgets</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stdout</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <a href="http://www.php.net/feof"><span style="color: #990000;">feof</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stderr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$error</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/fgets"><span style="color: #990000;">fgets</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stderr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stdin</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stdout</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/fclose"><span style="color: #990000;">fclose</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$stderr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$exit_code</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/proc_close"><span style="color: #990000;">proc_close</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'out'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$out</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'error'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$error</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'code'</span><span style="color: #339933;">=&gt;</span><span style="color: #000088;">$exit_code</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Нужно это для того чтобы полностью перехватить STDOUT, STDERR ну и STDIN. Эта фнукция описана в коментах на php.net, только там у пайпа STDERR стоит режим на чтение а не на запись, из-за чего пример не работал.<br />
Ну и соответственно получить результат выполнения можно как</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$out</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'out'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #000088;">$log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Log</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Backup DB (binary, STDOUT): <span style="color: #006699; font-weight: bold;">$out[out]</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$out</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #000088;">$log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Log</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Backup DB (binary, STDERR): <span style="color: #006699; font-weight: bold;">$out[error]</span>&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'error'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$log</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Log</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Binary DB backup is over.&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'info'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>где объект $log служит для протоколирования разных сообщений.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/05/02/dump-mysql-db-from-php-hack-and-capture-stderr/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rails and MySQL and UTF8</title>
		<link>http://dmitry.shaposhnik.name/2007/04/15/rails-and-mysql-and-utf8/</link>
		<comments>http://dmitry.shaposhnik.name/2007/04/15/rails-and-mysql-and-utf8/#comments</comments>
		<pubDate>Sun, 15 Apr 2007 14:32:56 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[RoR]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2007/04/15/rails-and-mysql-and-utf8/</guid>
		<description><![CDATA[Итак, есть проект. В нем порядка 70 миграций. В них никто не задумывался о UTF8, потому при создании таблиц по дефолту создаются они с collation = latin1_general_ci. После чего русский выводится как &#8220;????&#8221;.
Смог полечить следующим образом: в файле /etc/mysql/my.cnf прописать
set-variable=default-character-set=utf8
set-variable=default-collation=utf8_general_ci
Все таблицы создались как положено в UTF8, я счастлив.
]]></description>
			<content:encoded><![CDATA[<p>Итак, есть проект. В нем порядка 70 миграций. В них никто не задумывался о UTF8, потому при создании таблиц по дефолту создаются они с collation = latin1_general_ci. После чего русский выводится как &#8220;????&#8221;.</p>
<p>Смог полечить следующим образом: в файле /etc/mysql/my.cnf прописать</p>
<div class="codecolorer-container ruby default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="ruby codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">set<span style="color:#006600; font-weight:bold;">-</span>variable=default<span style="color:#006600; font-weight:bold;">-</span>character<span style="color:#006600; font-weight:bold;">-</span>set=utf8<br />
set<span style="color:#006600; font-weight:bold;">-</span>variable=default<span style="color:#006600; font-weight:bold;">-</span>collation=utf8_general_ci</div></div>
<p>Все таблицы создались как положено в UTF8, я счастлив.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2007/04/15/rails-and-mysql-and-utf8/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ошибка InnoDB #121</title>
		<link>http://dmitry.shaposhnik.name/2006/05/07/%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-innodb-121/</link>
		<comments>http://dmitry.shaposhnik.name/2006/05/07/%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-innodb-121/#comments</comments>
		<pubDate>Sat, 06 May 2006 23:01:33 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2006/05/07/%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-innodb-121/</guid>
		<description><![CDATA[См. предыдущий пост, там приведен пример.

А теперь об ограничениях еще раз. У каждого ограничения задается имя. Например, CONSTRAINT `Ref_02`. И это имя должно быть УНИКАЛЬНЫМ во всей БД.
Чтобы посмотреть, почему что-то не работает при вставках/удалениях, да еще и ругается на то, что это ошибка InnoDB, можно посмотреть  используя команду
show innodb status;
из консоли mysql (вероятно, [...]]]></description>
			<content:encoded><![CDATA[<p><em>См. предыдущий пост, там приведен пример.<br />
</em></p>
<p>А теперь об ограничениях еще раз. У каждого ограничения задается имя. Например, CONSTRAINT `Ref_02`. И это имя должно быть УНИКАЛЬНЫМ во всей БД.</p>
<p>Чтобы посмотреть, почему что-то не работает при вставках/удалениях, да еще и ругается на то, что это ошибка InnoDB, можно посмотреть  используя команду</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=SHOW"><span style="color: #990099; font-weight: bold;">show</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=INNODB"><span style="color: #990099; font-weight: bold;">innodb</span></a> <a href="http://search.mysql.com/search?site=refman-%35%31&amp;q=STATUS"><span style="color: #990099; font-weight: bold;">status</span></a><span style="color: #000033;">;</span></div></div>
<p>из консоли mysql (вероятно, сделав SQL-запрос через phpmyadmin тоже пройдет, но меня это не сильно интересовало).</p>
<p>А вот пример проблемы и указатель на ее решение.</p>
<p>Проблема: мускуль <strong><em>ругается на ошибку error InnoDB 121</em></strong>. Что это за ошибка я так внятно и не нашел, но немного покопавшись и методом тыка нашел, почему она возникает.  Кстати, она не отображается в show innodb status. А ошибка, собственно, из-за повторения имени CONSTRAINT&#8217;a. Как я говорил, оно должно быть уникальным. И если вы получили ее, а таблицы вставить надо, надо всего лишь сменить имя CONSTRAINT&#8217;a.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2006/05/07/%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b0-innodb-121/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Экскурс в SQL</title>
		<link>http://dmitry.shaposhnik.name/2006/05/07/%d1%8d%d0%ba%d1%81%d0%ba%d1%83%d1%80%d1%81-%d0%b2-sql/</link>
		<comments>http://dmitry.shaposhnik.name/2006/05/07/%d1%8d%d0%ba%d1%81%d0%ba%d1%83%d1%80%d1%81-%d0%b2-sql/#comments</comments>
		<pubDate>Sat, 06 May 2006 22:59:51 +0000</pubDate>
		<dc:creator>dm</dc:creator>
				<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://0804team.kiev.ua/dm/blog/2006/05/07/%d1%8d%d0%ba%d1%81%d0%ba%d1%83%d1%80%d1%81-%d0%b2-sql/</guid>
		<description><![CDATA[В университете в свое время у нас был курс по БД. Опирался он на Oracle. Но принципы и поняти были совсем общие. Так вот, там нам рассказывали по &#8220;ограничения целостности БД&#8221;.
В двух словах, что это такое, а потом, как это работает в MySQL и какие ошибки при этом случаются.

Ограничения целостности позволяют поддерживать отношения между таблицами. [...]]]></description>
			<content:encoded><![CDATA[<p>В университете в свое время у нас был курс по БД. Опирался он на Oracle. Но принципы и поняти были совсем общие. Так вот, там нам рассказывали по &#8220;ограничения целостности БД&#8221;.</p>
<p>В двух словах, что это такое, а потом, как это работает в MySQL и какие ошибки при этом случаются.<br />
<span id="more-13"></span></p>
<p>Ограничения целостности позволяют поддерживать отношения между таблицами. MySQL, Oracle на то и называются СУРБД &#8211; системами управления реляционными БД. Т.е. между таблицами (сущностями) есть определенные декартовы отношения.<br />
Пример: есть таблица студентов и таблица факультетов. Условие: при удалении факультета удалить все записи студентов.</p>
<p>Другой пример: таблица &#8220;группы новостей&#8221; и &#8220;новости&#8221;. При удалении группы удалить ее новости.</p>
<p><strong>А теперь как это работает в MySQL.</strong></p>
<p>В MySQL есть различные типа таблиц. Одни хранят все значения в памяти (MEMORY), другие хранят данные без индексирования (ARCHIVE), еще одни хранят данные в текстовых БД (CSV).</p>
<p>По умолчанию мускуль использует MYISAM.</p>
<blockquote>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MyISAM</div></div>
<p>manages non-transactional tables. It provides  high-speed storage and retrieval, as well as fulltext searching capabilities.</p>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MyISAM</div></div>
<p>is supported in all MySQL configurations, and  is the default storage engine unless you have configured MySQL to use a  different one by default.</p></blockquote>
<p>Теперь обратим внимание на ключевую фразу &#8220;non-transactional tables&#8221;. Меня такой тип не устраивает. Поэтому меня заинтересовал тип InnoDB.</p>
<blockquote><p>The</p>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">InnoDB</div></div>
<p>and</p>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">BDB</div></div>
<p>storage  engines provide transaction-safe tables.</p>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">BDB</div></div>
<p>is  included in MySQL-Max binary distributions on those operating systems that  support it.</p>
<div class="codecolorer-container text default literal" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">InnoDB</div></div>
<p>is also included by default in all  MySQL 5.0 binary distributions. In source distributions, you can enable or  disable either engine by configuring MySQL as you like.</p></blockquote>
<p>В версии 5,1  обещают сделать MYISAM transaction-safe. Но пока используем InnoDB.<br />
Итак, живой пример. Есть схема БД, приведена ниже. И на основе ее сгенерирован код.</p>
<p>[mysql]</p>
<p>SET FOREIGN_KEY_CHECKS=0;</p>
<p>&#8211; Drop table news_categories</p>
<p>DROP TABLE IF EXISTS `news_categories`;</p>
<p>CREATE TABLE `news_categories`<br />
(<br />
`idcategory` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,<br />
`keyword` varchar(50) NOT NULL,<br />
`category` text,<br />
`picture` varchar(255),<br />
`visible` tinyint(1),<br />
PRIMARY KEY(`idcategory`),<br />
UNIQUE INDEX `news_keyword`(`keyword`) )<br />
TYPE=INNODB CHARACTER SET cp1251 ;</p>
<p>&#8211; Drop table news</p>
<p>DROP TABLE IF EXISTS `news`;</p>
<p>CREATE TABLE `news`</p>
<p>(`idnews` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,<br />
`title` varchar(255),<br />
`short` text,<br />
`full` text,<br />
`visible` tinyint(1),<br />
`added` datetime,<br />
`idcategory` int(11) UNSIGNED NOT NULL DEFAULT &#8216;0&#8242;,<br />
PRIMARY KEY(`idnews`),<br />
INDEX `FKIndex1`(`idcategory`),<br />
INDEX `FKIndex2`(`idcategory`),<br />
CONSTRAINT `Ref_02` FOREIGN KEY (`idcategory`)<br />
REFERENCES `news_categories`(`idcategory`) ON DELETE CASCADE ON UPDATE CASCADE )<br />
TYPE=INNODB CHARACTER SET cp1251 ;</p>
<p>SET FOREIGN_KEY_CHECKS=1;</p>
<p>[/mysql]</p>
<p>&#8230; из которого видно, что &#8220;ON DELETE CASCADE&#8221; &#8211; при удалении категории новостей будут удалены связанные с ней новости.</p>
<p>ЗЫ: для генерации использовался MircoOLAP DataBase Designer.</p>
]]></content:encoded>
			<wfw:commentRss>http://dmitry.shaposhnik.name/2006/05/07/%d1%8d%d0%ba%d1%81%d0%ba%d1%83%d1%80%d1%81-%d0%b2-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
