<?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>@blog.justoneplanet.info &#187; MySQL</title>
	<atom:link href="http://blog.justoneplanet.info/category/computer/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.justoneplanet.info</link>
	<description>日々勉強</description>
	<lastBuildDate>Wed, 08 Feb 2012 02:57:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CakePHPとMySQLのON UPDATE CURRENT_TIMESTAMPを使う</title>
		<link>http://blog.justoneplanet.info/2011/05/08/cakephp%e3%81%a8mysql%e3%81%aeon-update-current_timestamp%e3%82%92%e4%bd%bf%e3%81%86/</link>
		<comments>http://blog.justoneplanet.info/2011/05/08/cakephp%e3%81%a8mysql%e3%81%aeon-update-current_timestamp%e3%82%92%e4%bd%bf%e3%81%86/#comments</comments>
		<pubDate>Sun, 08 May 2011 14:07:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=4275</guid>
		<description><![CDATA[CakePHPにおいてON UPDATE CURRENT_TIMESTAMPを使用すると、文字列としてCURRENT_TIMESTAMPを格納しようとするので、MySQL側でTIMESTAMPとして処理できない。以下のよ [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHPにおいてON UPDATE CURRENT_TIMESTAMPを使用すると、文字列としてCURRENT_TIMESTAMPを格納しようとするので、MySQL側でTIMESTAMPとして処理できない。以下のようにすることで対処できる。</p>
<h3>■CURRENT_TIMESTAMP</h3>
<p>modifiedというカラム名をつければCakeが自動的に更新日時をセットするので必ずしもON UPDATE CURRENT_TIMESTAMPをセットする必要はない。</p>
<h3>■saveメソッド</h3>
<p>習慣とは恐ろしい物で付けたい物は付けたいのだ。saveメソッドで保存するカラムを指定することで対処できる。</p>
<pre class="brush: php;">
$this-&gt;User-&gt;save($this-&gt;data, true, array('name', 'birthday'));
</pre>
<p>上述のようにすることで$this->dataにあらゆるキーとそれに紐付く値が格納されていても、保存されるのはnameカラムとbirthdayカラムのみである。これはアプリケーションをセキュアにする目的でも使用できるので、常時使用することをお勧めする。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2011/05/08/cakephp%e3%81%a8mysql%e3%81%aeon-update-current_timestamp%e3%82%92%e4%bd%bf%e3%81%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLでテーブルをコピーする</title>
		<link>http://blog.justoneplanet.info/2011/03/27/mysql%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e3%82%b3%e3%83%94%e3%83%bc%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2011/03/27/mysql%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e3%82%b3%e3%83%94%e3%83%bc%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 15:32:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=4166</guid>
		<description><![CDATA[忘れてしまうのでメモしておく。 CREATE TABLE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table; これは以下のよう [...]]]></description>
			<content:encoded><![CDATA[<p>忘れてしまうのでメモしておく。</p>
<pre class="brush: sql;">
CREATE TABLE new_table LIKE old_table;
INSERT INTO new_table SELECT * FROM old_table;
</pre>
<p>これは以下のように異なったDB間でも行うことができる。</p>
<pre class="brush: sql;">
CREATE TABLE new_table LIKE `old_database`.`old_table`;
INSERT INTO new_table SELECT * FROM `old_database`.`old_table`;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2011/03/27/mysql%e3%81%a7%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e3%82%b3%e3%83%94%e3%83%bc%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLで正規表現検索をする</title>
		<link>http://blog.justoneplanet.info/2010/10/08/mysql%e3%81%a7%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be%e6%a4%9c%e7%b4%a2%e3%82%92%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/10/08/mysql%e3%81%a7%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be%e6%a4%9c%e7%b4%a2%e3%82%92%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 05:40:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=4491</guid>
		<description><![CDATA[SELECT * FROM `tbl` WHERE `text` REGEXP '^[a-zA-Z0-9]+$';]]></description>
			<content:encoded><![CDATA[<pre class="brush: sql;">
SELECT * FROM `tbl` WHERE `text` REGEXP '^[a-zA-Z0-9]+$';
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/10/08/mysql%e3%81%a7%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be%e6%a4%9c%e7%b4%a2%e3%82%92%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysqliを使ってPHPでMySQLにSSLで接続する</title>
		<link>http://blog.justoneplanet.info/2010/09/09/mysqli%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6php%e3%81%a7mysql%e3%81%abssl%e3%81%a7%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/09/09/mysqli%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6php%e3%81%a7mysql%e3%81%abssl%e3%81%a7%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 18:31:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=3017</guid>
		<description><![CDATA[MySQLサーバがクライアントとは別のコンピュータにある場合、ネットワークを平文で流れるデータを途中でキャプチャされる可能性がある。そこでSSL接続することにする。 ■ソース 以下のように、リソースを生成後にmysqli [...]]]></description>
			<content:encoded><![CDATA[<p>MySQLサーバがクライアントとは別のコンピュータにある場合、ネットワークを平文で流れるデータを途中でキャプチャされる可能性がある。そこでSSL接続することにする。</p>
<h3>■ソース</h3>
<p>以下のように、リソースを生成後にmysqli_ssl_setでSSLをセットしてから、mysqli_real_connectを使って接続する。</p>
<pre class="brush: php;">
$dbh   = mysqli_init();
$isSSL = @ mysqli_ssl_set(
    $dbh,
    '/home/ssl/key.pem',
    null,
    null,
    null,
    null
);
$isConnected = @ mysqli_real_connect(
    $dbh,
    DB_HOST,
    DB_USER,
    DB_PASS,
    DB_NAME,
    DB_PORT,
    null,
    MYSQLI_CLIENT_SSL
);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/09/09/mysqli%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6php%e3%81%a7mysql%e3%81%abssl%e3%81%a7%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQLサーバーをインストールして初期設定をする</title>
		<link>http://blog.justoneplanet.info/2010/08/29/mysql%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%a6%e5%88%9d%e6%9c%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/08/29/mysql%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%a6%e5%88%9d%e6%9c%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 09:46:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2957</guid>
		<description><![CDATA[■インストール yum install mysql-server PHPから使う場合は以下のようにphp-mysqlもインストールする。 yum install php-mysql MySQLにアクセスする。 mysql [...]]]></description>
			<content:encoded><![CDATA[<h3>■インストール</h3>
<pre class="brush: bash;">
yum install mysql-server
</pre>
<p>PHPから使う場合は以下のようにphp-mysqlもインストールする。</p>
<pre class="brush: bash;">
yum install php-mysql
</pre>
<p>MySQLにアクセスする。</p>
<pre class="brush: bash;">
mysql -u root
</pre>
<h3>■パスワード</h3>
<p>アクセスできるのは良いんだがパスワードが設定されてないのはイカン。（･ε･)</p>
<pre class="brush: bash;">
SET PASSWORD FOR root@localhost=PASSWORD('fugafuga');
</pre>
<h3>■データベース</h3>
<p>ちょっとデータベースを作ってみる。</p>
<pre class="brush: sql;">
CREATE DATABASE `sample`;
</pre>
<h3>■テーブル</h3>
<p>ちょっとテーブルを作ってみる。</p>
<pre class="brush: sql;">
USE `sample`;
CREATE TABLE  `sample`.`tbl1` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
    `name` VARCHAR( 255 ) NOT NULL ,
    PRIMARY KEY (  `id` )
) ENGINE = MYISAM ;
</pre>
<h3>■文字コード</h3>
<p>ネットで探してもなかなか適切な文献が見当たらない。凄く深いので結論だけまとめておく。</p>
<section class="kakomi">
<p>ちょっとPHPからデータを入れてみる。</p>
<pre class="brush: php;">
$dbh = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME, $dbh);
$query = &quot;INSERT INTO `tbl1`(`name`) VALUES('山田');&quot;;
$result = mysql_query($query);
</pre>
<p>phpMyAdminで見てみると以下のように文字化けする。</p>
<p><a href="/wp-content/uploads/2010/08/capture.png" rel="lightbox[2957]"><img src="/wp-content/uploads/2010/08/capture.png" alt="capture" title="capture" width="199" height="100" /></a></p>
<p>MySQLのデフォルト文字コードはlatin1になっている為だ。アプリケーション側で表示するときは特に文字化けすることはないかもしれないが、管理上は非常に面倒なのでデフォルト文字コードをutf-8にする事を強く勧める。</p>
</section>
<h4>my.cnf（my.ini）</h4>
<p>以下のようにする。</p>
<pre class="brush: bash;">
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
</pre>
<p>但しMySQLクライアントのコンパイルオプションによっては全然文字化けしまくる。従ってプログラム側での修正も必要だ。</p>
<h4>PHP</h4>
<h5>mysql_connectを使う</h5>
<p>mysql_connectを使用している場合は5.2.3以上が必須で、以下のようにクライアント側の文字コードを設定する。</p>
<pre class="brush: php;">
$dbh = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_set_charset('utf8', $dbh);
</pre>
<h5>PDOを使う</h5>
<p>PDOを使用している場合は以下のように、MySQLの設定ファイルを読み込み、ATTR_EMULATE_PREPARESをfalseにしてサーバーサイドPrepared Statementを使うようにする。</p>
<pre class="brush: php;">
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME;
$dbh = new PDO(
    $dsn,
    DB_USER,
    DB_PASS,
    array(
        PDO::MYSQL_ATTR_READ_DEFAULT_FILE =&gt; '/etc/my.cnf'
    )
);
$dbh-&gt;setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
</pre>
<p>但し、MySQL＜5.1の場合はクエリキャッシュが聞かないので注意が必要だ。現時点ではPDOでクライアント側の文字コードを指定する方法は無い。</p>
<h5>誤り</h5>
<ul>
<li>「SET NAMES utf8」クエリを発行する。</li>
<li>「skip-character-set-client-handshake」をmy.cnfに記述する。</li>
</ul>
<h5>参考</h5>
<ul>
<li><a href="http://rhiz.jp/id/171.html">PHPとSET NAMES問題のまとめ</a></li>
<li><a href="http://rhiz.jp/id/174.html">PHPでmysqlを適切に扱う方法</a></li>
<li><a href="http://blog.everqueue.com/chiba/2009/08/27/291/">mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ</a></li>
<li><a href="http://blog.ohgaki.net/set_namesa_mcb_asc">SET NAMESは禁止</a></li>
</ul>
<p>「PHP5.2.3以前」かつ「PDOを使用できない」かつ「再コンパイルできない」とき文字コードの問題を完全に解決するのは不可能とのこと。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/08/29/mysql%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%97%e3%81%a6%e5%88%9d%e6%9c%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysqldumpする</title>
		<link>http://blog.justoneplanet.info/2010/07/16/mysqldump%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/07/16/mysqldump%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 07:39:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=4319</guid>
		<description><![CDATA[■mysqldump mysqldump --no-autocommit -u root -p dbname &#62; db.dump scp -r ./db.dump user@123.123.123.123:/hom [...]]]></description>
			<content:encoded><![CDATA[<h3>■mysqldump</h3>
<pre class="brush: bash;">
mysqldump --no-autocommit -u root -p dbname &gt; db.dump
scp -r ./db.dump user@123.123.123.123:/home/db.dump
</pre>
<h4>123.123.123.123</h4>
<pre class="brush: bash;">
cd /home
mysql -u root -p --default-character-set=utf8 &lt; db.dump
</pre>
<p>50MBくらいなら10秒で終わる。</p>
<h3>■バックアップ</h3>
<p>以下のようにすることでmysqldumpを利用して定期的にデータベースをbackupできる。</p>
<pre class="brush: bash;">
#!/bin/sh
TDAY=`date +%Y%m%d`
cd /var/www/hogehoge.justoneplanet.info/app/vendors/shells
mysqldump --no-autocommit -u root --password=hogehoge dbname &gt; $TDAY.dump
</pre>
<h4>crontab</h4>
<p>以下のように記述することで、毎日1:15にバックアップが実行される。</p>
<pre class="brush: bash;">
15 1 * * * /var/www/hogehoge.justoneplanet.info/app/vendors/shells/backup.sh
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/07/16/mysqldump%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQLの性能をテストする</title>
		<link>http://blog.justoneplanet.info/2010/05/22/sql%e3%81%ae%e6%80%a7%e8%83%bd%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/05/22/sql%e3%81%ae%e6%80%a7%e8%83%bd%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sat, 22 May 2010 10:17:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2571</guid>
		<description><![CDATA[以下のようにEXPLAINしてみるとイイ。 EXPLAIN SELECT * FROM `parent` LEFT JOIN `child` ON `parent`.id = `child`.id_parent WHER [...]]]></description>
			<content:encoded><![CDATA[<p>以下のようにEXPLAINしてみるとイイ。</p>
<pre class="brush: sql;">
EXPLAIN SELECT *
    FROM  `parent`
    LEFT JOIN  `child`
    ON  `parent`.id =  `child`.id_parent
    WHERE  `parent`.id = 1
</pre>
<p>どうやらchildテーブルを全て検索してるようだ。</p>
<table>
<thead>
<tr>
<th>table</th>
<th>type</th>
<th>possible_keys</th>
<th>key</th>
<th>ref</th>
<th>rows</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td class="">parent</td>
<td class="">const</td>
<td class="">PRIMARY</td>
<td class="">PRIMARY</td>
<td class="">const</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td class="">child</td>
<td class="">ALL</td>
<td class=""><i>NULL</i></td>
<td class=""><i>NULL</i></td>
<td class=""><i>NULL</i></td>
<td align="right">311</td>
</tr>
</tbody>
</table>
<h3>■改善</h3>
<p>以下を実行してインデックスを付加し、クエリの性能を向上させる。</p>
<pre class="brush: sql;">
ALTER TABLE `child`
    ADD CONSTRAINT `fk_child_tbl_parent_tbl`
    FOREIGN KEY (`id_parent`) REFERENCES `parent` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION;
</pre>
<p>劇的だ！ヾ(＠⌒▽⌒＠)ﾉchildテーブルを1行しか検索しなくなった。</p>
<table class="data" id="table_results">
<thead>
<tr>
<th>table</th>
<th>type</th>
<th>possible_keys</th>
<th>key</th>
<th>ref</th>
<th>rows</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td class="">parent</td>
<td class="">const</td>
<td class="">PRIMARY</td>
<td class="">PRIMARY</td>
<td class="">const</td>
<td align="right">1</td>
</tr>
<tr class="even">
<td class="">child</td>
<td class="">ref</td>
<td class="">fk_child_tbl_parent_tbl</td>
<td class="">fk_child_tbl_parent_tbl</td>
<td class="">const</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
<div class="kakomi">
<h4>参考</h4>
<dl>
<dt>type</dt>
<dd>結合型。</dd>
<dd>const。テーブルに、一致するレコードが最大で 1 つ。</dd>
<dd>ref。前のテーブルのレコードの組み合わせのそれぞれに対して、インデックス値にマッチするすべてのレコードがこのテーブルから読み取られる。ref  は、『インデックスの左端の先頭部分のみが結合で使用される場合』、『インデックスが UNIQUE や PRIMARY KEY  ではない場合』に使用される。</dd>
<dd>ALL。前のテーブルのレコードの組み合わせのそれぞれに対して、フルテーブルスキャンが実行される。</dd>
<dt>possible_keys</dt>
<dd>テーブル内のレコードの検索に MySQL で使用可能なインデックスを示す。</dd>
<dt>key</dt>
<dd>MySQL が実際に使用を決定したキー（インデックス）を示す。</dd>
<dt>ref</dt>
<dd>テーブルからレコードを選択する際に key  とともに使用されるカラムまたは定数。</dd>
<dt>rows</dt>
<dd>クエリの実行に際して調べる必要があると MySQL によって判定されたレコードの数を示す。少ない方がイイ。</dd>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/05/22/sql%e3%81%ae%e6%80%a7%e8%83%bd%e3%82%92%e3%83%86%e3%82%b9%e3%83%88%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>複数テーブル同時削除</title>
		<link>http://blog.justoneplanet.info/2010/05/22/%e8%a4%87%e6%95%b0%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e5%90%8c%e6%99%82%e5%89%8a%e9%99%a4/</link>
		<comments>http://blog.justoneplanet.info/2010/05/22/%e8%a4%87%e6%95%b0%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e5%90%8c%e6%99%82%e5%89%8a%e9%99%a4/#comments</comments>
		<pubDate>Sat, 22 May 2010 09:29:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2564</guid>
		<description><![CDATA[以下のようにdelete文を使用すると、複数テーブルからレコードが削除できる。 DELETE `table`, `child`, `grandchild` FROM `table` LEFT JOIN `child` O [...]]]></description>
			<content:encoded><![CDATA[<p>以下のようにdelete文を使用すると、複数テーブルからレコードが削除できる。</p>
<pre class="brush: sql;">
DELETE
    `table`,
    `child`,
    `grandchild`
FROM
    `table`
LEFT JOIN
    `child`
ON
    `table`.id = `child`.`id_table`
LEFT JOIN
    `grandchild`
ON
    `child`.id = `grandchild`.`id_child`
WHERE
    `table`.id = 1
</pre>
<p>但し、外部キー制約でON DELETE  CASCADEを使った方が早い気がする。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/05/22/%e8%a4%87%e6%95%b0%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e5%90%8c%e6%99%82%e5%89%8a%e9%99%a4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>外部キー制約</title>
		<link>http://blog.justoneplanet.info/2010/05/22/%e5%a4%96%e9%83%a8%e3%82%ad%e3%83%bc%e5%88%b6%e7%b4%84/</link>
		<comments>http://blog.justoneplanet.info/2010/05/22/%e5%a4%96%e9%83%a8%e3%82%ad%e3%83%bc%e5%88%b6%e7%b4%84/#comments</comments>
		<pubDate>Sat, 22 May 2010 09:23:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2562</guid>
		<description><![CDATA[以下のようにする。 ALTER TABLE `child` ADD CONSTRAINT `fk_child_table_parent_table` FOREIGN KEY (`id_parent`) REFERENCE [...]]]></description>
			<content:encoded><![CDATA[<p>以下のようにする。</p>
<pre class="brush: sql;">
ALTER TABLE `child`
    ADD CONSTRAINT `fk_child_table_parent_table`
    FOREIGN KEY (`id_parent`) REFERENCES `parent` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION;
</pre>
<p>こうするとparentテーブルからレコードAを削除した時に、レコードAのidとchildテーブルのid_parentが等しいレコードが同時に削除される。</p>
<p>ちなみにid_contentsは全く同じ型でないとALTER TABLEが失敗する。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/05/22/%e5%a4%96%e9%83%a8%e3%82%ad%e3%83%bc%e5%88%b6%e7%b4%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQLのrootパスワードを設定する</title>
		<link>http://blog.justoneplanet.info/2010/02/22/mysql%e3%81%aeroot%e3%83%91%e3%82%b9%e3%83%af%e3%83%bc%e3%83%89%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/02/22/mysql%e3%81%aeroot%e3%83%91%e3%82%b9%e3%83%af%e3%83%bc%e3%83%89%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 15:03:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2412</guid>
		<description><![CDATA[インストール直後は何もパスワードが設定されていないので注意すること！ SET PASSWORD FOR root@localhost=PASSWORD('password');]]></description>
			<content:encoded><![CDATA[<p>インストール直後は何もパスワードが設定されていないので注意すること！</p>
<pre class="brush: sql;">
SET PASSWORD FOR root@localhost=PASSWORD('password');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/02/22/mysql%e3%81%aeroot%e3%83%91%e3%82%b9%e3%83%af%e3%83%bc%e3%83%89%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>特定のユーザにmysqlリモート接続を許可する</title>
		<link>http://blog.justoneplanet.info/2010/02/19/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%abmysql%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e6%8e%a5%e7%b6%9a%e3%82%92%e8%a8%b1%e5%8f%af%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/02/19/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%abmysql%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e6%8e%a5%e7%b6%9a%e3%82%92%e8%a8%b1%e5%8f%af%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 17:07:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=2404</guid>
		<description><![CDATA[その前にポート3306は初期状態では閉じられているので開ける。 iptables -I INPUT -j ACCEPT -p tcp -s x.x.x.x --dport 3306 IPはクライアント側のIP。このIPか [...]]]></description>
			<content:encoded><![CDATA[<p>その前にポート3306は初期状態では閉じられているので開ける。</p>
<pre class="brush: bash;">
iptables -I INPUT -j ACCEPT -p tcp -s x.x.x.x --dport 3306
</pre>
<p>IPはクライアント側のIP。このIPからだけ接続できる。192.168.1.%のようにワイルドカードも使えるがセキュリティには注意しなくてはならない。</p>
<pre class="brush: bash;">
GRANT ALL PRIVILEGES ON *.* to user@'192.168.1.1' IDENTIFIED BY 'password';
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/02/19/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%abmysql%e3%83%aa%e3%83%a2%e3%83%bc%e3%83%88%e6%8e%a5%e7%b6%9a%e3%82%92%e8%a8%b1%e5%8f%af%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CONSTRAINT句</title>
		<link>http://blog.justoneplanet.info/2009/09/24/constraint%e5%8f%a5/</link>
		<comments>http://blog.justoneplanet.info/2009/09/24/constraint%e5%8f%a5/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 02:49:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=1944</guid>
		<description><![CDATA[以下のようなSQLを実行すると、commentテーブルのカラムtask_idのレコードには、taskテーブルのカラムidに存在するものしか存在できない。この参照整合性制約機能は多用すると少々問題が起こることもある。 CR [...]]]></description>
			<content:encoded><![CDATA[<p>以下のようなSQLを実行すると、commentテーブルのカラムtask_idのレコードには、taskテーブルのカラムidに存在するものしか存在できない。この参照整合性制約機能は多用すると少々問題が起こることもある。</p>
<pre class="brush: sql;">
CREATE TABLE IF NOT EXISTS `comment` (
    `id` int(11) NOT NULL auto_increment,
    `task_id` int(11) default NULL,
    `description` text,
    `created_at` datetime default NULL,
    PRIMARY KEY  (`id`),
    KEY `comment_FI_1` (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `task` (
    `id` int(11) NOT NULL auto_increment,
    `title` varchar(255) default NULL,
    `description` text,
    `status_id` int(11) default NULL,
    `created_at` datetime default NULL,
    `updated_at` datetime default NULL,
    PRIMARY KEY  (`id`),
    KEY `task_FI_1` (`status_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `comment`
    ADD CONSTRAINT `comment_FK_1` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`);
</pre>
<h3>■メリットとデメリット</h3>
<h4>メリット</h4>
<ul>
<li>誤ったデータをテーブルに含めないようにできる</li>
</ul>
<h4>デメリット</h4>
<ul>
<li>データ移行時に整合性をチェックするため時間がかかる</li>
<li>テーブル設計が複雑になる（運用上の整合性の考慮）</li>
</ul>
<h3>■代替案</h3>
<p>アプリケーション側での制御。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/09/24/constraint%e5%8f%a5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

