Edited at

PHPをやってみたいので、MySQLもやってみる(その2)

More than 3 years have passed since last update.


はじめに

この記事はPHPをやってみたいので、MySQLもやってみるの続きです。

備忘録なので、足りない分や、もっとこうしたらよかったとかは、後から追加修正していきます。


作業ユーザーをつくる


なんで作業ユーザーを作るの?

rootユーザーは特別なユーザーで、すべてのデータベースにアクセスすることができる為、間違った操作を行なった場合、すべてのデータベースに影響を及ぼしてしまう。

通常はrootユーザーでの作業は行わなず、そのデータベースにだけアクセスできる作業ユーザーを作るのが一般的だそうな。


作業ユーザー作成手順

まずはデータベースを作成。

//mysqlにログイン

sudo mysql -u root -p

//データベースを作成
mysql> create database test;

作業ユーザーを作成。

mysql> grant all on test.* to testuser@localhost identified by 'password';

上記コマンドの意味は。


grant all on(許可を与える)


test.*(testというデータベースのすべてのテーブル))


testuser@localhost(testuserというユーザーに対して))
identified by 'password'(パスワードは'password'))


作成した作業ユーザーで、ログインできるか試す。

//一旦ログアウトする。

mysql> exit

//作った作業ユーザーでログインしてみる
mysql -u testuser -p

//ログインできた!
mysql>


テーブルを作る

データベースも、作業ユーザーもできたところで、次はテーブルを作ってみる。

create table {DB名} ({フィールド名} {レコードの型});

create table mytable (
id int,
name varchar(100)
)

もし、下記のようなエラーがでたらuse {データベース名}でデータベースを切り替えてください。

ERROR 1046 (3D000): No database selected


作成したテーブルを確認する

mysql> show tables;

+----------------+
| Tables_in_test |
+----------------+
| mytable |
+----------------+


テーブルを削除する

mysql> drop table mytable;


テーブルの構造を見る

//desc {table名}

mysql> desc mytable;

+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------


テーブルのレコードで使える型(よく使うもの)

MySQLのデータ型でよく使うものは下記のようです。下記記載以外にも沢山あります。


数値

型名
説明 

int
整数
123

double
浮動小数点数
1.23


文字列

型名
説明 

char(n)
固定長の文字列(255文字以下)

varchar(n)
可変長文字列

text
どのくらいの文字列が入るかわからない場合


日付

型名
説明 
 例

date
日付
2016-10-10

datetime
日付と時刻
2009-10-04 15:25:07


その他

型名
説明 
 例

enum('value1','value2',...)
文字列定数リスト
男性 女性


フィールドのオプション設定


入力値を必須にする

not nullはnullを許可しないオプション。指定することによってそのレコードを挿入する際にフィールドがnull入力ができなくなる。

id int not null


デフォルト値

レコードのデフォルト値を設定できる。ただし、設定することができるのは 定数のみ

例外としてTIMESTAMP型が設定できるっぽい。

sex enum('male', 'female') default 'male'


自動連番

auto_increment は整数型のみ指定できるオプション。

自動的に連番の値を設定してくれる。

id int auto_increment


索引(インデックス)

インデックスをフィールドに設定しておくと、そのフィールドで検索した場合動作が早くなる。

ただし、挿入する場合はインデックスを貼り過ぎていると、インデックスを作りなおす処理が走るため動作が重くなる。


主キー

レコード一意に特定する、idなどに使用する。

主キーとはユニークなレコードを作りたいときに使用します。


主キーの条件


  • 値の重複がない

  • データは必須入力。


id int not null auto_increment primary key,


キー

よく検索するフィールドに設定する。いくつでも設定できる。

//key {keyの名前} {フィールド名}

key mynumber(mynumber)


ユニークキー

ユニークキーが設定されたフィールドでは値を重複設定することができない。emailなどで使われる。

email varchar(255) unique


まとめ

フィールドの型の種類や、オプションの設定について少しわかったので、レコード設定についても調べていこうと思います。