【MySQL】テーブルの作成〜カラムの変更・削除など(動画付き)
今回は、テーブルの作成について、一つ一つ順を追って見ていきたいと思います。
動画はこちらになります。
0 データベースの作成
任意のデータベースを作成してください。
ご不明な場合にはこちらをご参照ください。
https://note.com/standenglish/n/nc897697cbc4d
1 テーブルを作成する(おかしい部分は後で)
1ー1 テーブルを作成する
では、mysqlに接続して、テーブルを作っていきましょう。
データベースの中はたくさんのテーブル(表のようなイメージ)を作ります。
create table person (name varchar(20));
下のようになります。
なお、このテーブルは適切ではありません。その辺りは下の方で説明します。
ただ、これでテーブル自体は作成できました。
1ー2 データ型について
カラム(列)にどんなデータを入れるのかというのがデータ型です。
文字列なのか、数字なのか(整数なのか、小数なのか、。。。)、で決まってきます。
今回のvarchar(20)は可変の文字列です。
20文字以内の任意の文字列を入れることができます。
2 テーブルの構造を表示する
次のコマンドでテーブルの構造が確認できます。
describe person;
このようにテーブルができていることが確認できました。
desc person;
のように省略されることもあります。
3 レコードの挿入と確認
テーブルに追加される一行一行のデータ群をレコードと言います。
次のように一行追加してみましょう。
insert into person (name) values ('yuki');
下のようにレコードを追加しました。
では、実際に追加されたかを確認してみましょう。
select * from person;
4 このテーブルの何が良くない?
4ー1 一意性がない
4ー1ー1 問題の所在
全く同じ情報を追加したらどうなるでしょうか。
下のように、区別がつかなくなってしまいました。
これを防ぐためにIDのカラムを作りましょう。
4ー1ー2 レコードの削除
では、まずはすでに作られているレコードを削除します。
delete from person where name = "yuki";
where句を用いて、「name」が「yuki」のレコードを削除しています。
4ー1ー3 テーブルへのカラムの追加
では次のコマンドで、「id」のカラムを追加しましょう。
intは整数の型です。
alter table person add id int;
テーブルの構造を見ると、下のようにidが追加されていることがわかりました。
ただ、11ってなんでしょう?
4ー1ー4 整数型の桁数とunsigned
実はintは「-2,147,483,648 ~ 2,147,483,648」という10桁の値を表せます。
それに加え、正の値か負の値かも表現する必要がありますので、それに1を加えた11桁の情報が必要になります。
でも、idって、マイナスの値になって欲しくないですね。
このような場合は「unsigned」(0以上の正の値のみ)を指定します。
alter table person add uid int unsigned;
見てみると、下のように、「unsigned」が追加され、桁数も10桁になっています。
(0 ~ 4,294,967,295になりました)
4ー1ー5 カラムの削除
では、下のコマンドでカラムを削除しましょう。
alter table person drop column id;
「id」カラムが消えたことがわかります。
4ー1ー6 カラムの変更
intでIDで型を作りましたが、桁数が非常に多いです。
こんなに想定していないので、型をsmallint型のunsigned(0 ~ 65,535)に変えていきます。
alter table person change uid id smallint unsigned;
4ー1ー7 カラムの順番を変更する
IDは最初にあるとしっくりくるので、順番を変えたいと思います。(後からコマンドを修正しました。)
alter table person modify name varchar(20) after id;
下のように順番が変わりました。
4ー1ー8 IDを自動付番にする(今はエラーになる)
だんだん良くなってきましたね。
ただ、実際にレコードを作る時、IDも手入力を行うと、ミスが起こる可能性があります。(5の次に7が来たり)
そのため、自動付番がされるようにしましょう。
alter table person modify id smallint unsigned auto_increment;
「modify」を使って修正してみよう、とすると。。下のようにエラーが出てしまいました。
どうやら、「auto_increment」を設定するにはkeyの設定が必要なようですね。
4ー1ー9 主キーを設定する
まずは、主キーとはプライマリキーとも呼ばれ、下のようなイメージです。
では、下のコマンドで、IDに主キーを設定しましょう。
alter table person add primary key(id);
下のように、「Key」に「PRI」(Primary)がつきました。
4ー1ー10 NOT NULL制約を見てみる
「null」とは値がないことを意味します。
値に「null」を認めるかどうかの部分を見てみましょう。
このように主キーを設定したことでnull(値がない状態)を認めなくしています。
nullを認めてしまうと、値が一意に定まらないためです。
4ー1ー11 IDを自動付番にする
では、主キーの登録ができたので、改めて、「auto_increment」を設定しましょう。
alter table person modify id smallint unsigned auto_increment;
下のように、今回は無事に設定することができました。
4ー1ー12 自動付番の確認
では、実際にレコードを作成して、idが自動で付番されるか見てみましょう。
insert into person (name) values ("yuki");
下のように、うまくできたようです。
4ー2 一つのカラムに複数の情報がある
4ー2ー1 問題の所在
では、別の観点から見てみましょう。
現在「name」カラムがありますが、場合によっては氏名が入ります。
その場合、一つのカラムに「苗字」「名前」の2つの情報が入ることになり、これは適切ではありません。
4ー2ー2 カラムを分けていこう
では、具体的にやっていきましょう。
やることは今までと同様です。
alter table person change name first_name varchar(20);
こちらで、「name」カラムを「first_name」カラムに変更し、
alter table person add last_name varchar(20);
こちらで、新しく、「last_name」カラムを作っています。
長くなってきましたので、今回はこちらで以上にいたします。