MySQL　基礎

DOM途中で飽きたので、MySQLやる。
これ終わったらFlaskでなんか作る

# MySQLとは？
- Webアプリケーションでよく使われるデータベース
- オープンソースのリレーショナルデータベース・マネジメントシステム

[MySQL公式](https://www.mysql.com/jp/)

## データベースってなんや
- 検索や蓄積が容易に出来るように**整理された**データの集まり。

# データベース関連の用語
- 1アプリケーションに対して、１つのデータベースを作成する。
- テーブルをいう入れ物をDBの中に作って、そこにデータを格納していく。
    - エクセルの表みたいな感じでデータを管理

- フィールド：カラムのこと
    - カラムの名前はカラム名
- レコード：行のこと
    - データを管理しやすいようにレコードにはidを振る。
- クエリ: MySQLサーバーに対して投げるコマンド
    - 大文字でも小文字でも区別されない

## SQlって？
- データベース、テーブル、フィールドやレコードを扱う**言語**
- なんかの略ではない。

# DBを操作していくよ！！
#### データベースの作成

```:mysql
create database name;
```

#### データベースの削除

```:mysql
drop database name;
```

#### 選択されているデータベースの確認

```:mysql
select database();
use databasename;  //これでデータベース変える
```

#### テーブル作るよ
テーブル名： users
カラム名：id, name, age

```:SQL
create table users users(id int unsinged, name varchar(32), age int); //テーブル作成    
desc users; //表示
```
unsighnedってなんやね？
こんなんでてきた。

```:SQL
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| id    | int(10) unsigned | YES  |     | NULL    |       |
| name  | varchar(32)      | YES  |     | NULL    |       |
| age   | int(11)          | YES  |     | NULL    |       |
+-------+------------------+------+-----+---------+-------+
```
これで削除

```:SQL
drop table users;
```

##　データの挿入は？

```:SQL
insert into users (id ,name ,age) values (1, 'sato', 20);
insert into users (id ,name ,age) values (4, 'takahashi', null);　//　未設定はnull
```

これで呼び出す。
```select * from users;```

```:SQL
+------+-----------+------+
| id   | name      | age  |
+------+-----------+------+
|    1 | sato      |   20 |
|    2 | suzuki    |   20 |
|    3 | yamada    |   31 |
|    4 | takahashi | NULL |
+------+-----------+------+
```

## テーブル作成時のidカラムに関する設定
- auto_increment
    - MySQLが連番を振ってくれる。
- nut null
    - nullを許可しないよ！
- PRIMARY KEY
    - nullじゃない。
    - 重複しないことが保証される。
    - 1テーブルで1カラムだけ指定できる。
- default 1
    - デフォルトで1がはいるよ。 

```:MySQL
mysql> create table users(id int unsigned auto_increment not null primary key, 
    -> name varchar(32),
    -> age int not null default 1);
```

いろいろぶっこんだデータ

```:SQL
mysql> select * from users;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  1 | sato      |   18 |
|  2 | suzuki    |   22 |
|  3 | takahashi |   29 |
|  4 | tanaka    |   30 |
|  5 | ito       |   19 |
|  6 | watanabe  |   20 |
|  7 | yamamoto  | NULL |
+----+-----------+------+
```

名前とageだけとってくる

```:SQL
mysql> select name, age from users;                                                                                                                                                        
+-----------+------+
| name      | age  |
+-----------+------+
| sato      |   18 |
| suzuki    |   22 |
| takahashi |   29 |
| tanaka    |   30 |
| ito       |   19 |
| watanabe  |   20 |
| yamamoto  | NULL |
+-----------+------+
```

#### 条件指定で持ってくる

```:SQL
mysql> select * from users where id = 1;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | sato |   18 |
+----+------+------+
```

idが1,2,3のどれか

```:SQL
mysql> select * from users where id in (1, 2, 3);
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  1 | sato      |   18 |
|  2 | suzuki    |   22 |
|  3 | takahashi |   29 |
+----+-----------+------+
```

idが1,2,3以外

```:SQL
mysql> select * from users where id not in (1, 2, 3);                                                                                                                                      
+----+----------+------+
| id | name     | age  |
+----+----------+------+
|  4 | tanaka   |   30 |
|  5 | ito      |   19 |
|  6 | watanabe |   20 |
|  7 | yamamoto | NULL |
+----+----------+------+
```

#### パターンマッチ
Like文

```
select * from users where name like 's%'; // %は0文字以上の任意の文字列
+----+--------+------+
| id | name   | age  |
+----+--------+------+
|  1 | sato   |   18 |
|  2 | suzuki |   22 |
+----+--------+------+
```

##　更新

```:SQL
update users set age = 40 where id = 1 ;

mysql> select * from users;
+----+-----------+------+
| id | name      | age  |
+----+-----------+------+
|  1 | sato      |   40 |
|  2 | suzuki    |   22 |
|  3 | takahashi |   29 |
|  4 | tanaka    |   30 |
|  5 | ito       |   19 |
|  6 | watanabe  |   20 |
|  7 | yamamoto  | NULL |
+----+-----------+------+
```

## 削除

```
delete from users where id=1;
```