- MySQL 첫 데이터베이스 및 테이블 생성 방법 목차
저번 포스팅에서는 MySQL을 우리 컴퓨터에 설치하고, 편리한 GUI 도구나 명령줄 클라이언트를 통해 서버에 접속하는 방법까지 알아보았습니다. MySQL 첫 데이터베이스 및 테이블 생성 방법을 배워볼건데요, 드디어 우리가 직접 데이터를 저장하고 관리할 공간, 즉 데이터베이스와 테이블을 만들어 볼 차례입니다. 이번 장에서는 SQL의 가장 기본적인 데이터 정의어(DDL - Data Definition Language)인 CREATE 명령어를 사용하여 우리만의 첫 데이터베이스와 테이블을 생성하는 방법을 배우게 됩니다. 이것이 바로 여러분의 본격적인 SQL 여정의 시작입니다.
1. 데이터를 담을 큰 상자 만들기: CREATE DATABASE
데이터베이스는 관련된 테이블들을 한데 모아두는 커다란 컨테이너 또는 폴더라고 생각하면 이해하기 쉽습니다. 예를 들어 쇼핑몰 웹사이트를 운영한다면 '고객 정보 테이블', '상품 정보 테이블', '주문 내역 테이블' 등이 필요할 텐데, 이 관련 테이블들을 'shopping_mall'이라는 하나의 데이터베이스 안에 넣어 관리하는 것이죠.
이렇게 데이터베이스라는 큰 저장 공간을 만드는 명령어는 아주 간단합니다. 바로 CREATE DATABASE 입니다.
기본적인 사용 형식은 다음과 같습니다.
CREATE DATABASE 데이터베이스_이름;
자, 그럼 우리 연습용 첫 데이터베이스를 한번 만들어 볼까요? my_first_db 라는 이름으로 만들어 보겠습니다. MySQL Workbench나 DBeaver 같은 GUI 도구의 SQL 편집기 창 또는 명령줄 클라이언트(mysql>)에 다음과 같이 입력하고 실행해 보세요. (명령줄에서는 각 명령어 끝에 세미콜론(;)을 잊지 마세요!)
CREATE DATABASE my_first_db;
명령이 성공적으로 실행되었다는 메시지가 나타나면, 여러분의 첫 데이터베이스가 성공적으로 생성된 것입니다!
데이터베이스 이름을 지을 때는 몇 가지 규칙과 권장 사항이 있습니다. 보통 영문 알파벳, 숫자, 그리고 밑줄 기호(_)를 사용하여 만듭니다. 공백 문자나 특수 문자는 피하는 것이 좋습니다. 이름은 되도록 그 데이터베이스가 어떤 데이터를 담을지 예측할 수 있도록 의미 있게 짓는 것이 좋으며, 개발자들 사이에서는 일관성을 위해 소문자로 작성하는 것을 선호하는 경우가 많습니다.
가끔은 이미 같은 이름의 데이터베이스가 존재하는데 실수로 또 CREATE DATABASE 명령을 실행하여 오류가 발생하는 것을 방지하고 싶을 수 있습니다. 이때는 IF NOT EXISTS 옵션을 추가하면 됩니다.
CREATE DATABASE IF NOT EXISTS my_first_db;
이렇게 하면 my_first_db라는 데이터베이스가 없을 때만 새로 생성하고, 이미 존재한다면 아무 작업도 하지 않고 조용히 넘어가므로 여러 번 실행해도 안전한 명령어가 됩니다.
데이터베이스가 정말 잘 만들어졌는지 확인하고 싶다면, 지난 장에서 잠깐 사용했던 SHOW DATABASES; 명령어를 다시 실행해 보세요. 결과 목록에 방금 만든 my_first_db가 보일 것입니다.
데이터베이스를 만들었다면, 이제 그 안에서 작업을 하겠다고 MySQL 서버에 알려줘야 합니다. 특정 데이터베이스를 사용하겠다고 선택하는 명령어는 USE 입니다.
USE 데이터베이스_이름;
우리가 만든 my_first_db를 사용해 봅시다.
USE my_first_db;
이 명령어를 실행하면 "Database changed" 와 유사한 메시지가 나타나며, 이제부터 실행하는 CREATE TABLE 같은 명령어는 my_first_db 데이터베이스 내에서 적용됩니다. 명령줄 클라이언트에서는 프롬프트 옆에 현재 사용 중인 데이터베이스 이름이 표시되기도 합니다.
2. 데이터를 정리할 표 만들기: CREATE TABLE
데이터베이스라는 큰 상자를 만들었으니, 이제 그 안에 실제 데이터를 칸칸이 정리해서 넣을 표, 즉 테이블(Table)을 만들 차례입니다. 테이블은 관계형 데이터베이스의 핵심 구성 요소로, 엑셀 시트처럼 행(Row)과 열(Column)로 이루어진 격자 구조에 데이터를 저장합니다. 각 테이블은 보통 특정한 주제(예: 사용자 정보, 게시글 목록, 상품 목록 등)에 관한 데이터를 담습니다.
테이블을 만드는 명령어는 CREATE TABLE 입니다. 데이터베이스를 만드는 것보다 조금 더 복잡한데, 그 이유는 테이블을 만들 때 어떤 종류의 데이터를 담을 열(Column)들을 포함할지, 각 열에는 어떤 형태의 데이터만 들어갈 수 있는지(데이터 타입) 등을 상세하게 정의해 주어야 하기 때문입니다.
기본적인 CREATE TABLE 문의 구조는 다음과 같습니다.
CREATE TABLE 테이블_이름 (
컬럼1_이름 데이터_타입 [제약조건들],
컬럼2_이름 데이터_타입 [제약조건들],
...
컬럼N_이름 데이터_타입 [제약조건들]
);
괄호 () 안에 테이블을 구성할 각 컬럼의 이름과 그 컬럼에 저장될 데이터의 종류를 명시하는 '데이터 타입(Data Type)'을 짝지어 정의합니다. 각 컬럼 정의는 쉼표(,)로 구분하며, 마지막 컬럼 정의 뒤에는 쉼표를 붙이지 않습니다.
여기서 '데이터 타입'은 왜 중요할까요? 각 컬럼에 저장될 데이터의 종류(숫자, 문자열, 날짜 등)를 미리 지정함으로써, 해당 컬럼에는 그 종류에 맞는 데이터만 저장되도록 강제하여 데이터의 무결성을 지키고, 저장 공간을 효율적으로 사용하며, 데이터 처리 속도를 높이는 데 도움을 주기 때문입니다. MySQL은 매우 다양한 데이터 타입을 지원하지만, 처음 시작하는 단계에서는 가장 기본적이고 자주 사용되는 몇 가지만 알아두면 충분합니다.
- INT 또는 INTEGER: 정수(소수점 없는 숫자)를 저장합니다. 예를 들어 사용자의 나이, 상품의 재고 수량, 게시물 번호 등에 사용될 수 있습니다. (TINYINT, SMALLINT, BIGINT 등 저장 범위가 다른 정수 타입도 있습니다.)
- VARCHAR(크기): 가변 길이의 문자열(텍스트)을 저장합니다. '가변 길이'란 실제 입력된 글자 수만큼만 저장 공간을 사용한다는 의미입니다. 크기 부분에는 해당 컬럼에 저장될 수 있는 최대 글자 수를 지정합니다. 예를 들어 VARCHAR(50)은 최대 50글자까지 저장할 수 있는 이름을 담기에 적합합니다. 주소나 제목 등 길이를 예측하기 어려운 대부분의 문자열에 널리 사용됩니다.
- TEXT: VARCHAR보다 훨씬 긴 텍스트 데이터를 저장할 때 사용합니다. 블로그 게시물의 본문 내용이나 긴 상품 설명 등에 적합합니다. (TINYTEXT, MEDIUMTEXT, LONGTEXT 등 더 큰 텍스트를 위한 타입도 있습니다.)
- DATE: 날짜(년, 월, 일) 정보를 'YYYY-MM-DD' 형식으로 저장합니다. 예를 들어 생년월일이나 가입 날짜 등에 사용됩니다.
- DATETIME: 날짜와 시간(년, 월, 일, 시, 분, 초) 정보를 'YYYY-MM-DD HH:MM:SS' 형식으로 저장합니다. 특정 이벤트가 발생한 정확한 시점을 기록할 때 유용합니다. (TIMESTAMP 타입도 비슷한 용도로 자주 사용됩니다.)
- DECIMAL(전체자릿수, 소수점자릿수): 고정 소수점 숫자를 정확하게 저장할 때 사용합니다. 특히 돈 계산과 같이 정확성이 매우 중요한 경우에 필수적입니다. 예를 들어 DECIMAL(10, 2)는 정수 부분을 포함한 총 10자리까지 저장하되, 그중 소수점 이하 2자리까지 표현한다는 의미입니다. (FLOAT, DOUBLE 같은 부동 소수점 타입도 있지만, 근사값을 저장하므로 금융 계산 등에는 DECIMAL이 권장됩니다.)
이제 이 기본 데이터 타입들을 활용하여 my_first_db 데이터베이스 안에 간단한 users 테이블을 만들어 보겠습니다. 사용자 ID, 사용자 이름, 이메일 주소, 가입 날짜를 저장하는 테이블입니다.
CREATE TABLE users (
user_id INT,
username VARCHAR(50),
email VARCHAR(100),
signup_date DATE
);
위 명령어를 실행하면, my_first_db 데이터베이스 안에 users라는 이름의 테이블이 생성됩니다. 이 테이블은 다음과 같은 4개의 컬럼을 가집니다.
- user_id: 정수(INT) 타입의 데이터를 저장할 컬럼입니다. 사용자를 식별하는 고유 번호로 사용될 수 있습니다.
- username: 최대 50글자까지의 가변 길이 문자열(VARCHAR)을 저장할 컬럼입니다. 사용자 이름을 담습니다.
- email: 최대 100글자까지의 가변 길이 문자열(VARCHAR)을 저장할 컬럼입니다. 이메일 주소를 담습니다.
- signup_date: 날짜(DATE) 타입의 데이터를 저장할 컬럼입니다. 사용자가 가입한 날짜를 기록합니다.
테이블 이름(users)과 컬럼 이름(user_id, username 등) 역시 데이터베이스 이름처럼 의미를 잘 나타내도록, 그리고 일관된 규칙(예: 소문자와 밑줄 조합)에 따라 짓는 것이 좋습니다.
각 컬럼 정의 뒤에는 NOT NULL(값이 비어있으면 안 됨), UNIQUE(중복된 값이 있으면 안 됨), PRIMARY KEY(테이블에서 각 행을 고유하게 식별하는 기본 키)와 같은 '제약 조건(Constraints)'을 추가하여 데이터 규칙을 더 엄격하게 적용할 수 있습니다. 이러한 제약 조건들은 데이터 관리의 핵심적인 부분이며, 이후 챕터에서 더 자세히 다룰 예정입니다. 지금은 컬럼 이름과 데이터 타입을 지정하여 테이블의 기본 뼈대를 만드는 것에 집중합시다.
3. 만든 테이블 구조 확인하기: DESCRIBE
테이블을 만들었으니, 정말 우리가 의도한 대로 컬럼 이름과 데이터 타입이 잘 정의되었는지 확인해 보는 것이 좋겠죠? 테이블의 구조를 확인하는 데 사용되는 명령어는 DESCRIBE 이며, 줄여서 DESC 라고만 써도 동일하게 작동합니다.
사용법은 간단합니다.
DESCRIBE 테이블_이름;
또는
DESC 테이블_이름;
방금 만든 users 테이블의 구조를 확인해 봅시다.
DESCRIBE users;
이 명령어를 실행하면, 결과가 표 형태로 나타날 것입니다. 각 행은 users 테이블의 컬럼 하나를 나타내며, 다음과 같은 정보를 보여줍니다.
- Field: 컬럼의 이름 (예: user_id, username)
- Type: 컬럼의 데이터 타입 (예: int, varchar(50), date)
- Null: 해당 컬럼에 NULL 값(값이 없음)이 허용되는지 여부 (YES 또는 NO)
- Key: 해당 컬럼이 키(Key)인지 여부 (예: PRI는 Primary Key, UNI는 Unique Key) - 지금은 비어있을 것입니다.
- Default: 해당 컬럼에 기본값(Default Value)이 설정되어 있는지 여부
- Extra: 추가적인 정보 (예: auto_increment 등)
이 결과를 통해 우리는 CREATE TABLE 명령이 성공적으로 실행되어 원하는 구조의 users 테이블이 만들어졌음을 확인할 수 있습니다.
(참고로, SHOW CREATE TABLE 테이블_이름; 이라는 명령어도 있습니다. 이 명령어는 해당 테이블을 생성할 때 사용했던 CREATE TABLE 문 자체를 보여주므로, 제약 조건 등을 포함한 더 상세한 구조를 확인하고 싶을 때 유용합니다.)
축하합니다! 여러분은 이제 자신만의 데이터베이스를 만들고, 그 안에 데이터를 담을 테이블의 구조까지 정의하는 데 성공했습니다. SQL을 이용해 데이터베이스 객체를 직접 생성하는 첫발을 내디딘 것입니다.
하지만 아직 테이블은 텅 비어있는 상태입니다. 다음 장에서는 이 users 테이블에 실제 사용자 데이터를 추가하고, 저장된 데이터를 조회하는 방법, 즉 데이터를 본격적으로 '조작(Manipulation)'하는 방법에 대해 배우게 될 것입니다. 기대하셔도 좋습니다!