엄범



```bash

sudo service mysql start

sudo mysql 또는 mysql -u root [-p] [db_name]

```

ERROR 1045 (28000): Access denied for user 뜨면서 안될 때는 패스워드를 설정해준다.

```bash

mysqladmin -u root -p password

```


SHOW

자주 쓰는 ``sql SHOW`` 명령어
```sql
help show;

SHOW DATABASES;
SHOW TABLES;
SHOW FIELDS FROM tbl_name;    -- Type | Null | Key | Default | Extra

```


SET PASSWORD

```sql
SET PASSWORD FOR user@host = PASSWORD('pw');
```
`` root@localhost``의 패스워드부터 설정한다.
`` user@host``형태로 지정하기 때문에 같은 user name이어도 어디에서 접근하느냐에 따라 패스워드를 다르게 줄 수 있다.

`` my.cnf`` 파일에 password 항목을 추가해놓으면 이 pw와 같은 pw를 가진 계정일 경우 패스워드 입력 없이 로그인 가능하다.
```
[client]
password         = pw
port             = 3306
socket           = ".../mysql.sock"
...
```

DB 생성 / 삭제

하나의 쿼리로 작성해야 한다.
```sql
CREATE DATABASE db_name
CHARACTER SET utf8 COLLATE utf8_general_ci;
```

* Collation은 특정 문자 셋으로 저장된 값들을 비교, 검색, 정렬하기 위한 비교 규칙들의 집합을 의미한다. utf8로 저장되었으니 utf8을 비교하기 위한 Collation을 지정해주어야 한다.

* ``sql CREATE``의 반대는 ``sql DROP``이다.


CREATE USER

`` ''``로 묶어주는 것이 좋다.
```sql
CREATE USER 'user'@'host' IDENTIFIED BY 'pw';
```
계정 정보는 모두 `` mysql`` DB에 저장되므로, 각 DB마다 DB에 속하는 계정을 가지고 있는 것이 아니다.
반대로 계정에 따라 접근할 수 있는 DB가 다르므로 계정에 DB가 속한다고 보는 것이 더 낫다.
각 계정의 DB, 테이블, 컬럼 권한 설정은 ``sql GRANT``로 한다.

mysql.user

계정 정보는 `` mysql``이라는 DB의 `` user`` 테이블에 들어있다.

```sql

SHOW DATABASES;


+--------------------+

| Database           |

+--------------------+

| information_schema |

| c9                 |

| mysql              |

| performance_schema |

| phpmyadmin         |

+--------------------+

```


따라서 계정을 추가하고 싶다면 여기에 ``sql INSERT``하는 방법도 있다.

```sql

SELECT host, user, password FROM mysql.user;


+------------------+--------------+--------------------------------------+

| user             | host         | password                             |

+------------------+--------------+--------------------------------------+

| umbum            | %            |                                      |

...

```

처음 접속하면 OS 계정 이름으로 password 없이 어디서든 접근할 수 있는( `` %`` ) 계정이 만들어져 있다.


익명 사용자 삭제

실수로 root를 삭제하면 재설치해야하니 반드시 root 패스워드를 설정한 다음에 진행한다.
```sql
use mysql;
DELETE FROM user WHERE password = '';
```

GRANT

```sql
GRANT all privileges ON db_name.* TO user@host;
flush privileges;
```