logo

[MySQL] 테이블 생성

 

CREATE TABLE의 기본 구조

 

테이블 생성의 기본 문법

CREATE TABLE 명령어는 MySQL에서 새로운 테이블을 생성할 때 사용됩니다. 기본 문법은 다음과 같습니다:

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    ...
);

여기서 table_name은 생성하려는 테이블의 이름이고, column1, column2는 테이블의 열 이름입니다. datatype은 데이터 타입을 지정하며, constraint는 해당 열에 적용할 제약 조건을 나타냅니다.

 

데이터 타입 정의하기

MySQL에서 테이블을 생성할 때 각 열에 저장될 데이터의 타입을 정의해야 합니다. 데이터 타입에는 INT (정수), VARCHAR (가변 길이 문자열), DATE (날짜) 등이 있습니다. 예를 들어, 사용자 ID와 이름, 가입 날짜를 저장하는 테이블을 만들 때 다음과 같이 데이터 타입을 지정할 수 있습니다:

CREATE TABLE Users (
    UserID INT,
    UserName VARCHAR(100),
    SignUpDate DATE
);
 

기본값(Default Values) 설정하기

테이블의 열에 기본값을 설정할 수 있습니다. 이는 열에 대해 명시적인 값을 제공하지 않을 때 사용될 값입니다. DEFAULT 키워드를 사용하여 기본값을 지정합니다:

CREATE TABLE Products (
    ProductID INT,
    ProductName VARCHAR(100),
    Price DECIMAL(10,2),
    InStock BOOLEAN DEFAULT TRUE
);

위 예제에서 InStock 열은 기본적으로 TRUE 값을 갖습니다.

 

NOT NULL 제약 조건

NOT NULL 제약 조건은 테이블의 열이 NULL 값을 가질 수 없도록 합니다. 이는 필수 데이터 항목을 정의할 때 유용합니다. 사용자가 데이터를 입력하지 않은 경우, 해당 열에는 NULL 대신 기본값이 저장되어야 합니다(기본값이 설정된 경우). NOT NULL 제약 조건이 적용된 열에는 반드시 값이 제공되어야 합니다:

CREATE TABLE Employees (
    EmployeeID INT NOT NULL,
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Email VARCHAR(100)
);

위 예제에서 EmployeeID, FirstName, LastName 열은 반드시 값을 가져야 하며, Email은 값이 없을 수 있습니다.

 

키와 인덱스 정의하기

 

기본 키(Primary Key) 설정하기

기본 키는 테이블 내 각 행을 고유하게 식별하는 열(또는 열의 조합)입니다. 하나의 테이블에는 오직 하나의 기본 키만 있을 수 있으며, 기본 키로 지정된 열에는 중복된 값이나 NULL 값이 허용되지 않습니다. 기본 키 설정은 다음과 같이 할 수 있습니다:

CREATE TABLE Customers (
    CustomerID INT NOT NULL,
    CustomerName VARCHAR(100),
    ContactName VARCHAR(50),
    Country VARCHAR(50),
    PRIMARY KEY (CustomerID)
);

이 예제에서 CustomerID 열이 기본 키로 설정되어 있으며, 각 고객을 고유하게 식별합니다.

 

외래 키(Foreign Key) 설정하기

외래 키는 다른 테이블의 기본 키를 참조하는 열입니다. 외래 키 제약 조건은 참조 무결성을 유지하는 데 사용되며, 관계형 데이터베이스에서 두 테이블 간의 관계를 정의하는 데 필요합니다. 외래 키 설정은 다음과 같이 할 수 있습니다:

