mySQL 기본 사용법 정리/예제

용상윤·2021년 4월 20일
3

네이버 부스트코스 웹 프로그래밍(풀스택) todo-list 과제를 끝내고 정리하기 (과제관련 소스코드는 없습니다.)

mysql -uroot -p
나의 mysql 계정으로 접속한다.

SHOW DATABASES;
생성된 데이터베이스를 확인할 수 있다.

use 데이터베이스이름;
해당 데이터베이스에 접속한다.

SHOW TABLES;
테이블의 목록을 확인할 수 있다.


📌 데이터베이스 생성하기

  1. root 계정 접속 후
  2. 명령어 입력
    CREATE DATABASE 데이터베이스이름 default CHARACTER SET UTF8;

👉 todo_db 라는 데이터베이스를 생성하기
CREATE DATABASE todo_db default CHARACTER SET UTF8;


📌 데이터베이스 삭제하기

DROP DATABASE 데이터베이스이름;


📌 유저 확인하기

  1. root 계정 접속 후
  2. 데이터베이스 선택
    use mysql
  3. 명령어 입력
    SELECT USER, HOST FROM user;

👉 유저확인

mysql> use mysql;
Database changed
mysql> SELECT USER, HOST FROM user;
+------------------+-----------+
| USER             | HOST      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| todo_user        | localhost |
+------------------+-----------+

📌 유저 삭제하기

유저 확인 후, 삭제하고 싶은 유저가 있다면
DELETE FROM USER WHERE user = '유저이름';

👉 todo_user 삭제하기

mysql> DELETE FROM USER WHERE user = "todo_user";
+------------------+-----------+
| USER             | HOST      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

❗ ERROR
ERROR 1396 (HY000): Operation CREATE USER failed for 'todo_user'@'localhost'

나중에 같은 이름으로 계정을 생성하려 할 때 이런 에러가 발생한다면

mysql> delete from mysql.user where user = 'todo_user';

mysql> delete from mysql.db where user = 'todo_user';

mysql> flush privileges;

로 남아있는 data를 삭제시켜주어야 한다.


📌 유저 생성하기

root 계정 접속 후
CREATE USER '유저이름'@'localhost' identified by '패스워드';

👉 pw가 todo, name 이 todo_user인 유저생성
CREATE USER 'todo_user'@'localhost' identified by 'todo';


📌 유저에게 DB 권한부여

GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 유저이름@localhost;
flush privileges;
exit

👉 todo_user에게 todo_db에 대한 권한부여
GRANT ALL PRIVILEGES ON todo_db.* TO todo_user@localhost;
flush privileges;
exit


📌 생성한 유저로 접속하기

mysql -utodo_user -p
show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| todo_db            |
+--------------------+

👉 todo_db 데이터베이스에 권한이 생겼음


📌 테이블 생성하기

  1. todo_user 계정으로 접속
    mysql -utodo_user -p

  2. 데이터베이스 목록보기
    show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| todo_db            |
+--------------------+
  1. todo_db라는 데이터베이스의 table 확인하기
mysql> use todo_db;
Database changed
mysql> show tables;
Empty set (0.01 sec)
  1. table 추가하기
CREATE TABLE 테이블이름 (
	컬럼명 데이터타입 ... ,
   	컬럼명 데이터타입 ... ,
    	...
        );

👉 todo 라는 테이블 생성하기

CREATE TABLE todo (
    id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, 
    title VARCHAR(255) NOT NULL, 
    name VARCHAR(100) NOT NULL,
    sequence INT(1) NOT NULL, 
    type VARCHAR(20) DEFAULT 'TODO', 
    regdate DATETIME DEFAULT NOW(), 
    PRIMARY KEY (id) 
    );
  1. "id" 컬럼 생성
    • 데이터타입 : BIGINT(20) UNSIGNED
    • 제약조건 : NOT NULL (null값을 가질 수 없음)
    • AUTO_INCREMENT : 1부터 자동으로 증가

  2. "title" 컬럼 생성
    • 데이터타입 : VARCHAR(255)
    • 제약조건 : NOT NULL

  3. "name" 컬럼 생성
    • 데이터타입 : VARCHAR(100)
    • 제약조건 : NOT NULL

  4. "sequence" 컬럼 생성
    • 데이터타입 : INT(1)
    • 제약조건 : NOT NULL

  5. "type" 컬럼 생성
    • 데이터타입 : VARCHAR(20)
    • default : null 값일 경우 기본값은 "TODO"

  6. "regdate" 컬럼 생성
    • 데이터타입 :
      DATETIME(문자열 형식이며 YYYY-MM-DD HH:MM:SS 형식)
    • default : now() 라는 내장함수 사용

  7. 기본키는 "id"

