第4章 テーブルの操作(前編)
この章ではテーブルの操作について説明します。
homepage
# **テーブルの操作(前編)** *** ## **1.テーブルの概念** データベースにのデータは基本的に```テーブル(表)```の形で格納されます。データの管理はこの表に対して操作すること、表の作成、カラム(列)```属性```の設定、データを```レコード(行)ごと```で挿入などです。 <!--graph4-1.png --> <img src="https://i.loli.net/2019/04/23/5cbe5d551037a.png" width="40%"> <br><br> ## **2.テーブルの操作** すでに説明したとおり、MySQLには、複数のデータベースが存在し、データベースの下に、さらに複数のテーブルを定義できるようになっています。 <br> ### **2-1.テーブルの生成** CREATE TABLE コマンドを使用します。 ``` CREATE TABLE テーブル名 (列名 データ型 [制約],…) [テーブルオプション]; ``` 上書式の ```(列名 データ型 [制約],…)``` は列(カラム)の定義で、列の名称とデータ型、列のオプションの組み合わせになります。 <br> **・列の定義のオプション** <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">種類</th> <th align="center">定義オプション名</th> <th align="center">詳細</th> </tr> <tr> <td>主キー</td> <td>PRIMARY KEY</td> <td>行を識別するための列。重複する値は格納できず、NULLも格納できない。</td> </tr> <tr> <td>ユニークキー</td> <td>UNIQUE</td> <td>主キーに似て、重複する値は格納できないが、NULLは格納できる。</td> </tr> <tr> <td>ノンユニークキー</td> <td>KEY</td> <td>重複する値は格納できる。</td> </tr> <tr> <td>空文禁止</td> <td>NOT NULL</td> <td>新規データ(レコード)挿入する際、指定カラムに必ず値を設定する</td> </tr> <tr> <td>全文検索イン</td> <td>FULLTEXT</td> <td>全文検索のための特殊なインデックス</td> </tr> <tr> <td>コメント</td> <td>COMMENT</td> <td>列(カラム)の説明</td> </tr> <tr> <td>自動連番</td> <td>AUTO_INCREMENT</td> <td>レコード挿入される時、該当の列は連番の数字が自動的に生成する</td> </tr> </table> <br><br> **・MySQLで設定可能なデータ型** **(1)数値型(整数型)** <table border="1"> <tr style="width:500px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">コマンド名</th> <th align="center" width="10%">データ型</th> <th align="center">値の範囲</th> <th align="center">UNSIGNED</th> <th align="center">ZEROFILL</th> </tr> <tr> <td>TYNYINT(m)</td> <td>整数型(1バイト)</td> <td>-128~127</td> <td>0~255</td> <td>000~255</td> </tr> <tr> <td>SMALLINT(m)</td> <td>整数型(2バイト)</td> <td>-32768~32767</td> <td>0~65536</td> <td>00000~65536</td> </tr> <tr> <td>MEDIUMINT(m)</td> <td>整数型(3バイト)</td> <td>-8388608~8388607</td> <td>0~16777215</td> <td>00000000~16777215</td> </tr> <tr> <td>INT(m)</td> <td>整数型(4バイト)</td> <td>-2147483648~2147483647</td> <td>0~4294967295</td> <td>0000000000~4294967295</td> </tr> <tr> <td>BIGINT(m)</td> <td>整数型(8バイト)</td> <td>-9223372036854775808~9223372036854775807</td> <td>0~18446744073709551615</td> <td>00000000000000000000~18446744073709551615</td> </tr> </table> </br> ※m は桁数を指定する整数 ※UNSIGNED は正負の符号を禁止することができます ※ZEROFILL は入力した数字に対して最大桁数まで前方を自動的にゼロ埋めして登録されます <br><br> **(2)数値型(浮動小数点型)** <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">コマンド名</th> <th align="center">データ型</td> <th align="center">値の範囲</td> </tr> <tr> <td>FLOAT</td> <td>単精度浮動小数点型</td> <td>3.402823466E+38~3.402823466E+38</td> </tr> <tr> <td>DOUBLE</td> <td>倍精度浮動小数点型</td> <td>-1.7976931348623157E+308~1.7976931348623157E+308</td> </tr> <tr> <td>FLOAT(m,d)</td> <td>単精度浮動小数点型</td> <td>m:1~255桁、d:0~30桁まで指定可能</td> </tr> <tr> <td>DOUBLE(m,d)</td> <td>倍精度浮動小数点型</td> <td>m:1~255桁、d:0~30桁まで指定可能</td> </tr> </table> <br> ※m は全体の桁数、dは小数部の桁数を指定する整数 <br><br> **(3)文字列型(テキスト型)** <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">コマンド名</th> <th align="center">データ型</th> <th align="center">値の範囲</th> </tr> <tr> <td>CHAR(m)</td> <td>固定長文字型</td> <td>m(文字数指定):0~255文字</td> </tr> <tr> <td>VARCHAR(m)</td> <td>可変長文字型</td> <td>m(バイト数指定):0~65535バイト</td> </tr> <tr> <td>TYNYTEXT</td> <td>テキスト型</td> <td>0~255バイト(固定)</td> </tr> <tr> <td>TEXT</td> <td>テキスト型</td> <td>0~65535バイト(固定)</td> </tr> <tr> <td>MEDIUMTEXT</td> <td>テキスト型</td> <td>0~16777215バイト(固定)</td> </tr> <tr> <td>LONGTEXT</td> <td>テキスト型</td> <td>0~4294967295バイト(固定)</td> </tr> </table> <br><br> **(4)バイナリ型** <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">コマンド名</th> <th align="center">データ型</th> <th align="center">値の範囲</th> </tr> <tr> <td>BINARY(m)</td> <td>固定長バイナリ型</td> <td>m(文字数指定):0~255文字</td> </tr> <tr> <td>VARBINARY(m)</td> <td>可変長バイナリ型</td> <td>m(バイト数指定):0~65535バイト</td> </tr> </table> <br> ※バイナリ型を設定した場合、送られてきたデータはバイナリデータとして登録されます <br><br> **(5)日付型/時刻型** <table border="1"> <tr style="width:600px ;background-color:#C6E0B4 ;text-align:center;"> <th align="center">コマンド名</th> <th align="center">データ型</th> <th align="center">基本フォーマット</th> <th align="center">備考</th> </tr> <tr> <td>DATE</td> <td>日付型</td> <td>日付型</td> <td></td> </tr> <tr> <td>DATETIME</td> <td>日付時刻型</td> <td>'YYYY-MM-DD HH:MM:SS'</td> <td></td> </tr> <tr> <td>TIMESTAMP</td> <td>日付時刻型</td> <td>'YYYY-MM-DD HH:MM:SS'</td> <td></td> </tr> <tr> <td>TIME</td> <td>時刻型</td> <td>'HH:MM:SS'</td> <td></td> </tr> <tr> <td>YEAR[4]</td> <td>日付型(4桁年)</td> <td>'YYYY'</td> <td>1901~2155 または0000が設定可能</td> </tr> <tr> <td>YEAR[2]</td> <td>日付型(2桁年)</td> <td>'YY'</td> <td>70~69が設定可能 (1970~2069)を指す</td> </tr> </table> <br> 日付型の基本フォーマットには色々なマークが使えます。 <br> <table border="1"> <tr> <td>'YYYYMMDD'</td> <td>'YY-MM-DD'</td> <td>'H:M:S'</td> <td>HHMMSS</td> </tr> <tr> <td>'YYYY/MM/DD'</td> <td>'YYYY.MM.DD'</td> <td>'YYYY@MM@DD'</td> <td>'YY-M-D H:M:S'</td> </tr> </table> <br><br> **・実例**[sample4-1.sql] 三つのテーブルを作成します。 **(1)** テーブルcountryの作成 ``` use companydata; -- companydataデータベースを使用 CREATE TABLE country( countryCd CHAR(3) NOT NULL COMMENT '国籍コード', -- countryCdカラムを設定 countryName CHAR(255) COMMENT '国籍', -- countryNameカラムを設定 PRIMARY KEY( countryCd ) ); ``` <br> **(2)** テーブルsexの作成 ``` CREATE TABLE sex( sexCd CHAR(2) NOT NULL COMMENT '性別コード', sexName VARCHAR(255) NOT NULL COMMENT '性別', PRIMARY KEY( sexCd ) ); ``` <br> **(3)** テーブルempinfoの作成 ``` CREATE TABLE empinfo( empCd CHAR(6) NOT NULL COMMENT '社員番号', name VARCHAR(255) NOT NULL COMMENT '姓名', birthday DATE NOT NULL COMMENT '生年月日', countryCd CHAR(3) NOT NULL COMMENT '国籍コード', sexCd CHAR(2) NOT NULL COMMENT '性別コード', year INT(2) COMMENT '入社年数', PRIMARY KEY( empCd ) ); ``` <!--graph4-2.png --> <a href="https://i.loli.net/2019/04/23/5cbe9d14ade10.png" target="_blank"><img src="https://i.loli.net/2019/04/23/5cbe9d14ade10.png" width="40%"></a> **詳細説明** <!--graph4-3.png --> <a href="https://i.loli.net/2019/04/23/5cbe9d14a8c65.png" target="_blank"><img src="https://i.loli.net/2019/04/23/5cbe9d14a8c65.png" width="40%"></a> 下記コマンドを使って作成されたテーブルをチェックします ``` select * from empinfo; ``` <!--graph4-4.png --> <a href="https://i.loli.net/2019/04/23/5cbea1205d099.png" target="_blank"><img src="https://i.loli.net/2019/04/23/5cbea1205d099.png" width="40%"></a> <br><br> ### **2-2.テーブル一覧の表示** ``` SHOW TABLES; ``` <br><br> ### **2-3.テーブルの削除** 作成したテーブルは、不要になれば削除することが出来ます。 ``` DROP TABLE テーブル名; ``` <br><br> ### **2-4.列の追加** 列の追加には、ALTER TABLEを利用します。 ``` ALTER TABLE テーブル名 ADD ( 列名 (列名列の型[制約],…) ) ; ``` <br> **・実例**[sample4-2.sql] ``` ALTER TABLE empinfo ADD(school CHAR(20) DEFAULT "XXX大学"); ``` <!--graph4-5.png --> <a href="https://i.loli.net/2019/04/24/5cbfcb2369fb2.png" target="_blank"> <img src="https://i.loli.net/2019/04/24/5cbfcb2369fb2.png" width="40%"/></a> <br><br> ### **2-5.列の削除** ``` ALTER TABLE テーブル名 DROP 列名; ``` <br> **・実例**[sample4-3.sql] ``` ALTER TABLE empinfo DROP school; ``` <!--graph4-6.png --> <a href="https://i.loli.net/2019/04/24/5cbfcc6c53bf5.png" target="_blank"> <img src="https://i.loli.net/2019/04/24/5cbfcc6c53bf5.png" width="40%"/></a> <br><br> ### **2-6.列名の変更** ``` ALTER TABLE テーブル名 CHANGE 元カラム名 新アラム名(列の型); ``` <br> **・実例**[sample4-4.sql] ``` ALTER TABLE empinfo CHANGE year old INT; ``` <!--graph4-7.png --> <a href="https://i.loli.net/2019/04/24/5cbfcf741b363.png" target="_blank"> <img src="https://i.loli.net/2019/04/24/5cbfcf741b363.png" width="40%"/></a>
content
戻る