デフォルト値(初期値)の設定
列内に自動で設定できる値を指定します。
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]列の値は入力しません。
列名を指定して入力し、unit_priceの列には値を入力していません。
mysql> INSERT INTO syohin_master (syohin_no, syohin_name) VALUES ("SF010", "日傘");
入力を省略した[unit_price]列には、デフォルト値「99999」が入っていることがわかります。
ヒント CHECK制約
入力規則(CHECK制約)は、列に入力されるデータに、値や範囲などの入力規則を設定します。
制約の設定と同時に、許可する値の条件を設定します。
なお、MySQLではCHECK制約の機能は使えません。
連続番号機能付き列の設定
名簿の一覧番号など「1から1ずつ増える数字を入力する」列にいちいち入力するのは、間違いを起こす可能性もあり面倒です。
自動的に1から連続番号を入力してくれる機能を列に設定できます。
列に連続番号機能を設定するためには、次の3つの設定が必要です。
データ型は整数型にする
列にデータ型を定義する時に「AUTO_INCREMENT」キーワードをつける
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が設定されると、自動的に連番が振られます。
次のレコードを追加してみましょう。
[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」は必ず大文字で入力します。
【書式】インデックスの削除
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公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】