📌 테이블 정보 보기

desc 테이블이름;

👉 todo 테이블 정보보기

mysql> desc todo;
+----------+-----------------+------+-----+-------------------+-------------------+
| Field    | Type            | Null | Key | Default           | Extra             |
+----------+-----------------+------+-----+-------------------+-------------------+
| id       | bigint unsigned | NO   | PRI | NULL              | auto_increment    |
| title    | varchar(255)    | NO   |     | NULL              |                   |
| name     | varchar(100)    | NO   |     | NULL              |                   |
| sequence | int             | NO   |     | NULL              |                   |
| type     | varchar(20)     | YES  |     | TODO              |                   |
| regdate  | datetime        | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+----------+-----------------+------+-----+-------------------+-------------------+
6 rows in set (0.02 sec)

👉 todo 테이블 모든 데이터 확인하기

mysql> SELECT * FROM todo;
Empty set (0.01 sec)

📌 테이블 데이터 추가하기

INSERT into 테이블이름 (컬럼1, 컬럼2, ...) values (컬럼1에 넣을 데이터, 컬럼2에 넣을 데이터 ...);

👉 todo 테이블에 데이터 넣기

  • title, name, sequence 만 넣어준다.
  • type, regdate 는 default 값을 설정했으므로 넣지 않아도 된다.
  • id는 default 값을 설정해주지 않았지만 AUTO_INCREMENT 설정으로 자동으로 1부터 시작한다.
mysql> INSERT into todo (title, name, sequence) values ("sql공부", "yong", "1");
mysql> INSERT into todo (title, name, sequence) values ("java공부", "yong", "1");
mysql> SELECT * FROM todo;

+----+----------+------+----------+------+---------------------+
| id | title    | name | sequence | type | regdate             |
+----+----------+------+----------+------+---------------------+
|  1 | sql공부  | yong |        1 | TODO | 2021-04-21 07:02:12 |
|  2 | java공부 | yong |        1 | TODO | 2021-04-21 07:02:19 |
+----+----------+------+----------+------+---------------------+
2 rows in set (0.00 sec)

📌 테이블 데이터 삭제하기

DELETE FROM 테이블이름 where 조건;

👉 todo 테이블에서 id가 2인 데이터 삭제하기

mysql> DELETE FROM todo where id=2;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM todo;
+----+---------+------+----------+------+---------------------+
| id | title   | name | sequence | type | regdate             |
+----+---------+------+----------+------+---------------------+
|  1 | sql공부 | yong |        1 | TODO | 2021-04-21 07:02:12 |
+----+---------+------+----------+------+---------------------+
1 row in set (0.00 sec)

📌 테이블 데이터 수정하기

UPDATE 테이블이름 SET 바꿀 속성 WHERE 조건;

👉 todo 테이블에서 id가 1인 데이터의 type을 DOING으로 바꾸기

mysql> UPDATE todo SET type = "DOING" WHERE id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM todo;
+----+---------+------+----------+-------+---------------------+
| id | title   | name | sequence | type  | regdate             |
+----+---------+------+----------+-------+---------------------+
|  1 | sql공부 | yong |        1 | DOING | 2021-04-21 07:02:12 |
+----+---------+------+----------+-------+---------------------+
1 row in set (0.00 sec)

IF 문 처럼 사용하기

👉 todo 테이블에서 id가 1인 데이터가 type이 "TODO"면 "DOING"으로, "DOING" 이면 "DONE"으로 수정하기

UPDATE todo
	SET type = CASE
    	WHEN type = TODO THEN DOING
    	WHEN type = DOING THEN DONE
    	ELSE DONE
    	END
    	WHERE id = 1;
profile
달리는 중!

0개의 댓글