MySQL 강좌 : 제 3강 - 테이블
테이블(Table)
테이블(Table)
은 행(Row)
과 열(Column)
의 형태를 갖는 모델을 이용하여 정렬된 데이터 집합의 모임입니다.
사용자 데이터의 입력, 수정, 삭제, 추출, 병합등 다양한 기능을 제공합니다.
테이블의 형태는 다음과 같은 형태로 구성됩니다.
location | date | variant | |
---|---|---|---|
1 | Angola | 2020-12-21 | B.1.160 |
2 | Angola | 2020-12-21 | B.1.620 |
3 | Argentina | 2020-12-21 | B.1.258 |
… | … | … | … |
행(Row)
은 가로 방향의 데이터 집합을 의미하며, 열(Column)
은 세로 방향의 데이터 집합을 의미합니다.
첫 번째 행의 데이터를 추출한다면, 1
, Angola
, 2020-12-21
, B.1.160
이 추출됩니다.
location
열의 데이터를 추출한다면, Angola
, Angola
, Argentina
, ...
이 추출됩니다.
테이블은 데이터를 저장하여 관리하고 활용하기 위한 용도로 사용됩니다.
테이블 생성
테이블을 생성하는 방법은 CREATE TABLE `{데이터베이스의 이름}`.`{테이블의 이름}`({열의 종류});
의 구조로 명령어를 실행합니다.
테이블에는 행(Row)
과 열(Column)
이 존재합니다.
행(Row)
은 실제 활용되는 데이터이며, 열(Column)
해당하는 데이터들의 속성을 의미합니다.
데이터가 하나도 존재하지 않을 수는 있지만, 해당하는 데이터들의 속성은 존재하기 때문에 열(Column)
의 속성을 미리 정의합니다.
열의 속성은 열의 이름
과 열의 데이터 속성
을 정의합니다.
이때 정의한 속성에 해당하는 데이터만 입력 및 저장이 가능합니다.
이름 명시 방법
데이터베이스의 이름, 테이블의 이름, 열의 이름 등은 다양한 방식으로 정의할 수 있습니다.
이름을 설정할 때, `
를 포함하지 않아도 동일하게 테이블을 생성할 수 있습니다.
하지만 `
를 사용하지 않고 데이터베이스, 테이블, 열 등의 이름을 정의한다면 특수한 경우에서 오류가 발생할 수 있습니다.
이런 경우에는 SQL의 예약어(reserved word)
로 된 이름으로 정의했기 때문입니다.
이미 문법적으로 사용되고 있는 단어를 사용한다면 충돌이 발생합니다. 그러므로 가급적 `
를 붙여 작성합니다.
- Tip : 실행되는 환경이나 프로그램에 따라
`
가 아닌"
로도 적용할 수 있습니다.
데이터 속성
숫자형 데이터 형식
데이터 형식 | 정의 | 범위 | UNSIGNED 사용 유/무 |
---|---|---|---|
BIGINT(n) | 정수형 데이터 형식(LONG) | -2^63 ~ 2^63 -1 | O |
INT(n) | 정수형 데이터 형식 | -2^31 ~ 2^31 - 1 | O |
MEDIUMINT(n) | 정수형 데이터 형식 | -2^23 ~ 2^23 - 1 | O |
SMALLINT(n) | 정수형 데이터 형식 | -2^15 ~ 2^15 - 1 | O |
TINYINT(n) | 정수형 데이터 형식 | -128 ~ 127 | O |
DECIMAL(m, d) | 고정 소수형 데이터 형식 | M의 최댓값을 따라감 | X |
FLOAT(n) | 부동 소수점 데이터 형식 | -1.79E+308 ~ 1.79E+308 | X |
DOUBLE(n) | 부동 소수점 데이터 형식 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308 | X |
REAL | 부동 소수점 데이터 형식 | -1.7976931348623157E+308 ~ -2.2250738585072014E-308 | X |
- n : 길이
- m : 정밀도
- d : 소수점 단위
문자형 데이터 형식
데이터 형식 | 정의 | 범위 | 비고 |
---|---|---|---|
CHAR(n) | 고정 길이 데이터 형식 | 0 ~ 255 바이트 | 지정된 길이보다 짧은 데이터를 입력한다면, 나머지 공간은 공백으로 채워짐 |
VACHAR(n) | 가변 길이 데이터 형식 | 0 ~ 65,535 바이트 | 지정된 길이보다 짧은 데이터를 입력한다면, 나머지 공간은 공백으로 채워지지 않음 |
TINYTEXT(n) | 문자열 데이터 형식 | 0 ~ 255 바이트 | |
TEXT(n) | 문자열 데이터 형식 | 0 ~ 65,535 바이트 | |
MEDIUMTEXT(n) | 문자열 데이터 형식 | 0 ~ 16,777,215 바이트 | |
LONGTEXT(n) | 문자열 데이터 형식 | 0 ~ 4,294,967,295 바이트 | |
ENUM(val1, val2, val3, …) | 열거형 데이터 형식 | 사용자 정의 정의된 데이터 중 1개의 값만 가짐 |
|
SET(val1, val2, val3, …) | 목록형 데이터 형식 | 사용자 정의 정의된 데이터 중 0개 이상의 값을 가짐 |
이진 데이터 형식
데이터 형식 | 정의 | 범위 | 비고 |
---|---|---|---|
BINARY(n) or BYTE(n) | CHAR 형식의 이진 데이터 형식 | 0 ~ 255 바이트 | |
VARBINARY(n) | VACHAR 형식의 이진 데이터 형식 | 0 ~ 65,535 바이트 | |
TINYBLOB(n) | 이진 데이터 형식 | 0 ~ 255 바이트 | |
BLOB(n) | 이진 데이터 형식 | 0 ~ 65,535 바이트 | |
MEDIUMBLOB(n) | 이진 데이터 형식 | 0 ~ 16,777,215 바이트 | |
LONGBLOB(n) | 이진 데이터 형식 | 0 ~ 4,294,967,295 바이트 |
날짜 데이터 형식
데이터 형식 | 정의 | 표현 방법 | 비고 |
---|---|---|---|
DATE | 날짜 데이터 형식 | YYYY-MM-DD | |
TIME | 시간 데이터 형식 | hh:mm:ss | |
DATETIME | 날짜 및 시간 데이터 형식 | YYYY-MM-DD hh:mm:ss | |
TIMESTAMP | 날짜와 시간 형태의 기간 표현 데이터 형식 | YYYY-MM-DD hh:mm:ss | 시스템 변경 시 자동으로 그 날짜와 시간이 저장 |
YEAR(n) | 년도 데이터 형식 | YYYY | 2자리 또는 4자리 표현 |
테이블 조회
테이블 조회는 DESC `{데이터베이스의 이름}`.`{테이블의 이름}`;
의 구조로 명령어를 실행합니다.
테이블을 조회하면 열의 이름, 열의 데이터 속성, Null 유/무, Key 유/무, 기본값, 설정 등을 확인할 수 있습니다.
테이블 수정
테이블을 수정하는 경우에는 ALTER TABLE
을 통해 변경할 수 있습니다.
테이블의 이름 변경은 ALTER TABLE `{데이터베이스의 이름}`.`{기존 테이블의 이름}` RENAME `{데이터베이스의 이름}`.`{새로운 테이블의 이름}`;
의 구조로 명령어를 실행합니다.
이외에도 테이블의 코멘트를 추가할 수 있습니다.
코멘트는 테이블에 설정하는 주석이며, 해당 테이블의 역할이나 특이사항 등을 작성합니다.
테이블에 코멘트를 추가하는 방법은 ALTER TABLE `{데이터베이스의 이름}`.`{테이블의 이름}` COMMENT="{코멘트 내용}";
의 구조로 명령어를 실행합니다.
이외에도 테이블의 스토리지 엔진을 수정하는 등의 테이블 수정 방법이 있습니다.
다음으로는 테이블의 열에 대한 내용을 확인해봅니다.
열 추가
테이블에 열을 추가하는 방법은 ALTER TABLE `{데이터베이스의 이름}`.`{테이블의 이름}` ADD `{열 이름}` `{열 속성}`;
의 구조로 명령어를 실행합니다.
해당 구문을 실행하면 테이블의 가장 끝 열에 열이 추가됩니다.
쉼표(,)
를 활용하여 한 번에 여러 개의 열을 추가할 수 있습니다.
또한, 열을 추가할 때 옵션을 설정할 수 있는데, 열의 옵션을 추가하려면 열 속성
뒷 부분에 다양한 설정을 작성합니다.
열의 옵션을 추가하는 방법은 다음과 같습니다.
FIRST
옵션은 테이블의 가장 앞 쪽에 열이 생성됩니다.
AFTER `{열 이름}`
은 열 이름 뒷 쪽에 열이 생성됩니다.
NULL
옵션은 Null
값을 갖는 데이터를 추가할 수 있게됩니다.
NOT NULL
옵션은 Null
값을 갖는 데이터는 추가할 수 없습니다.
AUTO_INCREMENT
옵션은 해당 열에 데이터를 입력하지 않아도 값이 자동으로 증가하여 할당됩니다.
PRIMARY KEY
옵션은 해당 키를 기본 키로 설정합니다. 기본 키는 식별자로 주로 활용합니다.
DEFAULT "{값}"
옵션은 데이터가 추가될 때 갖게되는 기본값을 의미합니다.
식별자
식별자는 크게 기본 키(PRIMARY KEY)
와 외래 키(Foreign key)
가 있습니다.
기본 키는 특정 데이터를 구분할 수 있는 필드를 의미하며, 외래 키는 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 의미합니다.
가능한 모든 테이블에는 기본 키나 외래 키가 존재해야 하며, 만약 존재하지 않는다면 특정 데이터를 구분하기 어려울 수 있습니다.
열 수정
테이블에 열을 수정하는 방법은 ALTER TABLE `{데이터베이스의 이름}`.`{테이블의 이름}` CHANGE `{열 이름}` `{열의 새로운 이름} `{열의 새로운 속성}`;
의 구조로 명령어를 실행합니다.
열을 수정하게 되면 열의 이름과 속성이 변경됩니다.
이름만 변경하거나 속성만 변경하려는 경우에는 기존 열의 이름 또는 형식과 동일한 값을 작성합니다.
열을 수정할 때, 데이터(행)가 존재하는 상태라면 데이터 변경이나 누락 등을 주의합니다.
이번에는 CHANGE
가 아닌 MODIFY
를 통해 열을 수정합니다.
CHANGE
는 열의 이름과 열의 속성까지 변경하지만, MODIFY
는 열의 속성만 변경할 수 있습니다.
테이블에 열을 수정하는 방법은 ALTER TABLE `{데이터베이스의 이름}`.`{테이블의 이름}` MODIFY `{열 이름}` `{열의 새로운 속성}`;
의 구조로 명령어를 실행합니다.
쉼표(,)
를 활용하여 한 번에 여러 개의 열을 수정할 수 있습니다.
열을 추가하는 방법과 비슷한 방식으로 여러 개의 열을 수정합니다.
열을 추가할 때 옵션을 설정한 방법과 비슷하게 추가된 열에도 옵션을 부여할 수 있습니다.
단, 기본값을 할당할 때에는 ALTER COLUMN
을 활용하여 기본값을 설정합니다.
열 삭제
테이블에 열을 삭제하는 방법은 ALTER TABLE `{데이터베이스의 이름}`.`{테이블의 이름}` DROP COLUMN `{열 이름}`;
의 구조로 명령어를 실행합니다.
열을 삭제하는 경우 해당 열의 모든 데이터 또한 삭제됩니다.
테이블 삭제
테이블을 삭제하는 경우에는 DROP TABLE
을 통해 삭제할 수 있습니다.
테이블의 이름 변경은 DROP TABLE `{데이터베이스의 이름}`.`{테이블의 이름}`;
의 구조로 명령어를 실행합니다.
해당 테이블의 모든 데이터가 삭제되므로, 주의해서 사용합니다.
댓글 남기기