未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【DB入門】テーブルの修正 Part3

title


デフォルト値(初期値)の設定

列内に自動で設定できる値を指定します。

INSERT文などでレコードを入力する際に、テーブル内のすべての列にデータを入力せず省略した場合、省略された列には自動的にデフォルト値(初期値)が入ります。

デフォルト値が未設定の場合は、NULL値が入ります。

デフォルト値は厳密には制約ではありませんが、テーブル内にNULL値が入ることを防ぐことができます。



【書式】デフォルト値の設定をしてテーブルを作成する

CREATE TABLE テーブル名 ( 列名 データ型 DEFAULT デフォルト値 );


【書式】すでにあるテーブルの列にデフォルト値を設定する

ALTER TABLE テーブル名 ALTER COLUMN 列名 SET DEFAULT デフォルト値;



ポイント

ALTER TABLE文によるデフォルト値の追加設定は、他の制約と構文が異なるので注意しましょう。

NOT NULL制約の追加と同様に、CHANGE COLUMN句で列ごと定義変更を行うこともできます。



次の例は、[syohin_master]テーブルの[unit_price]列にデフォルト値「99999」を設定しています。

mysql> ALTER TABLE syohin_master ALTER COLUMN unit_price SET DEFAULT 99999;
Query OK, 0 rows affected (0.34 sec)



[unit_price]列のデフォルト値が「99999」に設定されています。

デフォルト値



[syohin_master]に、次のレコードを追加します。

[unit_price]列の値は入力しません。

syohin_master



列名を指定して入力し、unit_priceの列には値を入力していません。

mysql> INSERT INTO syohin_master (syohin_no, syohin_name) VALUES ("SF010", "日傘");



入力を省略した[unit_price]列には、デフォルト値「99999」が入っていることがわかります。

テーブル確認



ヒント CHECK制約

入力規則(CHECK制約)は、列に入力されるデータに、値や範囲などの入力規則を設定します。

制約の設定と同時に、許可する値の条件を設定します。

なお、MySQLではCHECK制約の機能は使えません。



連続番号機能付き列の設定

名簿の一覧番号など「1から1ずつ増える数字を入力する」列にいちいち入力するのは、間違いを起こす可能性もあり面倒です。

自動的に1から連続番号を入力してくれる機能を列に設定できます。


列に連続番号機能を設定するためには、次の3つの設定が必要です。

  1. データ型は整数型にする

  2. 列にデータ型を定義する時に「AUTO_INCREMENT」キーワードをつける

  3. PRIMARY KEY設定やUNIQUE制約設定をする



【書式】連続番号機能付き列の作成

CREATE TABLE テーブル名 ( 列名 データ型 AUTO_INCREMENT );


【書式】連続番号機能付き列に変更する

ALTER TABLE テーブル名 MODIFY 列名 データ型 AUTO_INCREMENT;



次の例は、[syain_master]テーブルの[serial_no]列にAUTO_INCREMENTを設定しています。

mysql> ALTER TABLE syain_master MODIFY serial_no INT AUTO_INCREMENT;
Query OK, 8 rows affected (0.05 sec)



[serial_no]列の「Extra」に「AUTO_INCREMENT」が設定されています。

AUTO_INCREMENT



AUTO_INCREMENTが設定されると、自動的に連番が振られます。

データ確認



次のレコードを追加してみましょう。

[serial_no][furigana]は入力しません。

レコード追加


mysql> INSERT INTO syain_mster
    -> ( syain_no, syain_name, shop_no )
    -> VALUES
    -> ( "F999S", "田中里美", "T005I");
Query OK, 1 row affected (0.02 sec)



追加したレコードは既存の連番の次の番号が振られています。

データ確認



ポイント レコードの順番

データベースは一意のレコードのかたまりなので、レコードに順番はありません。

上の結果では、serial_noの6と7の間に9が入っています。

見た目上、順番に表示したいような場合には「ORDER BY」というキーワードを使います。



【書式】連続番号の初期値を設定する

ALTER TABLE テーブル名 AUTO_INCREMENT=初期値;


AUTO_INCREMENTを設定すると、何もしないと1から始まります。

もし、テーブルに含まれているデータをいったん削除して、データを追加すると、前のレコードの続きの連番が振られます。



次の例は、AUTO_INCREMENTの初期値を100に設定しています。

mysql> ALTER TABLE syain_master AUTO_INCREMENT=100;
Query OK, 9 rows affected (0.09 sec)



いったんテーブルのデータを削除します。

mysql> DELETE FROM syain_master;
Query OK, 9 rows affected (0.00 sec)

mysql> SELECT * FROM syain_master;
Empty set (0.00 sec)



下記のSQL文を、C:¥db_primary¥syain_master_autoincrementdata.txt として保存します。

[C:¥db_primary¥syain_master_autoincrementdata.txt]

INSERT INTO syain_master ( syain_no, syain_name, shop_no ) VALUES
("F001M", "安藤美津香", "T001S"),
("M003S", "村井武", "T001S"),
("F001C", "岡村恵子", "T003G"),
("F002A", "奥村和子", "T005I"),
("F005S", "河合多恵", "K001Y"),
("F006S", "丸井のどか", "K001Y"),
("F002M", "近藤あさみ", "T001S")
;



sourceコマンドを使って、データを挿入します。

mysql> source C:¥db_primary¥syain_master_autoincrementdata.txt
Query OK, 7 rows affected (0.01 sec)



serial_noが100から始まっていることを確認します。

データ確認



インデックスの設定

テーブル内に膨大なデータが登録されていると、データを検索する際に、1レコードずつ情報を調べていると時間がかかってしまいます。

このような場合に、テーブルに索引をつけます。

テーブルに設定する索引を、インデックス(INDEX)といいます。

あらかじめ、テーブルにインデックスを設定しておくと、検索する際に、テーブルそのものではなくインデックスを利用することになります。

レコード数が少ない場合には、インデックスを設定してもほとんど意味がありませんが、企業で運用されている大規模なテーブルでは、インデックスの設定が処理速度に影響することがあります。



【書式】インデックスの設定

CREATE INDEX インデックス名 ON テーブル名 ( 列名 );


列名は、検索条件として良く使われる列を指定します。



次の例は、「syain_no_const」というインデックス名で、syain_masterテーブルのsyain_no列にインデックスを設定しています。

mysql> CREATE INDEX syain_no_const ON syain_master ( syain_no );
Query OK, 0 rows affected (0.11 sec)



インデックスが設定されたことは、DESCコマンドを実行してもわかりません。

インデックスはSHOW INDEXコマンドを使うと、インデックスのリストを確認することができます。



【書式】インデックスの表示

SHOW INDEX FROM テーブル名;


インデックスの表示



ヒント MySQLモニタの便利な機能

SQL文実行時に、1行に表示するデータが多いと、表示が見づらくなってしまいます。

MySQLには、列ごとに情報をまとめて表示する機能が備わっています。

SQL命令文の最後に、セミコロンではなく「¥G」と入力をします。

「G」は必ず大文字で入力します。

MySQLモニタ



【書式】インデックスの削除

DROP INDEX インデックス名 ON テーブル名;



次の例は、syain_masterテーブルのsyain_no列に設定したsyain_no_constインデックスを削除しています。

mysql> DROP INDEX syain_no_const ON syain_master;
Query OK, 0 rows affected (0.11 sec)



インデックス情報からsyain_no_constが消えていることがわかります。

結果確認


参考図書



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加



【まついのLINE公式アカウントはこちらから!】
Line公式アカウント