オプション
前回作成したデータベース「school」に、「teacher」というテーブルを追加します。
ターミナルで以下のSQLを実行します。
create table teacher
(
number int auto_increment primary key comment ‘先生の番号’,
name varchar(32) not null comment ‘先生の名前’,
create_datetime datetime comment ‘登録日時’,
update_datetime datetime comment ‘更新日時’
);
前回と異なる点について解説します。
「auto_increment」は文字通り「自動でインクリメント」という意味です。これを指定すると、データを追加するとき、MySQLが自動的に「1」「2」「3」…と番号を採番しながら登録してくれます。numberには、自動的に「1」「2」「3」…という番号が登録されるのです。
「primary key」は「主キー」という意味になります。
例えば下図を見て下さい。name(名前)が「鈴木一郎」で同じデータが複数あったとします。しかし、numberが異なれば、それぞれの鈴木一郎を識別することができます。マイナンバーのように特定の誰か・何かを識別する番号を、データベースでは「主キー」と呼びます。このように、データが重複しても別々のデータと識別できるように、データベースでは基本的には主キーを設けるようにします。
「not null」は「nullデータを許可しない(=登録時に空データは許可しない)」という意味です。(nullとは、意味をもたないデータ、という意味です)
例えば下図のように、「not null」を指定したカラムnameに対し、空のデータを登録しようとすると、エラーとなって登録できません。
コードに不具合があって、誤って空データを登録してしまうことを防ぐことができます。
teacherテーブルの構造を見てみます。
show fields from teacher;
Extraの箇所に「auto_increment」、Keyの箇所に「PRI(=primary key)」、Nullの箇所に「NO(=NullはNO=Nullを許可しない)」と表示されることが分かります。
これらの「Null」「Key」「Extra」、そして前回説明した「Default」の項目を、「オプション」項目と言います。
なお、「create table」時、numberには「not null」を指定していませんが、テーブル構造を見ると、Nullの箇所が「NO」となっています。これは、「primary key」を指定したカラムだからです。「primary key」を指定したカラムは、MySQLが自動的に、Nullを許可しないようにしてくれるのです。主キーでデータを識別するので、何らかの値をもつ必要があるためです。
データ操作
レコードの挿入
データベースのテーブルにレコードを追加します。
ターミナルで以下のSQLを実行します。
insert into student (number, name, create_datetime, update_datetime) values (1, “鈴木一郎”, NOW(), NOW());
「insert into student」は「studentテーブルに(レコードを)挿入する」という意味です。次の「(number, name, create_datetime, update_datetime)」は作成したカラム名を指定します。次の「values (1, “鈴木一郎”, NOW(), NOW())」は、カラムに対応する値として「(1, “鈴木一郎”, NOW(), NOW())」を挿入する、という意味になります。
ここで「NOW()」はMySQLがもつ関数で、現在日時を取得することができます。
teacherテーブルにもレコードを挿入してみます。
insert into teacher (name, create_datetime, update_datetime) values (“山田花子”, NOW(), NOW());
今度は、カラム名として「number」を指定していません。
これは、teacherテーブルを作成する際、「primary key」と「auto_increment」を指定したためです。これらのオプションを指定して作成したカラムは、insert時に明示的にカラムと値を指定しなくても、MySQLが自動的に「1」「2」「3」という値を挿入してくれます。
レコードの取得
挿入したレコードが、正常にテーブルに挿入されているかを確認します。
ターミナルで以下のSQLを実行します。
select * from student;
文字通り「studentテーブルから選択(データを取得)する」という意味です。
「*」は「すべてのカラム」という意味です。つなげると「studentテーブルからすべてのカラムのデータを取得する」という意味になります。
すべてのカラムではなく、特定のカラムのデータのみを取得することもできます。
select number from student;
特定のカラムのデータのみを取得したい場合、selectの後にそのカラム名を指定します。
複数のカラムのデータを取得したい場合は、以下のようにカンマ区切りで複数のカラムを指定します。
select number,name from student;
レコードの更新
挿入したレコードの値を更新します。
ターミナルで以下のSQLを実行します。
update student set name=”山田太郎” where number=1;
「update student」は文字通り「studentテーブルを更新する」という意味です。次の「set name=”山田太郎”」は「カラムnameの値として”山田太郎”を設定する」という意味です。「where number=1」は「カラムnumberの値が1の場合に(レコードを抽出する)」という意味です。すなわち、「studentテーブルのカラムnumberの値が1のレコードを抽出し、そのレコードのカラムnameの値として”山田太郎”を設定する」という意味になります。
レコードを取得してみます。
nameが「山田太郎」に更新されていることが分かります。
複数のカラムの値を更新したい場合は、以下のようにカンマ区切りで指定します。
update student set name=”山田太郎”,update_datetime=NOW() where number=1;
レコードの削除
挿入したレコードの値を削除します。
ターミナルで以下のSQLを実行します。
delete from student where number=1;
「delete from student」は「studentテーブルから(レコードを)削除する」という意味です。「where number=1」は「カラムnumberの値が1のところに(レコードに)」という意味です。すなわち、「studentテーブルのカラムnumberの値が1のレコードを削除する」という意味になります。
レコードを取得してみます。
「Empty」と表示されており、レコードが削除されたことが分かります。
本節の説明は以上になります。