データベース構造の操作
mysqlへ接続してみる
SQLを実行するために、まずはデータベースへ接続をする必要がある。
データベースを扱うために、mysqlというデータベース管理システムを使用していた。
またこれまではmysqlを扱うために、SequelProというアプリケーションからデータベースを参照していたが、今回はターミナルからデータベースを操作してみる。
1 |
mysql -u root
|
このコマンドは「mysqlにユーザー名がrootで接続する」という意味。
SequelProで接続する際は以下のように入力。
この"ユーザ名: root"というところが、上記コマンドの"-u root"と対応している。
コマンドを入力して、以下のような画面が表示されれば正常に接続ができている。
データベースの確認をしてみる
ここまででmysqlに接続することができた。
SequelProでいうと、以下の画面まで来たということになる。
次に、現在どのようなデータベースが存在するかを確認してみる。
SHOW DATABASES文
SHOW DATABASES
文はデータベースを一覧で表示するSQL文。
mysqlで以下のSQL文を実行
1 |
SHOW DATABASES;
|
SQL文の終わりには ;
(セミコロン)を付ける
SQL文の終わりには必ずセミコロンを付ける必要がある。
もしセミコロンを忘れて実行した場合は、SQLがまだ続くものだとみなされ、以下のような矢印マーク ->
が現れる。
この場合は続けてセミコロンのみを入力し、再度エンターを押していただければ正常に実行がされる。
SQL文を実行すると以下のように、今まで作ってきたデータベースが一覧で表示される。
データベースを作成してみる
今まではrake db:create
というコマンドを実行することでRailsがデータベースを作成してくれていたが、ここではターミナルから直接データベースを作成してみる。
CREATE DATABASE文
SQLの中で、データベースやテーブルを作成する際はCREATE
命令を使用する。
CREATE DATABASE
文を実行すると、指定した名前のデータベースが作成される。
実行時には以下のようにデータベース名を指定する必要がある。
1 |
CREATE DATABASE データベース名;
|
それでは実際に"sqltest"という名前のデータベースを作成してみる。
ターミナルで以下のSQLを実行
1 |
CREATE DATABASE sqltest;
|
以下のように表示がされれば正常にデータベースが作成されている。
ここでもう一度データベースの一覧を表示し、データベースが作成されているかを確認。
mysqlで以下のSQL文を実行
1 |
SHOW DATABASES;
|
これまでSHOW DATABASES
やCREATE DATABASE
のように、SQLの中で特別な意味を持つ単語は大文字で記載してきたが、実際にSQL文を入力するときは全て小文字でも正常に実行することが出来る。
表示された一覧に"sqltest"というデータベースが追加されていることを確認する。
データベースを選択してみる
CREATE DATABASE
文を使用することでできた、"sqltest"という名前のデータベースで作業をしていきたいが、そのためにはまずデータベースを選択する必要がある。
SequelProでも以下のようにデータベースを選択。
このデータベースの選択を、今回はターミナル上で行う。
USE文
USE
文はデータベースを選択するSQL文。
実行時には以下のようにデータベース名を指定する必要がある。
1 |
USE データベース名;
|
実際に"sqltest"というデータベースを選択してみる。
mysqlで以下のSQL文を実行
1 |
USE sqltest;
|
以下のように表示がされていれば正常にデータベースの選択が出来ている。
テーブル構造の操作
データベースの作成と選択が出来たので、次はそのデータベースに対してテーブルの作成やテーブル構造の変更をしてみる。
テーブルを確認
データベースにどのようなテーブルが存在するかを確認するSQL文について。
SHOW TABLES文
SHOW TABLES
文は、選択したデータベースに存在するテーブルを一覧で表示するSQL文。
mysqlで以下のSQL文を実行
1 |
SHOW TABLES;
|
以下のような表示がされれば正常にテーブルの一覧を表示することが出来ている。
"Empty set"とあることから、現段階ではまだテーブルが存在しないことが分かる。
テーブルを作成してみる
CREATE TABLE文
データベースの作成のときと同様に、テーブルを作成する際はCREATE
命令を使用する。
CREATE TABLE
文はテーブルを作成するためのSQL文。
実行時には以下のようにテーブル名を指定する必要がある。
また、そのテーブルに作成するカラムの名前とそのカラムの型を指定することが出来る。
Railsでテーブルを作る際は、rails g model モデル名
でそのテーブルに紐づくモデルを作成し、そのときに作られたマイグレーションファイルをrake db:migrate
で実行する、という手順を踏んでいた。
そのrake db:migrate
が実行される裏側では、このCREATE TABLE
というSQL文が動いていたということになる。
では、mysqlからテーブルを作ってみる。
今回は、商品の情報を保存することを想定し、"goods"という名前のテーブルを作りたい。
そしてテーブルには商品idを数字で保存するidカラムと商品名を文字列で保存するnameカラムが必要であることとする。
ここでそれぞれのカラムの型はなんと書けば良いか。
Railsでは数字を入れる型は"Integer"、文字列を入れる型は"String"となっていた。
mysqlで数字型や文字列型を定義する際は以下のような型名を使用。
型名 | 保存できる値 |
---|---|
INT | 数字 |
VARCHAR(M) | 最大M文字の文字列 |
今回は"INT"型のカラム"id"と、"VARCHAR(255)"型のカラム"name"のある"goods"テーブルを作成してみる。
mysqlで以下のSQL文を実行
1 |
CREATE TABLE goods (id INT, name VARCHAR(255));
|
以下のように表示がされればSQL文が実行されている。
ここでもう一度SHOW TABLES
文を使用し、テーブルの一覧を確認。
1 |
SHOW TABLES;
|
以下のように"Tables_in_sqltest"に"goods"というテーブルが確認できれば、テーブルが正しく作成された。
テーブル構造を確認してみる
テーブル構造を確認するためには以下のようなSQL文を記述する。
1 |
SHOW columns FROM テーブル名;
|
実際にテーブル名の部分を"goods"に置き換えて実行をしてみる。
1 |
SHOW columns FROM goods;
|
以下のような表示がされれば正常に実行が出来ている。
実行結果から、goodsテーブルにはidとnameという2つのカラムがあることが確認できた。
カラムを追加してみる
テーブルカラムを追加する際はALTER TABLE
文を使用。
ALTER TABLE文
カラムの追加・修正・削除はすべてテーブル構造の変更である。
そのためSQL文は共通して、ALTER
命令を用いたALTER TABLE
文を使用する。
実行時は以下のような文法で使用。
1 |
ALTER TABLE テーブル名 操作
|
実際にカラムを追加するSQL文を見てみる。
カラムを追加するSQL文は以下のような文法で記述する。
・カラムを1つだけ追加する場合
1 |
ALTER TABLE テーブル名 ADD カラム名 カラムの型;
|
・カラムを複数追加する場合
1 |
ALTER TABLE テーブル名 ADD (カラム名 カラムの型, ……);
|
"price"と"zaiko"という2つのカラムを、共に"int"型で作成してみる。
1 |
ALTER TABLE goods ADD (price int, zaiko int);
|
以下のように結果が表示されていれば正常に実行が出来ている。
カラムを追加したのでテーブルの構造がどう変化したか確認。
1 |
SHOW columns FROM goods;
|
以下のようにカラムが追加されていることを確認。
カラムを修正してみる
カラムの修正は先ほど同様ALTER TABLE
文を使用し、以下のような文法でSQL文を記述する。
先ほど"zaiko"というカラムを追加したが、他のカラムに合わせてカラム名を英語表記にするため、"stock"という名前に変更してみる。
1 |
ALTER TABLE goods CHANGE zaiko stock int;
|
以下のように表示がされれば正常に実行が出来ている。
このとき、カラムの型は変更しなくても、再度記述をしなくてはならない。
なので、カラムの修正をするときはこの型の部分を間違えないように注意をする必要がある。
先ほどと同様にカラムが変更されていることを確認。
カラムを削除してみる
最後にカラムを削除する方法について。
カラムの削除にもALTER TABLE
文を使用し、以下のようにSQL文を記述する。
"stock"カラムが不要になった、と想定してカラムの削除を行ってみる。
1 |
ALTER TABLE goods DROP stock;
|
以下のように表示がされていれば正常に実行が出来ている。
カラムの一覧を表示し、カラムがきちんと削除されていることを確認。