SQL初心者のおぼえがき(1)
SQLとは
ウィキペディアより引用
SQL(エスキューエル英語 i [ˈɛs kjuː ˈɛl]、シークェル英語 i [ˈsiːkwəl]、シーケル)は、リレーショナルデータベース管理システム (RDBMS) において、データの操作や定義を行うためのデータベース言語(問い合わせ言語)である。
SQL - ウィキペディア
https://ja.wikipedia.org/wiki/SQL
つまるところ、アプリとかWEBサービスとかを作る際に、ユーザーの情報だとかを保持するために必要な「データベース」を操作するための言語ということですね。
データベースにも幾つか種類があるのですが、その中でもメジャーなMySQLを勉強しました。
勉強するにあたって、下記のサイトをもとに参考にしました。dotinstall.com
MySQLのインストール
まずはMySQLのインストールから。インストール手順、セキュリティ設定などは以下のサイトを参考に。qiita.com
今回はSQLの勉強がメインということで作業ユーザの設定などは行いません。
用語
データベース(DB)
特定のテーマに沿ったデータを集めて管理し、容易に検索・抽出などの再利用をできるようにしたもの。
データベースをコンピュータ上で管理するためのシステムをデータベース管理システム (Database Management System, DBMS) という。
テーブル
データベースにおける表のことで、ExelのSheetをイメージするといいと思います。
データベースの中にいくつかテーブルを作ることができるんですね。
Exelには無数の行列がありますが、一方でデータベースでのテーブルは所定の個数の列があり、行数は不定です。各行は特定の列の値で識別され、それを候補キーと呼びます。
フィールド
列。
レコード
各フィールドに対応するデータ。行。
データベースの操作
それでは、実際にMySQLの起動、操作に移っていきます。
データベースの作成
mysql> create database test_database;
ここではtest_databaseという名前のデータベースを作成します。
ちなみに「;」を忘れると以下のように入力待ちになります。(次の行でセミコロン打っても大丈夫)
mysql> create database test_database -> ;
作成したデータベースを見る
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | test_database | +--------------------+ 5 rows in set (0.00 sec)
こんな感じのでました。デフォルトでいくつか入ってるんですね。databasesは複数形なので注意です。
作成したデータベースを削除する
mysql> drop database test_database;
確認
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.01 sec)
簡単に消えてしまいました。これはこれで注意が必要そう。
作業データベースの変更
mysql> use test_database; Database changed
テーブルの作成
create table [テーブル名](フィールド名 型, フィールド名 型, ・・・);
mysql> create table users( -> id int, -> name varchar(255), -> email varchar(255), -> password char(8) -> );
ここで、intは整数型、varchar(255)は255文字までの文字列、char(8)は8文字の文字列ということを指定します。
他にも、浮動小数点のdouble型、列挙型と言われるenum、文字列の長さがわからない場合のtextなどがあります。
mysql> show tables; +-------------------------+ | Tables_in_test_database | +-------------------------+ | users | +-------------------------+ 1 row in set (0.00 sec)
入力を必須にする
-> id int not null,
自動連番
-> id int not null auto_increment,
デフォルト値
-> sex enum('male', 'female') default 'male',
索引(インデックス)
主キー:レコードを一意に特定するキー
-> id int not null auto_increment primary key,
キー:普通の索引キー
-> key score (score),
ユニークキー:重複した値が入ってきた時にエラーではじく
-> email varchar(255) unique,
これらを基に、あらたに表を作成します。
ちなみに列挙型enumは、1が'male'、2が'female'を示します。
mysql> create table users( -> id int not null auto_increment primary key, -> name varchar(255), -> email varchar(255) unique, -> password char(8), -> score double, -> sex enum('male', 'female') default 'male', -> key score (score) -> );
テーブルの中身を確認
mysql> desc users; +----------+-----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-----------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | email | varchar(255) | YES | UNI | NULL | | | password | char(8) | YES | | NULL | | | score | double | YES | MUL | NULL | | | sex | enum('male','female') | YES | | male | | +----------+-----------------------+------+-----+---------+----------------+ 6 rows in set (0.01 sec)
幅が足りなくて見づらくなってしまいました。
が、ターミナル上では見やすく表示されるはずです。
レコードの挿入
対応する引数に値を代入し、レコードを作成します。
mysql> insert into users (name, email, password, score) -> values ('takuya', 'takuya@email.com', 'xxxx', 5.5);
データを抽出
挿入したレコードを表示させます。
mysql> select * from users; +----+--------+------------------+----------+-------+------+ | id | name | email | password | score | sex | +----+--------+------------------+----------+-------+------+ | 1 | takuya | takuya@email.com | xxxx | 5.5 | male | +----+--------+------------------+----------+-------+------+ 1 row in set (0.00 sec)
select文についてはまた後述します。
アスタリスク(*)はレコードを全部指定するということです。
挿入したレコードがきちんと表示されました。
長くなってしまったので、続きは次回に回したいと思います。(更新しました)yuzatakujp1013.hatenablog.com