IT무새/Database

[MySQL] 테이블 생성 | CREATE TABLE

코딩무새 2025. 1. 15. 02:53

껄껄껄

코딩무새입니다.

 

 


 

MySQL에서 테이블을 생성 해보겠습니다.

 

테이블 생성 ( 기본 )

기본적인 테이블 생성입니다.

아래 쿼리로 생성합니다.

CREATE TABLE {TABLE_NAME} (
    COLUMN1 TYPE {OPTION},
    COLUMN2 TYPE {OPTION},
    COLUMN3 TYPE {OPTION},
    ...
);

 

주로 사용하는 옵션으로는 PK의 경우 AUTO_INCREMENT PRIMARY KEY가 있구요.

NULL OR NOT NULL도 자주 사용합니다.

데이터 형식의 경우 CURRENT_TIMESTAMP라는 기본 값을 지정해서 자동으로 생성 시간을 쌓아줄수도 있어요.

 

우선 DB를 선택해줍니다.

USE codingparrot
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 기본 키 및 자동 증가
    username VARCHAR(50) NOT NULL,    -- 사용자 이름, NULL 불가
    email VARCHAR(100) NOT NULL UNIQUE, -- 이메일, 고유 값
    password_hash VARCHAR(255) NOT NULL, -- 비밀번호 해시 저장
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 생성 시각 기본값 현재 시간
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 업데이트 시각
);

 

위와  같이 users 테이블을 생성해보았는데요.

id를 PK로 지정하여 자동 인덱스 증가 옵션을 적용했습니다.

username, email, password_hash의 경우 필수로 데이터를 받고싶어서 NOT NULL로 지정했어요.

그리고 email의 경우 고유한 값을 유지하기위해 UNIQUE 옵션 값을 추가해주었습니다.

생성일과 수정일의 경우 CURRENT_TIMESTAMP라는 기본값을 지정하였어요.

 

테이블 명세서가 보고싶으시면 아래 커멘드를 입력하세요.

DESC {TABLE};
DESC users;
+---------------+--------------+------+-----+-------------------+-----------------------------------------------+
| Field         | Type         | Null | Key | Default           | Extra                                         |
+---------------+--------------+------+-----+-------------------+-----------------------------------------------+
| id            | int          | NO   | PRI | NULL              | auto_increment                                |
| username      | varchar(50)  | NO   |     | NULL              |                                               |
| email         | varchar(100) | NO   | UNI | NULL              |                                               |
| password_hash | varchar(255) | NO   |     | NULL              |                                               |
| created_at    | timestamp    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED                             |
| updated_at    | timestamp    | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
+---------------+--------------+------+-----+-------------------+-----------------------------------------------+
6 rows in set (0.00 sec)

 

 

방금 만든 테이블의 명세서가 노출됩니다.

 

다른 테이블 구조 복사

특정 테이블과 동일한 구조가 필요하거나 일부 컬럼만 추가해야되는 경우 유용하게 쓰입니다.

CREATE TABLE {TABLE_NAME}
AS
SELECT {COLUMNS}
FROM {TABLE_NAME}
WHERE {CONDITIONS};

 

아까 만든 users 테이블에서 id와 name만 복사해서 테이블을 만들어 보겠습니다.

CREATE TABLE users_temp
AS
SELECT id, username
FROM users
WHERE 1 = 2;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

DESC users_temp;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   |     | 0       |       |
| username | varchar(50) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 

 

테이블이 잘 생성된 것을 확인 할 수 있습니다.

여기서 WHERE 1 = 2 는 구조만 복사해서 생성하고 싶은 테이블에 데이터가 있는 경우 사용합니다.

WHERE 조건인 참이 아닌경우 컬럼만 조회되거든요. 껄껄껄

 


 

지금까지 테이블 생성하는 방법에 대해서 알아보았습니다.

테이블 설계와 생성은 할수록 생각할거리도 많고 깊어질 수 있습니다.

즐겁게 설계를 해보아요.

'IT무새 > Database' 카테고리의 다른 글

[MySQL] 테이블 조회 | SELECT  (5) 2025.01.16
[MySQL] 데이터 삽입 | INSERT INTO  (1) 2025.01.16
[MySQL] 테이블 삭제 | DROP TABLE  (5) 2025.01.16
[MySQL] DB CREATE, SELECT, DELETE  (2) 2025.01.14
What is SQL?  (1) 2025.01.14