見出し画像

【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 主キーを設定する

まずは、主キーとはプライマリキーとも呼ばれ、下のようなイメージです。

https://wa3.i-3-i.info/word1991.html

では、下のコマンドで、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」カラムを作っています。

長くなってきましたので、今回はこちらで以上にいたします。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