00 개요
- 목적: docker를 이용하여 MySQL에 접속하여 데이터를 저장하기 위한 table 생성하는 실습 진행
01 docker 접속
- 조건: 접속하기 전 사용하고자 하는 docker 가 실행(run) 중이어야 함
- docker 열어서 해당 컨테이너 실행하기 (run)
# 문법
docker exec -it 컨테이너명 bash
$ docker exec -it todos bash
bash-4.4#
- docker 안에 있는 todos 컨테이너의 bash 쉘을 사용하게 하는 명령어
02 MySQL 접속
# 문법
bash-4.4# mysql -u 사용자 -p
bash-4.4# mysql -u root -p
- root 사용자를 통해 mysql에 접속하게 하는 명령어
- -p 옵션 뒤에 입력 안하고 enter 누를 시 비밀번호를 따로 입력해주겠다는 뜻
- enter 누를 시 'Enter password:'라고 뜸 - 비밀번호(todos) 입력 후 enter 누르면 mysql에 접속하게 됨
bash-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36 MySQL Community Server - GPL
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
03 MySQL 사용
1. 데이터베이스 조회
# 문법
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| todos |
+--------------------+
5 rows in set (0.00 sec)
- 5개의 데이터베이스 출력됨
- 마지막 'todos' 데이터베이스는 우리가 환경변수로 컨테이너가 동작을 할 때 생성을 요청을 했던 데이터베이스라서 생성되어 있는 것
- 그 외에 4개의 데이터베이스는 MySQL이 시스템 관리를 위해 기본적으로 생성한 데이터베이스들임
2. 데이터베이스 사용
# 문법
USE 데이터베이스명;
mysql> use todos;
Database changed
- 'todos' 데이터베이스 사용하게 하는 명령어
3. 테이블 생성
# 문법
CREATE TABLE 테이블명(
컬럼명1 데이터타입 조건,
컬럼명2 데이터타입 조건,
컬럼명3 데이터타입 조건,
...
);
mysql> create table todo(
-> id INT NOT NULL AUTO_INCREMENT,
-> contents VARCHAR(256) NOT NULL,
-> is_done BOOLEAN NOT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.08 sec)
- CREATE TABLE이라는 명령어 사용하여 테이블 생성함
- 테이블명: todo
- INT: 정수로 데이터타입 지정
- NOT NULL: 빈값이 될 수 없음을 지정
- AUTO_INCREMENT: 별도로 입력하지 않아도 자동으로 id 값이 1씩 늘어나며 할당됨
- VARCHAR(256): 캐릭터 256자로 데이터타입 지정
- BOOLEAN: boolean으로 데이터타입 지정
- PRIMARY KEY (id): id 컬럼을 PRIMARY KEY로 지정
4. 레코드 추가
1) 한 레코드 추가
# 문법
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, ...)
VALUES (컬럼1값, 컬럼2값, ...);
mysql> insert into todo (contents, is_done)
-> values ("FastAPI Section 0", true);
Query OK, 1 row affected (0.03 sec)
- id 값은 별도로 입력 안해도 AUTO_INCREMENT 옵션으로 인해 MySQL이 자동으로 id값을 할당함
2) 여러 레코드 추가
# 문법
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (컬럼1값, 컬럼2값, ...),
(컬럼1값, 컬럼2값, ...),
(컬럼1값, 컬럼2값, ...);
mysql> insert into todo (contents, is_done)
-> values ("FastAPI Section 2", true),
-> ("FastAPI Section 3", false);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
5. 전체 테이블 확인
# 문법
SELECT * FROM 테이블명;
mysql> select * from todo;
+----+-------------------+---------+
| id | contents | is_done |
+----+-------------------+---------+
| 1 | FastAPI Section 0 | 1 |
| 2 | FastAPI Section 2 | 1 |
| 3 | FastAPI Section 3 | 0 |
+----+-------------------+---------+
3 rows in set (0.00 sec)
- contents와 is_done 값은 우리가 입력한 대로 값이 들어감을 확인
- id 값은 우리가 따로 입력하지 않아도 자동으로 1부터 하나 씩 값이 올라가며 할당됨을 확인