Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

탐구개발

MySQL 데이터베이스 생성 본문

프로젝트

MySQL 데이터베이스 생성

탐구개발자 2023. 11. 8. 14:40

MySQL 설치가 완료된 후 다음과 같은 순서로 새로운 데이터베이스를 구축하겠습니다

 

  1. 새 데이터베이스 생성
  2. 사용자 생성 및 권한부여
  3. 테이블 생성

 

1. 새 데이터베이스 생성

Docker 컨테이너에서 MySQL 콘솔에 접속합니다.

mysql -u root

새로운 데이터베이스를 생성합니다.

CREATE DATABASE {DB이름} default CHARACTER SET UTF8;

생성된 데이터베이스를 확인합니다.

show databases;

 

실제 실행화면입니다.

root@963aee83dd50:/# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.09 sec)
mysql> CREATE DATABASE somoim_db default CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.06 sec)

 

2. 사용자 생성 및 권한부여

데이터베이스를 사용할 사용자를 생성합니다.

CREATE USER {사용자명}@localhost IDENTIFIED BY '{비밀번호}';

새로 생성한 사용자에게 권한을 부여합니다.

GRANT ALL PRIVILEGES ON {데이터베이스명}.* TO {사용자명}@localhost;

새로운 설정을 즉시 반영합니다.

FLUSH PRIVILEGES;

현재 root 계정으로 사용 중인 콘솔을 종료하고 새로운 사용자계정으로 로그인하겠습니다.

EXIT;

mysql -u study_user -p

 

 

실제 실행화면입니다.

mysql>  CREATE USER somoim_user2@localhost IDENTIFIED BY 'somoim';
Query OK, 0 rows affected (0.07 sec)
mysql>  GRANT ALL PRIVILEGES ON somoim_db.* TO somoim_user2@localhost;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
mysql> EXIT;
Bye

root@963aee83dd50:/# mysql -u somoim_user2 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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.

 

 

3. 테이블 생성

데이터베이스를 선택합니다.

USE {데이터베이스명};

테이블을 생성합니다. 

CREATE TABLE `테이블명` (
	`칼럼명`	컬럼타입(길이)   NULL여부 DEFAULT값 COMMENT값
	PRIMARY KEY (컬럼명);
);

 

실제 실행화면입니다.

mysql> use somoim_db
Database changed
CREATE TABLE `tb_user` (
	`id`	INT(11)	NOT NULL AUTO_INCREMENT,
	`name`	VARCHAR(10)	NOT NULL,
	`reg_dt`	DATETIME	NOT NULL	DEFAULT CURRENT_TIMESTAMP,
	`chg_dt`	DATETIME	NOT NULL	DEFAULT CURRENT_TIMESTAMP,
	PRIMARY KEY (id)
);

 

INT
int는 정수 값을 저장하는 데 사용되는 데이터 타입입니다.
길이를 지정해주지 않으면 디폴트 11로 잡힙니다. int 최대 자리 수는 10이지만 음수표현을 위해 1이 추가되었습니다. 
범위는 signed, unsigned에 따라 다릅니다. MySQL에서는 signed int는 -2147483648 ~ 2147483647, unsigned int는 0 ~ 4294967295 값을 가집니다.
NOT NULL과 DEFAULT
not null은 사용자가 아무것도 입력하지 않거나 null을 직접 입력하게 되었을 경우 에러를 발생시킵니다.
default는 사용자가 아무것도 입력하지 않았을 때만 활성화되며 null을 입력하면 활성화되지 않습니다.
DATETIME과 TIMESTAMP
​datetime과 timestamp는 둘 다 날짜와 시간을 나타내는 데이터 타입이지만 다음과 같은 차이점이 있습니다.

  datetime timestamp
타입 문자형 숫자형
용량 8byte 4byte
범위
1000-01-01 00:00:00
~ 9999-12-31 23:59:59
1970-01-01 00:00;01
~ 2038-01-19 03:14:07 UTC
기본값 없음
직접 입력해주거나
default current_timestamp 추가 필요
자동으로 현재 날짜 저장
CHAR, VARCHAR
모두 문자열 데이터를 저장하는 데 사용되는 데이터 타입이지만 다음과 같은 차이점이 있습니다.
char는 고정 길이로 지정된 길이만큼의 공간을 항상 할당합니다. 이런 특성으로 인해 문자의 길이가 일정할 경우(특히 1자리일 경우) 저장공간의 절약이 가능합니다. 또한 검색과 정렬이 효율적이기 때문에 데이터 변경이 빈번할 경우 좋습니다. 하지만 문자의 길이가 일정하지 않을 경우에는 오히려 저장공간의 낭비로 이어질 수 있습니다. 또 남는 길이만큼 공백을 입력하게 되는데 이 공백 때문에 인덱스 적용이 되지않아 쿼리 성능저하로 이어질 수 있습니다.
varchar는 가변 길이로 필요한 만큼의 공간을 할당하며, 저장된 문자열의 실제 길이만큼만 공간을 할당합니다. 문자의 길이가 일정하지 않을 경우 저장공간의 절약이 가능합니다.