Class02(스키마, 테이블 및 열)
2023. 01. 26. 수업내용 정리
스키마.. 데이터 및 열..
스키마
- 스키마(Schema)는 테이블(Table)을 담기위한 존재이다.
- 스키마는 데이터(레코드)를 직접적으로 가지지 못한다.
- 스키마의 다른 이름은 데이터베이스(Database)이다.
- 명명법 : 단수형 스네이크 케이스
만들기
- 새로운 스키마를 만들기 위해 아래와 같이 명령한다.
CREATE SCHEMA `만들 스키마 이름`;
동일한 이름을 가진 스키마를 또 만들려고 할 경우
1007
오류가 발생하니 유의한다. 만약, 없으면 만들고, 있다하더라도 오류가 발생하지 않기를 원한다면 아래와 같이 명령한다.CREATE SCHEMA `스키마 이름` IF NOT EXISTS `스키마 이름`;
조회하기
- 존재하는 스키마의 목록을 확인하기 위해 아래와 같이 명령한다.
- SHOW SCHEMAS;
수정하기
- 스키마의 이름을 바꾸는 것은 불가능하다.
- 스키마의 인코딩 문자셋(Character Set) 및 암호화 여부, 읽기 전용 여부 등을 수정할 수 있지만 생략.
삭제하기
- 존재하는 스키마를 삭제하기 위해 아래와 같이 명령한다.
DROP SCHEMA `스키마 이름`;
존재하지 않는 스키마를 삭제하려할 경우 오류가 발생하는데, 이 떄 존재하지 않더라도 오류가 발생하지 않게 하고 싶다면 아래와 같이 명령한다.
DROP SCHEMA IF EXISTS `스키마 이름`;
테이블 및 열
테이블
- 테이블(Table)은 실제 레코드(Record)를 담기 위해 사용된다.
- 테이블은 반드시 스키마에 종속되어있어야 한다.
-
명명법 : 복수형 스네이크 케이스
만들기
- 테이블을 만들기 위해 아래와 같이 명령할 수 있다.
CREATE TABLE `소속 스키마 이름`.`테이블 이름` ( [열 구조,...], [제약 조건 구조,...] );
이미 존재하는 테이블일 경우 오류를 발생시키지 않게하기 위해 아래와 같이 명령한다.
CREATE TABLE IF NOT EXISTS `소속 스키마 이름`.`테이블 이름` ( [열 구조,...] );
테이블 목록 조회하기
- 어떠한 스키마에 종속된 테이블의 목록을 조회하기 위해 아래와 같이 명령할 수 있다.
SHOW TABLES IN `스키마 이름`;
테이블 구조 조회하기
- 어떠한 테이블의 구조(열 구조)를 조회하기 위해 아래와 같이 명령할 수 있다.
DESC `스키마 이름`.`테이블 이름`;
테이블 수정하기
- 테이블 수정과 관련된 쿼리는 콤마를 이용하여 여러 명령을 담을 수 있다. 가령,
a
열을 추가하고b
열을 삭제하는 쿼리를 아래와 같이 작성할 수 있다.ALTER TABLE `some-schema`.`some_table` ADD COLUMN `a` INT, DROP COLUMN `b`;
테이블 소속 스키마 및 이름 변경하기
- 스키마와 달리 테이블의 이름을 변경할 수 있다.
- 혹은 테이블이 소속된 스키마를 변경할 수 있다.
ALTER TABLE `소속 스키마`.`대상 테이블` RENAME `새로운 소속 스키마`.`새로운 테이블 이름`;
열 추가하기
- 이미 존재하는 테이블에 열을 추가하기 위해 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조];
먄약 추가하는 열의 위치를 지정하고자 한다면 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조] AFTER `기준 열`;
위 명령에서 새로운 열은
기준 열
뒤에 만들어진다. 먄약, 열을 가장 앞에 만들고 싶다면 아래와 같이FIRST
키워드를 사용한다.ALTER TABLE `소속 스키마`.`테이블` ADD COLUMN [열 구조] FIRST;
BEFORE
키워드가 없음에 유의한다.
열 삭제하기
- 이미 존재하는 테이블에서 열을 삭제하기 위해 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` DROP COLUMN `열 이름`;
열 타입 수정하기
- 이미 존재하는 테이블의 열 타입을 변경하기 위해 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조];
열의 순서를 변경하기 위해 아래의 명령어를 이용할 수도 있다.
ALTER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조] AFTER `기준 열`;
ALGER TABLE `소속 스키마`.`테이블` MODIFY COLUMN `대상 열` [이름을 제외한 열 구조] FIRST;
열 이름 및 타입 수정하기
- 이미 존재하는 테이블의 열 이름 및 타입을 변경하기 위해 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` CHANGE COLUMN `대상 열` `새로운 이름` [이름을 제외한 열 구조];
열 이름 수정하기
- 이미 존재하는 테이블의 열 이름을 변경하기 위해 아래와 같이 명령한다.
ALTER TABLE `소속 스키마`.`테이블` RENAME COLUMN `대상 열` TO `새로운 이름`;
테이블 삭제하기
- 이미 존재하는 테이블을 삭제하기 위해 아래와 같이 명령한다.
DROP TABLE `소속 스키마 이름`.`테이블 이름`;
마찬가지로 테이블이 없을 경우 오류를 발생시키지 않게하기 위해 아래와 같이 추가할 수 있다.
DROP TABLE IF EXISTS `소속 스키마 이름`.`테이블 이름`;
- 테이블을 만들기 위해 아래와 같이 명령할 수 있다.
열
- 테이블에 삽입(Insert)될 레코드가 가지는 각 데이터의 타입 및 개수(구조)를 제한하기 위해 사용한다.
- 모든 테이블은 반드시 한 개이사으이 열(Column)을 가지고 있어야 한다.
- 명명법 : 단수형 스네이크 케이스
- 열은 아래 구조로 명시할 수 있다.
`열 이름` [데이터 타입] [NULL|NOT NULL]? [DEFAULT [기본 값]]? [AUTO_INCREMENT]?
NULL
: 해당 열의 값이NULL
일 수 있다는 의미(기본 값)NOT NULL
: 해당 열의 값이NULL
일 수 없다는 의미DEFAULT
: 해당 열에 대해 값이 명시되지 않았을 때NULL
대신 사용할 기본 값을 명시. 별도로 명시하지 않으면DEFAULT NULL
이 생략된 것이라고 본다.AUTO_INCREMENT
: 해당 열이 숫자형이고 기본 키(Primary Key)일 떄 삽입(Insert)시 값이 누락된 경우 1(혹은 테이블이 기억하고 있는 최종 인덱스 값 + 1) 부터 시작하여 자동 증감시키는 일종의 순번(완전한 순번은 아님)열로 이용하겠다는 의미이다.
데이터 타입
- 어떠한 열이 가질 수 있는 데이터의 타입을 의미한다.
-
데이터형, 자료형, 자료 타입 등의 이름을 가진다.
정수형
TINYINT(n)
: -128부터 127까지의 정수를 가질 수 있다.n
은 자리수 제한이고 생략시3
이 이용된다.SMALLINT(n)
: -32,768부터 32,767 까지의 정수를 가질 수 있다. 이 때n
은 자리수 제한이고 생략시5
가 사용된다.MEDIUMINT(n)
: -8,388,608 부터 8,388,607 까지의 정수를 가질 수 있다.INT(n)
: -2,147,484,648 부터 2,147,484,647 까지의 정수를 가질 수 있다.BIGINT(n)
: -9,223,372,036,854,775,808 부터 9,223,372,036,854,775,807 까지의 정수를 가질 수 있다.- 위 정수형에서
n
은 길이 제한이고, 이를 생략할 경우 가질 수 있는 최대 길이를 사용한다. - 위 정수형 뒤에
UNSINGED
를 붙이면 (가령TINYINT UNSIGNED
)부호를 사용하지 않는 대신 음수(0 미만)에 해당되는 값 크기만큼 양수에서 추가로 이용할 수 있게 된다. 가령TINYINT UNSIGNED
의 범위는 0부터 255까지이다.
실수형
FLOAT(t, p)
: 부동소수인 실수 -3.402823466E+38 부터 -3.402823466E+38 데이터를 담는다. 자바와 동일하게 메모리에서 데이터를 담는 방식 때문에 소수점 끝자리 일부가 손실될 수 있음으로 정밀한 데이터를 담아야하는 경우 사용하지 않는다.t
는 전체 길이를,p
는 소수점 길이를 제한하기 위해 사용한다.t
및p
를 생략할 경우 부동소수로, 명시할 경우 고정소수 처럼 이용할 수 있다.DOUBLE(t, p)
: 부동소수인 실수 -1.79769313486231517E+308 부터 1.79769313486231517E+308 데이터를 담는다. 자바와 동일하게 메모리에서 데이터를 담는 방식 때문에 소수점 끝자리 일부가 손실될 수 있음으로 정밀한 데이터를 담아야하는 경우 사용하지 않는다.t
는 전체 길이를,p
는 소수점 길이를 제한하기 위해 사용한다.t
및p
를 생략할 경우 부동소수로, 명시할 경우 고정소수 처럼 이용할 수 있다.DECIMAL(t, p)
: 고정소수인 실수 데이터를 담는다. 데이터 손실이 없는 대신 용량은t + 1
바이트로 매우 크다.t
및p
값을 생략할 수 없다.
문자형
CHAR(n)
: 길이가 고정된 문자 데이터를 담기위해 사용한다. 고정 길이n
에 대해 255자까지 지원한다. 빈 공간을 채우기 때문에제한된 글자 수 미만의 글자를 적어도 총 용량n
만큼 차지하게 된다.VARCHAR(n)
: 길이가 가변적인 문자 데이터를 담기위해 사용한다. 최대 길이n
에 대해 65,535까지 지원한다. 빈 공간을 채우기 않기 때문에 입력된 글자 수 만큼만 용량을 차지한다.TINYTEXT(n)
: 문자열을 담기 위해 사용한다.n
은 길이 제한이고 최대 255로 설정가능하다.TEXT(n)
: 문자열을 담기 위해 사용한다.n
은 길이 제한이고 최대 65,535로 설정가능하다.MEDIUMTEXT(n)
: 문자열을 담기 위해 사용한다.n
은 길이 제한이고 최대 16,777,215로 설정가능하다.LONGTEXT(n)
: 문자열을 담기 위해 사용한다.n
은 길이 제한이고 최대 4,294,967,295로 설정가능하다.- 문자형에서
~TEXT
타입은VARCHAR
와 달리, 그 데이터를 테이블에 대한 파일에 직접 저장하는 것이 아닌 외부 파일에 별도로 저장해놓고 해당 파일을 참조하도록 되어있기 때문에 인덱싱(Indexing)이 불가능하고 이에 따라 속도가 느리다.
논리형
BOOLEAN
: 참(TRUE
)과 거짓(FALSE
)에 대한 값을 담기 위해 사용한다. 사실,BOOLEAN
은 가명이고 실제 타입은TINYINT(1)
로 처리된다. 각 참과 거짓은 숫자1
과0
에 매칭된다.
날짜 및 시간
YEAR
: 년도를 가지기 위한 타입DATE
: 년, 월, 일 값을 가지기 위한 타입TIME(n)
: 시, 분, 초 값을 가지기 위한 타입.n
값은 밀리초를 담을 수 있는 길이를 의미하며 쵀대 6, 생략시0
이다.DATETIME(n)
: 년, 월, 일, 시, 분, 초 값을 가지기 위한 타입.n
값은 밀리초를 담을 수 있는 길이를 의미하며 쵀대 6, 생략시0
이다.TIMESTAMP
:DATETIME(0)
과 동일하나, 내부적으로 유닉스 타임(Unix Time, Epoch Time)을 그 값으로 가진다.- 장점 : 시스템 시간이 변하면 변한 만큼 같이 변한다.
- 단점 : 일시에 제한이 있다.
- 유닉스 타임 : 1970-01-01 00:00:00 부터 지금까지 흐른 초(Second).
기타
TINYBLOB(n)
: 이진데이터를 담기 위해 사용한다.n
은 길이 제한이고 최대 255로 설정가능하다. 생략시 최대 값을 이용한다.BLOB(n)
: 이진데이터를 담기 위해 사용한다.n
은 길이 제한이고 최대 65,535로 설정가능하다. 생략시 최대 값을 이용한다.MEDIUMBLOB(n)
: 이진데이터를 담기 위해 사용한다.n
은 길이 제한이고 최대 16,777,215로 설정가능하다. 생략시 최대 값을 이용한다.LONGBLOB(n)
: 이진데이터를 담기 위해 사용한다.n
은 길이 제한이고 최대 4,294,967,295로 설정가능하다. 생략시 최대 값을 이용한다.
댓글남기기