<?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>mysql - shungo blog</title>
	<atom:link href="https://shungoblog.com/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>https://shungoblog.com</link>
	<description>しゅんごブログ</description>
	<lastBuildDate>Fri, 02 May 2025 11:20:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://shungoblog.com/wp-content/uploads/2022/04/cropped-IMG_0718-32x32.jpg</url>
	<title>mysql - shungo blog</title>
	<link>https://shungoblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://shungoblog.com/tag/mysql/feed"/>
	<item>
		<title>SequelProでER図を出力する方法</title>
		<link>https://shungoblog.com/programming/sequel-erd.html</link>
					<comments>https://shungoblog.com/programming/sequel-erd.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Sat, 25 Feb 2023 00:57:37 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[ER図]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sequel]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=2001</guid>

					<description><![CDATA[<p>目次 はじめに出力するテーブルSequelProでDotをエクスポートするGraphvizをインストールターミナルでDotをPngに変換する はじめに SequelProで接続したDBをER図に出力する方法をご紹介します [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/sequel-erd.html">SequelProでER図を出力する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">出力するテーブル</a></li><li><a href="#toc3" tabindex="0">SequelProでDotをエクスポートする</a></li><li><a href="#toc4" tabindex="0">Graphvizをインストール</a></li><li><a href="#toc5" tabindex="0">ターミナルでDotをPngに変換する</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>SequelProで接続したDBをER図に出力する方法をご紹介します。</p>
<p>Dockerで起動したDBにSequelProで接続する方法は下記の記事をご覧下さい。</p>
<p><img fetchpriority="high" decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/development-300x234.png" alt="er" width="300" height="234" class="size-medium wp-image-2021 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2023/02/development-300x234.png 300w, https://shungoblog.com/wp-content/uploads/2023/02/development.png 423w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>&nbsp;</p>

<a target="_blank" href="https://shungoblog.com/docker-mysql-sequel-pro/" title="DockerのMySQLコンテナにSequel proで接続する方法" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://shungoblog.com/wp-content/uploads/cocoon-resources/blog-card-cache/5411650c615ce76a29cab44447468719.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">DockerのMySQLコンテナにSequel proで接続する方法</div><div class="blogcard-snippet external-blogcard-snippet">docker composeで起動したのMySQLコンテナにSequel proで接続する方法をご紹介します。またSequelを使用せず、コマンドでMySQLコンテナに接続する方法もご説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://shungoblog.com/programming/docker-mysql-sequel-pro.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">shungoblog.com</div></div></div></div></a>
<h2><span id="toc2">出力するテーブル</span></h2>
<p>今回出力するのはparentテーブルとchildrenテーブルです。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create table parent (
  id bigint not null auto_increment,
  name varchar(255),
  primary key (id)
);

create table children (
  id bigint not null auto_increment,
  parent_id bigint not null,
  name varchar(255),
  primary key (id),
  foreign key (parent_id) references parent (id) on delete restrict
);</code></pre>
</div>
<p>&nbsp;</p>
<h2><span id="toc3">SequelProでDotをエクスポートする</span></h2>
<p>Sequelのファイル &gt; エクスポートを押します。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10-300x172.jpg" alt="sequel-1" width="553" height="317" class="wp-image-2019 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10-300x172.jpg 300w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10-1024x587.jpg 1024w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10-768x440.jpg 768w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10-120x68.jpg 120w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.10.jpg 1470w" sizes="(max-width: 553px) 100vw, 553px" /></p>
<p>エクスポートする形式を選択するモーダルが出ます。</p>
<p>Dotを選択してエクスポートします。今回はDesktopに出力しています。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.26-300x290.jpg" alt="sequel-2" width="476" height="460" class="wp-image-2020 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.26-300x290.jpg 300w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.26-1024x989.jpg 1024w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.26-768x742.jpg 768w, https://shungoblog.com/wp-content/uploads/2023/02/スクリーンショット-2023-02-25-9.28.26.jpg 1054w" sizes="(max-width: 476px) 100vw, 476px" /></p>
<h2><span id="toc4">Graphvizをインストール</span></h2>
<p><span><a rel="nofollow noopener external" target="_blank" href="https://graphviz.org/">Graphviz</a>はdot言語で記述されたグラフ構造を画像ファイルへ出力するツールです。</span></p>
<p>Sequelで出力してDot形式をPngに変換するために使用します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% <span>brew install graphviz</span></code></pre>
</div>
<h2><span id="toc5">ターミナルでDotをPngに変換する</span></h2>
<p>Sequelで出力した<code>development.dot</code>を<code>development.png</code>に変換します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>% dot -Tpng development.dot &gt; development.png</code></pre>
</div>
<p>そうすると、このようにER図を画像で表示することができます！</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2023/02/development-300x234.png" alt="er" width="368" height="287" class="wp-image-2021 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2023/02/development-300x234.png 300w, https://shungoblog.com/wp-content/uploads/2023/02/development.png 423w" sizes="(max-width: 368px) 100vw, 368px" /></p><p>The post <a href="https://shungoblog.com/programming/sequel-erd.html">SequelProでER図を出力する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/sequel-erd.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MySQL】 外部キー制約 (restrict / cascade / set null)</title>
		<link>https://shungoblog.com/programming/mysql-foreign-key-constraint.html</link>
					<comments>https://shungoblog.com/programming/mysql-foreign-key-constraint.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Fri, 24 Feb 2023 12:15:31 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rails]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1987</guid>

					<description><![CDATA[<p>Railsの場合、modelでdependent: :destroyなどで指定できる外部キー制約を MySQLの場合どのようにすれば指定できるかをまとめてみました。 目次 外部キー制約の種類動作確認restrictcas [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/mysql-foreign-key-constraint.html">【MySQL】 外部キー制約 (restrict / cascade / set null)</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Railsの場合、modelで<code>dependent: :destroy</code>などで指定できる外部キー制約を</p>
<p>MySQLの場合どのようにすれば指定できるかをまとめてみました。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">外部キー制約の種類</a></li><li><a href="#toc2" tabindex="0">動作確認</a><ol><li><a href="#toc3" tabindex="0">restrict</a></li><li><a href="#toc4" tabindex="0">cascade</a></li><li><a href="#toc5" tabindex="0">set null</a></li></ol></li><li><a href="#toc6" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">外部キー制約の種類</span></h2>
<p>まずは外部キー制約の種類です。</p>
<div class="scrollable-table"><table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr style="background: #cdcdcd;">
<td style="width: 30.464%;"><strong>外部キー制約</strong></td>
<td style="width: 69.536%;"><strong>親のデータを削除した時の挙動</strong></td>
</tr>
<tr>
<td style="width: 30.464%;">restrict</td>
<td style="width: 69.536%;">エラーになる(削除できない)</td>
</tr>
<tr>
<td style="width: 30.464%;">cascade</td>
<td style="width: 69.536%;">子のデータも消える</td>
</tr>
<tr>
<td style="width: 30.464%;">set null</td>
<td style="width: 69.536%;">childrenのparent_idがnullになる</td>
</tr>
</tbody>
</table></div>
<p>&nbsp;</p>
<h2><span id="toc2">動作確認</span></h2>
<p>テーブル作成、データ挿入して、親データを削除したときにどのような挙動になるかを確認してみます。</p>
<p>parentテーブルとchildrenテーブルを作成して、</p>
<p>parentデータ1件、それに紐づくchildrenデータを2件挿入します。</p>
<h3><span id="toc3">restrict</span></h3>
<p>テーブルを作成します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create table parent (
  id bigint not null auto_increment,
  name varchar(255),
  primary key (id)
);

create table children (
  id bigint not null auto_increment,
  parent_id bigint not null,  -- NOTE: not null制約
  name varchar(255),
  primary key (id),
  foreign key (parent_id) references parent (id) on delete restrict -- NOTE: restrict制約
);</code></pre>
</div>
<p>次にデータ挿入します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>insert into parent (name) values ('name');

-- NOTE: parentに紐づくchidrenデータ
insert into children (name, parent_id) values ('children1', 1); 
insert into children (name, parent_id) values ('children2', 1);</code></pre>
</div>
<p>挿入したデータを確認します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from parent;
+----+------+
| id | name |
+----+------+
|  1 | name |
+----+------+

mysql&gt; select * from children;
+----+-----------+-----------+
| id | parent_id | name      |
+----+-----------+-----------+
|  1 |         1 | children1 |
|  2 |         1 | children2 |
+----+-----------+-----------+</code></pre>
</div>
<p>この状態でparentデータを削除してみます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; delete from parent where id = 1;
ERROR 1451 (23000): Cannot delete or update a parent row: 
a foreign key constraint fails (`development`.`children`, CONSTRAINT `children_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`))
</code></pre>
</div>
<p><span class="marker-under-red">restrictの場合は、このように外部キーのエラーが出てデータを削除することができません。</span></p>
<p>&nbsp;</p>
<h3><span id="toc4">cascade</span></h3>
<p>続いてcascadeです。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>-- NOTE: 必要に応じてテーブルを削除してください。
drop table children;
drop table parent;

-- NOTE: テーブル作成
create table parent (
  id bigint not null auto_increment,
  name varchar(255),
  primary key (id)
);

create table children (
  id bigint not null auto_increment,
  parent_id bigint not null,　-- NOTE: not null制約
  name varchar(255),
  primary key (id),
  foreign key (parent_id) references parent (id) on delete cascade　-- NOTE: cascade制約
);</code></pre>
</div>
<p>こちらも同じくデータを挿入します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>insert into parent (name) values ('name');

-- NOTE: parentに紐づくchidrenデータ
insert into children (name, parent_id) values ('children1', 1); 
insert into children (name, parent_id) values ('children2', 1);</code></pre>
</div>
<p>この状態でparentデータを削除してみます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; delete from parent where id = 1;
Query OK, 1 row affected (0.02 sec)</code></pre>
</div>
<p>今度はデータを削除することができました。</p>
<p>selectでそれぞれのデータを確認してみます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from parent;
Empty set (0.00 sec)

mysql&gt; select * from children;
Empty set (0.01 sec)</code></pre>
</div>
<p><span class="marker-under-red">cascadeの場合、親データを削除するとそれに紐づく子のデータも削除されていることが確認できます。</span></p>
<p>&nbsp;</p>
<h3><span id="toc5">set null</span></h3>
<p>最後にset nullです。</p>
<p>restrictとcascadeと異なり、parent_idにnullを許容することに注意しましょう。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>-- NOTE: 必要に応じてテーブルを削除してください。
drop table children;
drop table parent;

-- NOTE: テーブル作成
create table parent (
  id bigint not null auto_increment,
  name varchar(255),
  primary key (id)
);

create table children (
  id bigint not null auto_increment,
  parent_id bigint, -- NOTE: null許容
  name varchar(255),
  primary key (id),
  foreign key (parent_id) references parent (id) on delete set null -- NOTE: set null制約
);</code></pre>
</div>
<p>データを挿入します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>insert into parent (name) values ('name');

-- NOTE: parentに紐づくchidrenデータ
insert into children (name, parent_id) values ('children1', 1); 
insert into children (name, parent_id) values ('children2', 1);</code></pre>
</div>
<p><span>この状態でparentデータを削除してみます。</span></p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; delete from parent where id = 1;
Query OK, 1 row affected (0.02 sec)</code></pre>
</div>
<p>データを削除することができたのでデータを確認してみます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from parent;
Empty set (0.01 sec)

mysql&gt; select * from children;
+----+-----------+-----------+
| id | parent_id | name      |
+----+-----------+-----------+
|  1 |      NULL | children1 |
|  2 |      NULL | children2 |
+----+-----------+-----------+
2 rows in set (0.00 sec)</code></pre>
</div>
<p><span class="marker-under-red">親のデータは削除されており、子のデータは残っています。</span></p>
<p><span class="marker-under-red">set nullを指定しているので、parent_idはnullになっていることが確認できます。</span></p>
<p>&nbsp;</p>
<h2><span id="toc6">まとめ</span></h2>
<p>外部キー制約のrestrict, cascade, set nullの設定方法と挙動について確認しました。</p>
<p>必要に応じて外部キー制約を付与して、データの安全性を担保しましょう！</p>
<p>&nbsp;</p>
<div class="blogcard-type bct-together">

<a target="_blank" href="https://shungoblog.com/docker-mysql-sequel-pro/" title="DockerのMySQLコンテナにSequel proで接続する方法" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/cocoon-resources/blog-card-cache/5411650c615ce76a29cab44447468719.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">DockerのMySQLコンテナにSequel proで接続する方法</div><div class="blogcard-snippet external-blogcard-snippet">docker composeで起動したのMySQLコンテナにSequel proで接続する方法をご紹介します。またSequelを使用せず、コマンドでMySQLコンテナに接続する方法もご説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://shungoblog.com/programming/docker-mysql-sequel-pro.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">shungoblog.com</div></div></div></div></a>
</div><p>The post <a href="https://shungoblog.com/programming/mysql-foreign-key-constraint.html">【MySQL】 外部キー制約 (restrict / cascade / set null)</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/mysql-foreign-key-constraint.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>さくらサーバーのDBにSequelProでSSH接続する方法</title>
		<link>https://shungoblog.com/programming/sequel-pro-sakura-server.html</link>
					<comments>https://shungoblog.com/programming/sequel-pro-sakura-server.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Fri, 11 Nov 2022 11:28:44 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sequel]]></category>
		<category><![CDATA[さくらサーバー]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1627</guid>

					<description><![CDATA[<p>目次 はじめにさくらサーバーのDBにSequelで接続する方法さくらサーバーにpasswordでSSH接続できるようにするSequelの設定 はじめに さくらサーバーで構築したDBにWebのphpMyAdminではなく、 [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/sequel-pro-sakura-server.html">さくらサーバーのDBにSequelProでSSH接続する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">さくらサーバーのDBにSequelで接続する方法</a><ol><li><a href="#toc3" tabindex="0">さくらサーバーにpasswordでSSH接続できるようにする</a></li><li><a href="#toc4" tabindex="0">Sequelの設定</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>さくらサーバーで構築したDBにWebのphpMyAdminではなく、Sequelなどから接続したい場合があると思います。</p>
<p>この記事では、SequelでSSH接続してさくらサーバーのDBに接続する方法をご紹介します。</p>
<h2><span id="toc2">さくらサーバーのDBにSequelで接続する方法</span></h2>
<h3><span id="toc3">さくらサーバーにpasswordでSSH接続できるようにする</span></h3>
<p>まずはさくらサーバーにpassword認証でSSH接続できるように設定する必要があります。</p>
<p>下記の記事がわかりやすかったので、参考にして設定しましょう。</p>
<p class="css-8py6gv"><a rel="nofollow noopener external" target="_blank" href="https://qiita.com/non0311/items/04222771ef9aa1970f7a">さくらのレンタルサーバーにSSHでログインする</a></p>
<p>&nbsp;</p>
<p>設定が終わったら、下記のコマンドを入力して、passwordでサーバーにログインできていればOKです。</p>
<p>(アカウント: sample, サーバー: <span>sample.sakura.ne.jpの場合</span>)</p>
<pre><span>% ssh sample@sample.sakura.ne.jp</span>
password:</pre>
<p>&nbsp;</p>
<h3><span id="toc4">Sequelの設定</span></h3>
<p>次にSequelの設定です。</p>
<p>Sequelを開いてSSHのタブをクリックします。</p>
<p>すると、下の方にSSH接続するための設定が表示されます。</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-18.59.15-261x300.jpg" alt="sakura-sequel" width="609" height="700" class="wp-image-1635 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-18.59.15-261x300.jpg 261w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-18.59.15-889x1024.jpg 889w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-18.59.15-768x884.jpg 768w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-18.59.15.jpg 924w" sizes="(max-width: 609px) 100vw, 609px" /></p>
<p>Sequelに下記の情報を入力します。</p>
<div class="scrollable-table"><table style="border-collapse: collapse; width: 100%; height: 410px;">
<tbody>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">名前</td>
<td style="width: 50%; height: 41px;">任意の名前</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">1. MySQLホスト</td>
<td style="width: 50%; height: 41px;"><span>DBのURL (ex. mysql57.sample.sakura.ne.jp)</span></td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">2. ユーザ名</td>
<td style="width: 50%; height: 41px;">mysqlのユーザー名</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">3. パスワード</td>
<td style="width: 50%; height: 41px;">mysqlのパスワード</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">4. データベース</td>
<td style="width: 50%; height: 41px;">作成したデータベース名</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">5. ポート</td>
<td style="width: 50%; height: 41px;">3306</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">6. SSHホスト</td>
<td style="width: 50%; height: 41px;">サーバーのホスト (ex. <span>sample.sakura.ne.jp</span>)</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">7. SSHユーザ</td>
<td style="width: 50%; height: 41px;">SSHユーザー名</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">8. SSHパスワード</td>
<td style="width: 50%; height: 41px;">SSHパスワード</td>
</tr>
<tr style="height: 41px;">
<td style="width: 50%; height: 41px;">9. SSHポート</td>
<td style="width: 50%; height: 41px;">&#8211;</td>
</tr>
</tbody>
</table></div>
<p>1 ~ 4のDBの情報に関してはさくらサーバーのデータベースのページから確認できます。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07-300x123.png" alt="sakura-sequel-2" width="587" height="241" class="wp-image-1636 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07-300x123.png 300w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07-1024x419.png 1024w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07-768x314.png 768w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07-1536x628.png 1536w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-11-20.03.07.png 1920w" sizes="(max-width: 587px) 100vw, 587px" /></p>
<p>情報を入力して&#8221;接続をテスト&#8221;を押して「接続が成功しました」が表示されれば、無事に接続完了です！</p>
<p>&nbsp;</p><p>The post <a href="https://shungoblog.com/programming/sequel-pro-sakura-server.html">さくらサーバーのDBにSequelProでSSH接続する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/sequel-pro-sakura-server.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQLの基本構文一覧</title>
		<link>https://shungoblog.com/programming/sql-basic-syntax.html</link>
					<comments>https://shungoblog.com/programming/sql-basic-syntax.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 11:59:46 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1604</guid>

					<description><![CDATA[<p>目次 はじめにSQL 基本構文一覧データベース作成 (create database)テーブル作成 (create table)テーブル削除 (drop table)データ挿入 (insert)データ更新 (update [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/sql-basic-syntax.html">SQLの基本構文一覧</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">SQL 基本構文一覧</a><ol><li><a href="#toc3" tabindex="0">データベース作成 (create database)</a></li><li><a href="#toc4" tabindex="0">テーブル作成 (create table)</a></li><li><a href="#toc5" tabindex="0">テーブル削除 (drop table)</a></li><li><a href="#toc6" tabindex="0">データ挿入 (insert)</a></li><li><a href="#toc7" tabindex="0">データ更新 (update)</a></li><li><a href="#toc8" tabindex="0">データ削除 (delete)</a></li><li><a href="#toc9" tabindex="0">データ検索 (select)</a></li><li><a href="#toc10" tabindex="0">テーブル構造確認(describe)</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p class="wp-block-paragraph">SQLでデータを触るときに必ず使う、基本的な構文をまとめてみました。</p>
<p>もしdockerでsequel proに接続したい方は下記の記事を参考にしてみてください！</p>
<p>&nbsp;</p>
<div class="blogcard-type bct-together">

<a target="_blank" href="https://shungoblog.com/docker-mysql-sequel-pro/" title="DockerのMySQLコンテナにSequel proで接続する方法" class="blogcard-wrap external-blogcard-wrap a-wrap cf"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/cocoon-resources/blog-card-cache/5411650c615ce76a29cab44447468719.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">DockerのMySQLコンテナにSequel proで接続する方法</div><div class="blogcard-snippet external-blogcard-snippet">docker composeで起動したのMySQLコンテナにSequel proで接続する方法をご紹介します。またSequelを使用せず、コマンドでMySQLコンテナに接続する方法もご説明します。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://shungoblog.com/programming/docker-mysql-sequel-pro.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">shungoblog.com</div></div></div></div></a>
</div>
<h2><span id="toc2">SQL 基本構文一覧</span></h2>
<h3><span id="toc3">データベース作成 (create database)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create database [db_name];</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) developmentというデータベースを作成</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create database development;</code></pre>
</div>
<h3><span id="toc4">テーブル作成 (create table)</span></h3>
<p>&nbsp;</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create table if not exists [table_name] (
  [column_name] [column_type],
  ...
);</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) userテーブルを作成</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>create table if not exists user (
  id int,
  name varchar(10),
  primary key (id)
);</code></pre>
</div>



<h3><span id="toc5">テーブル削除 (drop table)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>drop table [table_name];</code></pre>
</div>
<p class="wp-block-paragraph">&nbsp;</p>
<p>ex) userテーブルを削除</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>drop table user;</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc6">データ挿入 (insert)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>insert into [table_name]
values ([value1], [value2], ...);</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) userテーブルにデータを挿入</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>insert into user
values (1, 'name-1');</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc7">データ更新 (update)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>update [table_name]
set [column_name] = [value]
[where where_condition];</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) id=1のデータを更新</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>update user
set name = 'name-2'
where id = 1;</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc8">データ削除 (delete)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>delete from [table_name]
[WHERE where_condition];</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) id=1のデータを削除</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-json" data-lang="JSON"><code>delete from user
where id = 1;</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc9">データ検索 (select)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select [column_name1], [column_name2], ... from [table_name]
[WHERE where_condition];</code></pre>
</div>
<p>ex) userテーブルにデータを挿入</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select id, name from user
where id = 1;</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc10">テーブル構造確認(describe)</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>describe table [table_name];</code></pre>
</div>
<p>&nbsp;</p>
<p>ex) userテーブルの構造を確認</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>describe table user;</code></pre>
</div>
<p>下記のようなテーブル構造が出力されます。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-07-20.51.14-300x88.png" alt="sql-describe" width="556" height="163" class="alignnone  wp-image-1618" srcset="https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-07-20.51.14-300x88.png 300w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-07-20.51.14-768x226.png 768w, https://shungoblog.com/wp-content/uploads/2022/11/スクリーンショット-2022-11-07-20.51.14.png 776w" sizes="(max-width: 556px) 100vw, 556px" /></p>
<p>&nbsp;</p><p>The post <a href="https://shungoblog.com/programming/sql-basic-syntax.html">SQLの基本構文一覧</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/sql-basic-syntax.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MySQL】WHERE INに空のリストを入れるとエラーになる</title>
		<link>https://shungoblog.com/programming/mysql-where-in-error.html</link>
					<comments>https://shungoblog.com/programming/mysql-where-in-error.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Sun, 30 Oct 2022 14:16:42 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1589</guid>

					<description><![CDATA[<p>目次 はじめにwhere inで文法エラーを出さない方法OKパターンNGパターンフレームワークでwhere inを使う時は注意が必要FuelPHPの場合 はじめに MySQLのwhere inに空のリスト()を入れると下 [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/mysql-where-in-error.html">【MySQL】WHERE INに空のリストを入れるとエラーになる</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに</a></li><li><a href="#toc2" tabindex="0">where inで文法エラーを出さない方法</a><ol><li><a href="#toc3" tabindex="0">OKパターン</a></li><li><a href="#toc4" tabindex="0">NGパターン</a></li></ol></li><li><a href="#toc5" tabindex="0">フレームワークでwhere inを使う時は注意が必要</a><ol><li><a href="#toc6" tabindex="0">FuelPHPの場合</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">はじめに</span></h2>
<p>MySQLのwhere inに空のリスト()を入れると下記の文法エラーが出ます。</p>
<p>その場合の対処法をご紹介します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from users where id in ();
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1</code></pre>
</div>
<h1 class="entry-title"></h1>
<h2><span id="toc2">where inで文法エラーを出さない方法</span></h2>
<p>空のリストではなく、nullを入れることで文法エラーが解消されます。</p>
<h3><span id="toc3">OKパターン</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from users where id in (null);
Empty set (0.00 sec)</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc4">NGパターン</span></h3>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>mysql&gt; select * from users where id in ();
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1<span style="background-color: #ffffff; color: #333333; font-family: var(--cocoon-default-font); font-size: 16px;"> </span></code></pre>
</div>
<p>&nbsp;</p>
<h2><span id="toc5">フレームワークでwhere inを使う時は注意が必要</span></h2>
<h3><span id="toc6">FuelPHPの場合</span></h3>
<p>MySQLを使っている場合は文法エラーにすぐに気づくことができますが、</p>
<p>フレームワークを使っているとMySQLの文法エラーに気づかないことがあります。</p>
<p>&nbsp;</p>
<p>例としてFuelPHPでuserを検索するための、コードで説明します。</p>
<p>$idsというリストで検索するときに、$idsが空()の場合、MySQLの文法エラーになります。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-php" data-lang="PHP"><code>$where = array(
  array('id', 'in', $ids)
);
$users = Model_User::find('all', compact("where"));</code></pre>
</div>
<p>そこで空のリストになり可能性がある場合は、三項演算子などでnullを入れてハンドリングすると文法エラーが発生することを防ぐことができます。</p>
<p>&nbsp;</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-php" data-lang="PHP"><code>$where = array(
  array('id', 'in', ($ids ? $ids : array(null)))
);
$users = Model_User::find('all', compact("where"));</code></pre>
</div>
<p>&nbsp;</p><p>The post <a href="https://shungoblog.com/programming/mysql-where-in-error.html">【MySQL】WHERE INに空のリストを入れるとエラーになる</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/mysql-where-in-error.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DockerのMySQLコンテナにSequel proで接続する方法</title>
		<link>https://shungoblog.com/programming/docker-mysql-sequel-pro.html</link>
					<comments>https://shungoblog.com/programming/docker-mysql-sequel-pro.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Wed, 24 Aug 2022 04:09:33 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[エンジニア]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1490</guid>

					<description><![CDATA[<p>目次 DockerのコンテナにSequelに接続する設定docker-compose.ymlSequel ProSequelを使用せずにDockerのMySQLに接続する方法1. コンテナに入ってからMySQLに接続する [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/docker-mysql-sequel-pro.html">DockerのMySQLコンテナにSequel proで接続する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">DockerのコンテナにSequelに接続する設定</a><ol><li><a href="#toc2" tabindex="0">docker-compose.yml</a></li><li><a href="#toc3" tabindex="0">Sequel Pro</a></li></ol></li><li><a href="#toc4" tabindex="0">Sequelを使用せずにDockerのMySQLに接続する方法</a><ol><li><a href="#toc5" tabindex="0">1. コンテナに入ってからMySQLに接続する方法</a></li><li><a href="#toc6" tabindex="0">2. 直接コンテナ内のMySQLに接続する方法</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">DockerのコンテナにSequelに接続する設定</span></h2>
<h3><span id="toc2">docker-compose.yml</span></h3>
<p>Dockerで作成するコンテナは下記の通りです。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-yaml" data-lang="docker-compose.yml"><code>version: '3'
services:
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: development
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    # 文字化け対応
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    ports:
     - 3308:3306</code></pre>
</div>
<p>下記コマンドでコンテナが起動します。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>$ docker-compose up</code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc3">Sequel Pro</span></h3>
<p>下記の情報を入力して、<strong>「接続をテスト」</strong>を押します。</p>
<p>問題がなければ、「接続が成功しました」というメッセージが表示されます。</p>
<p>これで<strong>「接続」</strong>を押すと、無事にDockerのMySQLにSequelで接続できます。</p>
<p>&nbsp;</p>
<div class="scrollable-table"><table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<td style="width: 50%;"><strong>名前</strong></td>
<td style="width: 50%;"><strong>任意の名前</strong></td>
</tr>
<tr>
<td style="width: 50%;">ホスト</td>
<td style="width: 50%;">127.0.0.1</td>
</tr>
<tr>
<td style="width: 50%;">ユーザ名</td>
<td style="width: 50%;">root</td>
</tr>
<tr>
<td style="width: 50%;">パスワード</td>
<td style="width: 50%;">password</td>
</tr>
<tr>
<td style="width: 50%;">データベース</td>
<td style="width: 50%;">development</td>
</tr>
<tr>
<td style="width: 50%;">ポート</td>
<td style="width: 50%;">3308</td>
</tr>
</tbody>
</table></div>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/08/スクリーンショット-2022-08-23-21.12.56-300x257.png" alt="docker-mysql-sequel-1" width="541" height="463" class="wp-image-1501 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2022/08/スクリーンショット-2022-08-23-21.12.56-300x257.png 300w, https://shungoblog.com/wp-content/uploads/2022/08/スクリーンショット-2022-08-23-21.12.56-768x659.png 768w, https://shungoblog.com/wp-content/uploads/2022/08/スクリーンショット-2022-08-23-21.12.56.png 898w" sizes="(max-width: 541px) 100vw, 541px" /></p>
<p>よく使用するDBであればわかりやすい名前に変更して、「お気に入りに追加」しておくと、毎回入力する手間が省けます。</p>
<p>&nbsp;</p>
<h2><span id="toc4">Sequelを使用せずにDockerのMySQLに接続する方法</span></h2>
<h3><span id="toc5">1. コンテナに入ってからMySQLに接続する方法</span></h3>
<p>まずはMySQLのコンテナに入ります。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span>$ docker exec -it &lt;MySQLのコンテナ名&gt; bash</span></code></pre>
</div>
<p>今回の場合、「docker-compose.yml」の「services」で「mysql」という名前のコンテナを作成しているので、下記でMySQLのコンテナに入ることができます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span>$ docker exec -it mysql bash</span></code></pre>
</div>
<p>&nbsp;</p>
<p>コンテナに入ったらMySQLのコマンドでDBに接続できます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code><span># mysql -u root -ppassword development</span></code></pre>
</div>
<p>&nbsp;</p>
<h3><span id="toc6">2. 直接コンテナ内のMySQLに接続する方法</span></h3>
<p>コンテナに入らずに直接コンテナ内のDBに接続する場合は下記のコマンドで接続可能です。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>$ mysql -u &lt;ユーザー名&gt; -p&lt;パスワード&gt; -h &lt;ホスト名&gt; -P &lt;ポート名&gt; &lt;DB名&gt;</code></pre>
</div>
<p>&nbsp;</p>
<p>今回のコンテナ内のDBには下記のコマンドで接続できます。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>$ mysql -u root -ppawwrod -h 127.0.0.1 -P 3308 development</code></pre>
</div><p>The post <a href="https://shungoblog.com/programming/docker-mysql-sequel-pro.html">DockerのMySQLコンテナにSequel proで接続する方法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/docker-mysql-sequel-pro.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MySQL】テーブル作成時にidにAUTO_INCREMENTを指定するとエラーが出る時の対処法</title>
		<link>https://shungoblog.com/programming/mysql-auto-increment-error.html</link>
					<comments>https://shungoblog.com/programming/mysql-auto-increment-error.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Wed, 20 Jul 2022 00:42:09 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[エンジニア]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1129</guid>

					<description><![CDATA[<p>MySQLでテーブル作成時にAUTO_INCREMENTの部分で下記のエラーが出ました。 mysql&#62; CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREME [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/mysql-auto-increment-error.html">【MySQL】テーブル作成時にidにAUTO_INCREMENTを指定するとエラーが出る時の対処法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>MySQLでテーブル作成時にAUTO_INCREMENTの部分で下記のエラーが出ました。</p>
<pre>mysql&gt; CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL);
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key</pre>
<p>このエラーの対処法をご紹介します。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">AUTO_INCREMENTのエラー対処法</a><ol><li><a href="#toc2" tabindex="0">PRIMARY_KEY(主キー)を設定する</a></li><li><a href="#toc3" tabindex="0">AUTO_INCREMENTの動作確認</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">AUTO_INCREMENTのエラー対処法</span></h2>
<h3><span id="toc2">PRIMARY_KEY(主キー)を設定する</span></h3>
<p><span>MySQLでauto_incrementを付与する場合は、</span></p>
<p><span>そのカラムを<strong>「PRIMARY_KEY(主キー)にしてインデックスを付ける」</strong>必要があります。</span></p>
<p>主キーなしのエラーが出るSQLがこちらです。</p>
<pre>CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL
);</pre>
<p>&nbsp;</p>
<p>主キーを付与した、修正後のSQLがこちらです。</p>
<p><span class="marker-under-red"><strong>「PRIMARY KEY(id)」</strong></span>を追加しています。</p>
<pre>CREATE TABLE `user` (
  `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id),
  `name` varchar(255) NOT NULL
);</pre>
<p>追加されたuserテーブルを確認すると、idにauto_incrementが付与されています。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.35.42-300x98.png" alt="mysql_auto_increment_1" width="588" height="192" class="wp-image-1202 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.35.42-300x98.png 300w, https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.35.42-768x252.png 768w, https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.35.42.png 926w" sizes="(max-width: 588px) 100vw, 588px" /></p>
<p>&nbsp;</p>
<h3><span id="toc3">AUTO_INCREMENTの動作確認</span></h3>
<p>試しにidを指定せずに2件レコードを追加してみます。</p>
<pre>mysql&gt; INSERT INTO user (name) VALUES ('name');
Query OK, 1 row affected (0.01 sec)

mysql&gt; INSERT INTO user (name) VALUES ('name');
Query OK, 1 row affected (0.01 sec)</pre>
<p>このようにidが自動で付与されていることが確認できます。</p>
<p><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.37.58-300x213.png" alt="mysql_auto_increment_2" width="399" height="283" class="wp-image-1203 aligncenter" srcset="https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.37.58-300x213.png 300w, https://shungoblog.com/wp-content/uploads/2022/07/スクリーンショット-2022-07-20-9.37.58.png 406w" sizes="(max-width: 399px) 100vw, 399px" /></p>
<p>&nbsp;</p><p>The post <a href="https://shungoblog.com/programming/mysql-auto-increment-error.html">【MySQL】テーブル作成時にidにAUTO_INCREMENTを指定するとエラーが出る時の対処法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/mysql-auto-increment-error.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MySQL】datetime型でInvalid default valueというエラーが出たときの対処法</title>
		<link>https://shungoblog.com/programming/mysql-invalid-default-value.html</link>
					<comments>https://shungoblog.com/programming/mysql-invalid-default-value.html#respond</comments>
		
		<dc:creator><![CDATA[しゅんご]]></dc:creator>
		<pubDate>Mon, 18 Jul 2022 11:55:08 +0000</pubDate>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[mysql]]></category>
		<guid isPermaLink="false">https://shungoblog.com/?p=1127</guid>

					<description><![CDATA[<p>ユーザーテーブルを作成する際に、 CREATE TABLE `users` ( `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) COMMENT 'ID', `e [&#8230;]</p>
<p>The post <a href="https://shungoblog.com/programming/mysql-invalid-default-value.html">【MySQL】datetime型でInvalid default valueというエラーが出たときの対処法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>ユーザーテーブルを作成する際に、</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>CREATE TABLE `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) COMMENT 'ID',
  `email` varchar(256) NOT NULL COMMENT 'メールアドレス',
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '登録日',
  `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新日'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザー';</code></pre>
</div>
<p>下記のようなエラーが出て、テーブルを作成できないという問題が発生しました。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-bash" data-lang="Bash"><code>ERROR 1067 (42000): Invalid default value for 'created'</code></pre>
</div>
<p>&nbsp;</p>
<div class="speech-wrap sb-id-11 sbs-flat sbp-l sbis-cb cf">
<div class="speech-person">
<figure class="speech-icon"><img loading="lazy" decoding="async" src="https://shungoblog.com/wp-content/uploads/2022/04/cropped-IMG_0718.jpg" alt="しゅんご" class="speech-icon-image" width="512" height="512" /></figure>
<div class="speech-name">しゅんご</div>
</div>
<div class="speech-balloon">
<p>この記事ではdatetime型で<strong>&#8220;Invalid default value&#8221;</strong>というエラーが出たときの対処法をご紹介します。</p>
</div>
</div>
<p>&nbsp;</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Invalid default valueというエラーが出たときの対処法</a><ol><li><a href="#toc2" tabindex="0">サポートしている範囲の日付を値に入れる</a></li><li><a href="#toc3" tabindex="0">SQLモードを変更する</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">Invalid default valueというエラーが出たときの対処法</span></h2>
<h3><span id="toc2">サポートしている範囲の日付を値に入れる</span></h3>
<p>MySQLの公式ドキュメントに下記の記載があります。</p>
<p>&nbsp;</p>
<blockquote><p><code class="literal">DATETIME</code><span> 型は、日付と時間の両方の部分を含む値に使用されます。 MySQL は、</span><code class="literal">DATETIME</code><span> 値を</span><code class="literal">'<em class="replaceable"><code>YYYY-MM-DD hh:mm:ss</code></em>'</code><span>形式で取得して表示します。 サポートしている範囲は </span><code class="literal">'1000-01-01 00:00:00'</code><span> から </span><code class="literal">'9999-12-31 23:59:59'</code><span> です。</span></p>
<p>引用: <a rel="nofollow noopener external" target="_blank" href="https://dev.mysql.com/doc/refman/8.0/ja/datetime.html">11.2.2 DATE、DATETIME、および TIMESTAMP 型</a></p></blockquote>
<p>&nbsp;</p>
<p><span><span class="marker-under-red">サポート範囲に入っていない、<strong>&#8220;0000-00-00 00:00:00&#8221;</strong></span>という値を入れていたのでエラーになっていました。</span></p>
<p><span class="bold red">そのため、</span><span><span class="bold red">サポート範囲に入っている、<strong>&#8220;1000-01-01 00:00:00&#8221;</strong></span>に変更しました。</span></p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>CREATE TABLE `users` (
  `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) COMMENT 'ID',
  `email` varchar(256) NOT NULL COMMENT 'メールアドレス',
  `created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '登録日',
  `updated` datetime NOT NULL DEFAULT '1000-01-01 00:00:00' COMMENT '更新日'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザー';</code></pre>
</div>
<p>するとエラーなく、テーブルを作成することができました！</p>
<p>&nbsp;</p>
<h3><span id="toc3">SQLモードを変更する</span></h3>
<p><strong><span class="marker-under-red">こちらの方法ではエラーはなくせますが、警告が出るのでおすすめはできません。</span></strong></p>
<p>一時的な対応でやむを得ない場合のみ参考にしてください。</p>
<p>&nbsp;</p>
<h4>SQLモードとは</h4>
<p>無効な値が入ってきたときにどのように処理するかを決めるのがSQLモードです。</p>
<p>公式ドキュメントの<a rel="nofollow noopener external" target="_blank" href="https://dev.mysql.com/doc/refman/5.6/ja/sql-mode.html#sql-mode-strict">厳密なSQLモード</a>に下記の記載があります。</p>
<blockquote><p>厳密モードは、MySQL が <code class="literal">INSERT</code> や <code class="literal">UPDATE</code> などのデータ変更ステートメントで無効な値または欠落した値を処理する方法を制御します。値はいくつかの理由で無効になることがあります。たとえば、カラムに対して正しくないデータ型を持っていたり、範囲外であったりすることがあります。値の欠落が発生するのは、挿入される新しい行の非 <code class="literal">NULL</code> カラムに値が含まれておらず、そのカラムに明示的な <code class="literal">DEFAULT</code> 句が定義されていない場合です。(<code class="literal">NULL</code> カラムの場合、値が欠落しているときは <code class="literal">NULL</code> が挿入されます。)</p></blockquote>
<p>そのため、SQLモードを変更してdatetime型に<span><strong>&#8220;0000-00-00 00:00:00&#8221;</strong>を許容することでエラーは回避できます。</span></p>
<p>&nbsp;</p>
<h4>SQLモードを<code class="literal">NO_ZERO_DATE</code>に変更する</h4>
<p>SQLモードを<code class="literal">NO_ZERO_DATE</code>に変更することでエラーを回避できます。</p>
<blockquote><p><code class="literal">NO_ZERO_DATE</code><span> モードは、サーバーが </span><code class="literal">'0000-00-00'</code><span> を有効な日付として許可するかどうかに影響します。 この影響は、厳密 SQL モードが有効かどうかにも依存します。</span></p>
<p>引用: <a rel="nofollow noopener external" target="_blank" href="https://dev.mysql.com/doc/refman/5.6/ja/sql-mode.html#sql-mode-strict">厳密な SQL モード</a></p></blockquote>
<p>&nbsp;</p>
<p>テーブルを作成する前にSQLモードを<code class="literal">NO_ZERO_DATE</code>に変更することで、テーブルを作成することができました。</p>
<div class="hcb_wrap">
<pre class="prism line-numbers lang-sql" data-lang="SQL"><code>SET sql_mode = 'NO_ZERO_DATE';
CREATE TABLE `invoices` (
  `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY(id) COMMENT 'ID',
  `email` varchar(256) NOT NULL COMMENT 'メールアドレス',
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '登録日',
  `updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新日'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザー';</code></pre>
</div>
<p><code class="literal"></code></p><p>The post <a href="https://shungoblog.com/programming/mysql-invalid-default-value.html">【MySQL】datetime型でInvalid default valueというエラーが出たときの対処法</a> first appeared on <a href="https://shungoblog.com">shungo blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://shungoblog.com/programming/mysql-invalid-default-value.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