CREATE TABLE Orders (
    OrderID INT NOT NULL,
    OrderNumber INT NOT NULL,
    CustomerID INT,
    OrderDate DATE,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

이 예제에서 Orders 테이블의 CustomerID 열은 Customers 테이블의 CustomerID 기본 키를 참조합니다.

 

유니크(Unique) 제약 조건

유니크 제약 조건은 테이블의 특정 열에서 각 행이 고유한 값을 가져야 함을 보장합니다. 기본 키와 유사하게 중복된 값이 없어야 하지만, NULL 값은 허용됩니다. 유니크 제약 조건 설정은 다음과 같이 할 수 있습니다:

CREATE TABLE Employees (
    EmployeeID INT NOT NULL,
    Email VARCHAR(100),
    PRIMARY KEY (EmployeeID),
    UNIQUE (Email)
);

이 예제에서는 Email 열에 유니크 제약 조건이 설정되어 있어, 모든 직원의 이메일 주소가 고유해야 합니다.

 

인덱스(Index) 생성하기

인덱스는 데이터베이스에서 데이터 검색 속도를 빠르게 하기 위해 사용됩니다. 인덱스는 특정 열(들)에 대해 생성되며, 해당 열을 사용하는 쿼리의 성능을 향상시킵니다. 인덱스 생성은 다음과 같이 할 수 있습니다:

CREATE INDEX idx_customer_name
ON Customers (CustomerName);

이 예제에서 Customers 테이블의 CustomerName 열에 인덱스 idx_customer_name이 생성되어, 고객 이름으로 검색할 때의 성능이 향상됩니다.

 

고급 옵션과 설정

 

AUTO_INCREMENT 속성 사용하기

AUTO_INCREMENT 속성은 주로 기본 키에 사용되며, 새로운 행이 추가될 때마다 자동으로 고유한 숫자를 생성합니다. 이는 주로 ID 열에 사용되어 각 행을 고유하게 식별합니다. AUTO_INCREMENT 속성의 사용 예는 다음과 같습니다:

CREATE TABLE Students (
    StudentID INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(100),
    PRIMARY KEY (StudentID)
);

이 예제에서 StudentID 열에 AUTO_INCREMENT 속성을 설정하여, 새 학생 레코드가 추가될 때마다 StudentID가 자동으로 1씩 증가합니다.

 

ENUM과 SET 데이터 타입 사용하기

ENUMSET 데이터 타입은 열이 특정 값 목록 중에서 하나 또는 여러 값을 가질 수 있도록 합니다. ENUM은 열이 정의된 값 목록 중 하나만 가질 수 있으며, SET은 여러 값을 동시에 가질 수 있습니다.

CREATE TABLE shirts (
    shirt_id INT NOT NULL AUTO_INCREMENT,
    color ENUM('red', 'green', 'blue'),
    size SET('small', 'medium', 'large'),
    PRIMARY KEY (shirt_id)
);

이 예제에서 color 열은 red, green, blue 중 하나의 값을 가질 수 있으며, size 열은 'small', 'medium', 'large' 중 하나 이상의 값을 가질 수 있습니다.

 

테이블 주석(Comment) 달기

테이블 생성 시 COMMENT 옵션을 사용하여 테이블에 대한 설명을 추가할 수 있습니다. 이는 데이터베이스 스키마를 문서화하는 데 유용합니다.

CREATE TABLE employee (
    employee_id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(50),
    position VARCHAR(50),
    PRIMARY KEY (employee_id)
) COMMENT='Employee details';

이 예제에서 employee 테이블에 "Employee details"라는 주석을 추가했습니다.

 

테이블의 스토리지 엔진 설정하기

MySQL에서는 다양한 스토리지 엔진을 지원합니다. 테이블을 생성할 때 ENGINE 옵션을 사용하여 특정 스토리지 엔진을 지정할 수 있습니다. 가장 널리 사용되는 스토리지 엔진 중 하나는 InnoDB입니다.

CREATE TABLE orders (
    order_id INT NOT NULL AUTO_INCREMENT,
    order_date DATE,
    customer_id INT,
    PRIMARY KEY (order_id)
) ENGINE=InnoDB;

이 예제에서 orders 테이블은 InnoDB 스토리지 엔진을 사용하여 생성됩니다. InnoDB는 트랜잭션을 지원하며, 외래 키 제약 조건을 사용할 수 있습니다.

 

CREATE TABLE의 실습과 예제

 

간단한 테이블 생성 예제

간단한 사용자 테이블을 생성하는 예제입니다. 사용자 ID, 이름, 이메일 주소를 포함합니다. 사용자 ID는 기본 키로 설정됩니다.

CREATE TABLE Users (
    UserID INT NOT NULL AUTO_INCREMENT,
    UserName VARCHAR(100),
    Email VARCHAR(100),
    PRIMARY KEY (UserID)
);

이 구조는 간단한 웹 애플리케이션에서 사용자 정보를 저장하는 데 적합합니다.

 

복합 키를 사용하는 테이블 생성 예제

복합 키(Composite Key)는 두 개 이상의 열을 결합하여 테이블에서 각 행을 유일하게 식별하는 키입니다. 주문 항목 테이블을 생성하는 예제로, 주문 ID와 항목 ID를 복합 키로 사용합니다.

CREATE TABLE OrderItems (
    OrderID INT NOT NULL,
    ItemID INT NOT NULL,
    Quantity INT,
    PRIMARY KEY (OrderID, ItemID)
);

이 테이블은 각 주문에 대한 다양한 항목을 관리할 수 있게 해줍니다.

 

고급 데이터 타입을 포함한 테이블 생성

ENUMSET 데이터 타입을 사용하는 테이블 생성 예제입니다. 직원 테이블에서 직원의 역할을 ENUM을 사용하여, 직원이 속한 부서를 SET을 사용하여 저장합니다.

CREATE TABLE Employees (
    EmployeeID INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(100),
    Role ENUM('Manager', 'Developer', 'Designer'),
    Departments SET('HR', 'Development', 'Design'),
    PRIMARY KEY (EmployeeID)
);

이 구조는 직원의 역할과 소속 부서 정보를 효율적으로 저장할 수 있게 해줍니다.

 

스토리지 엔진과 옵션을 지정한 테이블 생성

MySQL의 다양한 스토리지 엔진 중 하나를 선택하여 테이블을 생성하는 예제입니다. 또한, 테이블에 주석을 추가합니다.

CREATE TABLE Logs (
    LogID INT NOT NULL AUTO_INCREMENT,
    LogDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    Message VARCHAR(255),
    PRIMARY KEY (LogID)
) ENGINE=InnoDB COMMENT='System Logs';

이 예제에서는 로그 데이터를 저장하기 위한 테이블을 InnoDB 스토리지 엔진을 사용하여 생성하며, 'System Logs'라는 주석을 추가합니다. InnoDB는 트랜잭션 지원, 롤백 및 크래시 복구 기능을 제공합니다.

Previous
장점