[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 데이터 타입 사용하기
ENUM
과 SET
데이터 타입은 열이 특정 값 목록 중에서 하나 또는 여러 값을 가질 수 있도록 합니다. 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)
);
이 테이블은 각 주문에 대한 다양한 항목을 관리할 수 있게 해줍니다.
고급 데이터 타입을 포함한 테이블 생성
ENUM
과 SET
데이터 타입을 사용하는 테이블 생성 예제입니다. 직원 테이블에서 직원의 역할을 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
는 트랜잭션 지원, 롤백 및 크래시 복구 기능을 제공합니다.