T_era
SQL 자료형 본문
- 자료형
- MySQL Database에 사용할 수 있는 데이터 타입
- 숫자형
- 정수타입 Byte 범위 설명
TINYINT 1 signed : - 128 ~ 127 unsigned : 0 ~ 256 정수 SMALLINT 2 signed : -32,768 ~ 32,767 unsigned : 0 ~ 65535 정수 MEDIUMINT 3 signed : -8388608 ~ 8388607 unsigned : 0 ~ 16777215 정수 INT 4 signed : -2147483648 ~ 2147483647 unsigned : 0 ~ 4294967295 정수 BIGINT 8 signed : 약 -900경 ~ + 900경 unsigned : 0 ~ 약 1800경 정수 - SIGNED, UNSIGNED 예약어
- 정수형 자료형에만 사용할 수 있다.
- 양수만 사용될 경우 UNSIGNED
- 음수도 사용될 경우 SIGNED
- 적절한 경우에 사용하면 용량을 절약할 수 있다.
- SIGNED, UNSIGNED 예약어
- 실수(고정 소수점)
- 실수를 정확하게 표현하기 위해 사용된다.
- 정확한 소수점 계산이 가능하다.
DECIMAL(M,D) 5~17 -1038+1 ~ +1038-1 전체 자릿수(M)와 소수점 이하 자리수(D) DECIMAL(3, 2)는 전체 자릿수 3자리, 소숫점 이하 2자리 설정 → 1.11 NUMERIC(M,D) 동일 동일 동일 - 실수(부동 소수점)
- 고정 소수점과 달리 고정되지 않는 소수를 가진다.
- 더 넓은 범위의 숫자를 표현하기 위해 사용된다.
FLOAT 4 -3.40E+38 ~ -1.17E-38 소수점 아래 7자리까지 표현 DOUBLE REAL 8 1.22E-308 ~ 1.79E+308 소수점 아래 15자리까지 표현
- 정수타입 Byte 범위 설명
- 날짜형타입 Byte 범위 설명
DATE 3 1001-01-01 ~ 9999-12-31 YYYY-MM-DD 형식(연-월-일) TIME 3 -838:59:59.000000 ~ 838:59:59.000000 HH:MM:SS 형식(시:분:초) DATETIME 8 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS (연-월-일 시:분:초) TIMESTAMP 4 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 1970-01-01 00:00:00 이후로 지난 시간을 밀리세컨드 단위로 저장한다. TIME_ZONE 시스템 변수와 관려이 있다. YEAR 1 1901 ~ 2155 연도 - DATETIME
- 날짜와 시간의 절대적인 값이다.
- 날짜와 시간을 글자 그대로 저장한다.
- 어느 누가 데이터를 읽어도 항상 같은 값으로 조회된다.(국가별 시차와 관계없음)
- TIMESTAMP
- 시간대에 영향을 받는 상대적인 시간이다.
- 날짜와 시간을 숫자값(밀리세컨드)으로 저장한다.
- DB에 세팅된 시간에 따라 다르게 조회될 수 있다.
- TIME_ZONE은 국가별 시차에 따라 값이 다르다.
- 국제표준 TIMEZONE은 UTC(한국 시간 -9) 이다.
- DATETIME
- 문자형타입 Byte 설명
CHAR(M) 1 ~ 255 고정길이 문자형. (M : 0 ~ 255) VARCHAR(M) 1 ~ 65535 가변길이 문자형. (M : 0 ~ 65,535) BINARY(M) 1 ~ 255 고정길이 이진 데이터 값 VARBINARY(M) 1 ~ 255 가변길이 이진 데이터 값 TINYBLOB TINYTEXT 1 ~ 255 텍스트 데이터 BLOB TEXT 1 ~ 65535 텍스트 데이터 MEDIUMBLOB MEDIUMTEXT 1 ~ 16777215 텍스트 데이터 LONGBLOB LONGTEXT 1 ~ 4294967295 텍스트 데이터 ENUM 1 또는 2 문자 형태인 value를 숫자로 저장하여 최대 65535개의 문자열 중 한가지를 반환한다. 255이하 = 1byte, 65535 이하 = 2byte SET 1, 2, 3, 4, 8 최대 64개의 중복되지 않는 데이터 값, ENUM형과 동일하게 문자열 값을 정수값으로 매핑하여 저장한다. - CHAR
- 고정된 공간을 차지하여 사용시 주의해야 한다.
- 성능은 VARCHAR보다 더 좋다.
- VARCHAR
- 가변적인 공간을 차지한다.
- TEXT
- 게시글의 내용처럼 긴 문자열을 저장할 때 사용된다.
- 데이터의 총량이 VARCHAR 최대인 65535를 넘어가려하면 사용한다.
- BLOB
- 이미지, 파일 등을 파일이 아닌 바이너리 데이터로 저장할 때 사용한다.
- ENUM은 반드시 하나의 값만 저장된다.
- SET은 다중 선택이 가능하다.
- CHAR
- </aside>
- </aside>
- </aside>
- 기타
- BOOLEAN을 제외하고 이런것도 있구나! 참고하면 됩니다.
BIT(M) 1 ~ 64 bit, 0과 1로 표현되는 binary 1 ~ 64 bit를 표현한다. BOOLEAN TINYINT(1)로 설정된다. 0은 false, 이외에는 true JSON 8byte JSON 문서를 저장 GEOMETRY 공간 데이터 형식으로 선, 점, 다각형 같은 공간 데이터 개체를 저장한다. - JSON
- 단순 저장에 중점을 두는 데이터의 경우 JSON 형태로 저장하기도 한다.
- 제약조건(Constraint)
- 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙
- 데이터 무결성
- 데이터의 정확성, 일관성, 완전성을 유지하는 것
- 정확성: 데이터가 올바르고 오류 없이 저장되는 것을 의미한다.
- 일관성: 데이터가 서로 모순되지 않고 조화를 이루는 상태를 유지하는 것을 의미한다.
- 완전성: 필요한 모든 데이터가 빠짐없이 저장되고 관리되는 것을 의미한다.
- 즉, 데이터가 입력, 저장, 전송, 처리되는 동안 변경되거나 손상되지 않도록 보장하는 개념
- 데이터의 정확성, 일관성, 완전성을 유지하는 것
- AUTO_INCREMENT
- 고유번호 자동생성(컬럼의 값이 중복되지 않게 1씩 자동으로 증가)
CREATE TABLE 테이블이름 ( 필드이름 필드타입 AUTO_INCREMENT, // id bigint AUTO_INCREMENT, ... ); - NOT NULL
- 해당 필드는 NULL 값을 저장할 수 없게 된다.
CREATE TABLE 테이블이름 ( 필드이름 필드타입 NOT NULL, ... ); - UNIQUE
- 해당 필드는 서로 다른 값을 가져야만 한다. (동일한 값은 존재할 수 없다.)
CREATE TABLE 테이블이름 ( 필드이름 필드타입 UNIQUE, ... ); - PRIMARY KEY(기본 키)
- 테이블에서 각 행(row)을 고유하게 식별하는 하나 이상의 열(column)에 설정되는 제약조건
- 중복된 데이터가 테이블에 삽입되는 것을 방지한다.
- NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
CREATE TABLE students ( id BIGINT PRIMARY KEY, -- 학생 고유 번호 (자동 증가) name VARCHAR(50) NOT NULL, -- 이름 email VARCHAR(100) NOT NULL UNIQUE, -- 이메일 PRIMARY KEY (id) -- PRIMARY KEY 설정 );- INDEX로 설정되어 테이블의 데이터를 쉽고 빠르게 찾도록 도와주는 역할을 한다.
- 추가적인 쓰기 작업과 저장 공간을 활용하여 검색 속도를 향상시키기 위한 자료구조
- 테이블에서 각 행(row)을 고유하게 식별하는 하나 이상의 열(column)에 설정되는 제약조건
- FOREIGN KEY(외래 키)
- 한 테이블의 열이 다른 테이블의 PRIMARY KEY(또는 UNIQUE 제약 조건이 적용된 열)를 참조하도록 설정한다.
- 참조된 테이블의 데이터가 변경되거나 삭제될 때 참조 무결성을 강제할 수 있다.
- 외래 키 값은 반드시 참조하는 테이블의 기본 키로 존재해야 한다.
- 부모 테이블의 데이터가 변경되거나 삭제될 때 자식 테이블에 있는 데이터도 자동으로 업데이트되거나 삭제되도록 보장한다.(CASCADE)
- 참조된 테이블의 데이터가 변경되거나 삭제될 때 참조 무결성을 강제할 수 있다.
CREATE TABLE 테이블이름 ( 필드이름 필드타입, ... FOREIGN KEY(필드이름) REFERENCES 테이블이름(필드이름) );- 외래키 이해하기
- customers 테이블
- 고객 정보를 저장하는 테이블
CREATE TABLE customers ( customer_id INT PRIMARY KEY, -- 고객 고유 번호 name VARCHAR(50) NOT NULL -- 고객 이름 );- customer_id: 각 고객을 고유하게 식별하는 PRIMARY KEY
- name: 고객의 이름을 저장하는 열
- orders 테이블
- 주문 정보를 저장하는 테이블
CREATE TABLE orders ( order_id INT PRIMARY KEY, -- 주문 고유 번호 order_date DATE NOT NULL, -- 주문 날짜 customer_id INT, -- 고객 고유 번호 (외래 키로 설정됨) FOREIGN KEY (customer_id) REFERENCES customers(customer_id) -- 고객 ID를 참조하는 외래 키 );- order_id: 각 주문을 고유하게 식별하는 PRIMARY KEY
- order_date: 주문 날짜를 저장하는 열
- customer_id: customers 테이블의 customer_id를 참조하는 FOREIGN KEY
- FOREIGN KEY 동작 예시
- 데이터 추가:
- 고객 Alice와 Bob을 customers 테이블에 추가
- INSERT INTO customers (customer_id, name) VALUES (1, 'Alice'); INSERT INTO customers (customer_id, name) VALUES (2, 'Bob');
- 주문 추가:
- Alice(고객 ID 1)와 Bob(고객 ID 2)의 주문을 orders 테이블에 추가
- orders 테이블의 customer_id 열은 FOREIGN KEY로서, 반드시 customers 테이블의 customer_id와 일치해야 한다. 그렇지 않으면 참조 무결성 위반 오류가 발생한다.
- INSERT INTO orders (order_id, order_date, customer_id) VALUES (1, '2024-08-25', 1); INSERT INTO orders (order_id, order_date, customer_id) VALUES (2, '2024-08-26', 2);
- 존재하지 않는 customer_id를 가진 주문을 추가하려고 하면 오류가 발생하여, 잘못된 데이터가 저장되지 않도록 방지할 수 있다.
- 주문 테이블에서 참조하고 있는 customer_id가 있다면 해당하는 customers 의 row를 삭제할 수 없다.
- 데이터 추가:
- 한 테이블의 열이 다른 테이블의 PRIMARY KEY(또는 UNIQUE 제약 조건이 적용된 열)를 참조하도록 설정한다.
- CASCADE
- 참조 무결성을 유지하기 위한 동작을 정의하는 규칙
- 외래 키(Foreign Key) 제약 조건과 관련된 변경 사항이 발생할 때 참조하는 레코드에 대한 동작을 자동으로 처리하는 기능
- FOREIGN KEY 로 연관된 데이터를 삭제,변경할 수 있다.
CREATE TABLE 테이블이름 ( 필드이름 필드타입, ... FOREIGN KEY(필드이름) REFERENCES 테이블이름(필드이름) ON DELETE CASCADE //ON UPDATE CASCADE );- ON DELETE CASCADE
- 부모 테이블의 행이 삭제되면, 참조하는 자식 테이블의 관련 행들도 자동으로 삭제한다.
- ON UPDATE CASCADE
- 부모 테이블의 기본 키가 업데이트되면, 참조하는 자식 테이블의 외래 키 값도 자동으로 수정된다.
- DEFAULT
- 해당 필드의 기본 값을 설정한다.
- 필드 값이 전달되지 않으면, 자동으로 기본 값을 저장한다.
CREATE TABLE 테이블이름 ( 필드이름 필드타입 DEFAULT 값 );
- JOIN
- 두개 이상의 테이블을 연결하여 데이터를 검색하는 방법
- 테이블을 분리하여 데이터 중복을 최소화하고 데이터의 일관성을 유지하기 위해 사용된다.
- JOIN 종류출처 : https://medium.com/@aakriti.sharma18/joins-in-sql-4e2933cedde6
- INNER JOIN
- 두 테이블에서 공통된 값을 가지고 있는 행만 반환한다.
- ON 절의 조건이 일치하는 결과
- MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미이다.
- 교집합
- 두 테이블에서 공통된 값을 가지고 있는 행만 반환한다.
- LEFT JOIN
- 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환한다.
- ON 절의 조건 중 첫번째 테이블인 왼쪽(기준)의 데이터를 모두 가져온다.
- 오른쪽 테이블에 일치하는 데이터가 없으면 NULL로 반환한다.
- JOIN을 여러번 사용하는 경우 LEFT JOIN으로 시작했다면 이후 JOIN도 LEFT JOIN으로 해야한다.
- 부분 집합(왼쪽 테이블)
- 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환한다.
- RIGHT JOIN
- 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환한다.
- ON 절의 조건 중 두번째 테이블인 오른쪽(기준)의 데이터를 모두 가져온다.
- 왼쪽 테이블에 일치하는 데이터가 없으면 NULL로 반환한다.
- 부분 집합(오른쪽 테이블)
- 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환한다.
- OUTER JOIN
- 두 테이블에서 공통된 값을 가지지 않는 행도 포함해서 반환한다.
- 합집합
- LEFT OUTTER JOIN, RIGHT OUTTER JOIN, FULL OUTTER JOIN(잘 사용하지 않음) 이 있다.
- 대부분의 DB는 FULL OUTTER JOIN을 지원하지 않고 UNION을 사용하도록 한다.
- UNION을 사용하면 자동으로 중복을 제거(DISTICT)해준다.
- INNER JOIN

'Programing > Datababse' 카테고리의 다른 글
| 데이터베이스를 어떤 걸 써야할까? (0) | 2025.05.19 |
|---|---|
| 데이터베이스 키의 종류 및 정규화/반정규화 (0) | 2025.05.16 |
| SQL 언어 (0) | 2025.05.08 |
| [MySQL] 문제풀이 : 예산이 가장 큰 프로젝트는? (0) | 2025.03.25 |
| [MySQL] 문제풀이 : 가장 많이 팔린 품목은? (0) | 2025.03.25 |