MySQL

MySQL에 대표적인 데이터 타입

whs5758 2025. 5. 9. 15:32

MySQL에서 데이터 타입

MySQL에서 테이블을 생성할 때는 각 컬럼에 적합한 데이터 타입을 지정해야 합니다.

데이터 타입은 저장할 데이터의 종류(숫자, 문자열, 날짜 등)와 저장 방식(크기, 형식)을 결정합니다.

적절한 데이터 타입을 선택하면 데이터 무결성(데이터가 정확하고, 일관되며, 신뢰)을 보장하고, 저장 공간을 효율적으로 사용할 수 있습니다.

1. 숫자 타입: `INT`, `BIGINT`, `FLOAT`, `DOUBLE` 등
2. 문자열 타입: `VARCHAR`, `CHAR`, `TEXT`, `BLOB` 등
3. 날짜/시간 타입: `DATE`, `TIME`, `DATETIME`, `TIMESTAMP` 등
4. 불리언 타입: `BOOLEAN`, `BOOL` 등

숫자 타입은 정수형(`INT`, `BIGINT`)과 실수형(`FLOAT`, `DOUBLE`)으로 구분됩니다. 
정수형은 소수점 이하의 값을 저장하지 않으며, 실수형은 소수점 이하의 값을 저장할 수 있습니다. 
문자열 타입은 고정 길이(`CHAR`)와 가변 길이(`VARCHAR`)로 구분됩니다. 
고정 길이는 저장할 데이터의 길이가 일정하며, 가변 길이는 저장할 데이터의 길이가 가변적입니다.

날짜/시간 타입은 날짜(`DATE`), 시간(`TIME`), 날짜와 시간(`DATETIME`, `TIMESTAMP`) 등으로 구분됩니다.
불리언 타입은 참(`TRUE`, `1`)과 거짓(`FALSE`, `0`) 두 가지 값을 저장할 수 있습니다
  • TEXT는 대부분의 문자열 데이터를 저장하는 데 사용됩니다
  • BLOB는 이진 데이터를 저장하는 데 사용됩니다. 최대 크기는 TEXT와 동일하지만, TEXT는 문자 집합(Character Set)과 관련된 처리를 합니다. BLOB은 이진 데이터로 간주되어 문자 집합에 영향을 받지 않습니다.

숫자 데이터 타입

숫자 데이터 타입은 정수(Integer)와 실수(Floating-point)를 저장합니다. 크기와 범위에 따라 적절한 타입을 선택합니다.

 

문자열 데이터 타입

문자열 데이터 타입은 텍스트 데이터를 저장합니다. 길이와 저장 방식에 따라 선택합니다.

 

날짜와 시간 데이터 타입

날짜와 시간을 저장하는 타입으로, 시간 데이터 관리에 사용됩니다.


1. 학생 테이블 (student)

  • 설명: 학생의 기본 정보를 저장. 학번, 이름, 학년, 전공, 입학일, 메모를 포함.
  • 데이터 타입:
    • 숫자: INT (학번), TINYINT (학년).
    • 문자열: VARCHAR (이름, 전공), TEXT (메모).
    • 날짜: DATE (입학일).
-- 대표적인 데이터 타입 사용해보기 
-- 테이블 생성 (DDL)

-- DROP database school;
-- create database school;
use school;

CREATE TABLE student(
	student_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL, 
    grade TINYINT NOT NULL, 
    major VARCHAR(50), 
    admission_date DATE NOT NULL, 
    notes TEXT
);

desc student;

-- DML
SELECT * FROM student; 

INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES(1001, '김지영', 1, '컴퓨터공학', '2025-09-01', '프로그래밍에 뛰어남');
    
INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES(1002, '이민수', 2, '수학', '2025-12-05', NULL);
    
-- 테이블에 데이터 전체 삭제 
-- DELETE FROM student;
        
INSERT INTO student(student_id, name, grade, major, admission_date, notes)
VALUES (1001, '김지영', 1, '컴퓨터공학', '2025-09-01', '프로그래밍에 뛰어남'),
		   (1002, '이민수', 2, '수학', '2024-12-05', NULL),    
       (1003, '박소연', 3, '물리학', '2023-09-01', '양자역학에 관심이 많음');

2. 과목 테이블 (subject)

  • 설명: 과목 정보를 저장. 과목 코드, 이름, 학점, 학과 코드, 교수, 개설일을 포함.
  • 데이터 타입:
    • 숫자: INT (과목 ID), TINYINT (학점).
    • 문자열: CHAR (과목 코드, 학과 코드), VARCHAR (과목 이름, 교수).
    • 날짜: DATETIME (개설일).
-- 과목 테이블 설계 
create table subject(
	subject_id int primary key, 
  subject_code char(4) not null, 
  subject_name varchar(50) not null, 
  professor varchar(20) not null, 
	department_code char(2) not null, 
	created_at DATETIME not null
);

desc subject;
select * from subject;
 
insert into subject(subject_id, subject_code, subject_name, professor, department_code, created_at)
values(1, 'CS01', '데이터베이스', '김영희', 'CS', '2023-09-01 10:05:01');

insert into subject(subject_id, subject_code, subject_name, professor, department_code, created_at)
values(2, 'MA01', '미적분학', '김철수', 'MA', '2023-09-01 10:05:01');

3. 수강 기록 테이블

  • 설명: 학생의 수강 기록을 저장. 수강 ID, 학생 ID, 과목 ID, 점수, 등록일을 포함.
  • 데이터 타입:
    • 숫자: INT (수강 ID, 학생 ID, 과목 ID), DECIMAL (점수).
    • 날짜: DATETIME (등록일)
-- 수강 기록 테이블 생성 
create table enrollment(
	enrollment_id int primary key, 
  student_id int not null, 
  subject_id int not null, 
	score decimal(5, 2) not null, 
  enrolled_at datetime NOT null 
);

select * from enrollment;

insert into enrollment(enrollment_id, student_id, subject_id, score, enrolled_at)
values(1, 1001, 1, 85.50, '2023-09-01 12:00:00'),
		(2, 1002, 1, 100.00, '2023-09-02 11:00:00');  
        
insert into enrollment(enrollment_id, student_id, subject_id, score, enrolled_at)
values(3, 1001, 2, 75.50, '2023-09-010 12:00:00');

'MySQL' 카테고리의 다른 글

SELECT 구문과 조건절이란 뭘까?  (0) 2025.05.09
INSERT 구문과 제약 사항  (0) 2025.05.09
SQL ( DDL, DML, DCL ) - 실습 과제  (0) 2025.05.09
SQL - 3. DCL 이란?  (0) 2025.05.09
SQL - 2. DML 이란?  (0) 2025.05.09