SQL (Back End) ... Part 2
2020. 4. 6. 01:19ㆍToday I learned/Online Courses
사이트: edwith
강의: [부스트코스] 웹 프로그래밍 챕터 2, DB 연결 웹 앱
학습기간: 2020년 4월 2일
8. SQL - BE
DDL(Data Definition Language, 데이터 정의어)
- RDBMS의 기본적 저장 구조인 테이블을 정의하기 위해선 기초적인 정보가 필요
- 어떤 필드가 있는지, 해당 필드에는 어떤 데이터 타입인지, 자리는 얼마를 차지하는지에 대한 정보가 필요
- 데이터 타입의 종류
- TINYINT(M): 1 Byte, 부호 있는 수는 -128 ~ 127, 부호 없는 수는 0 ~ 255까지 표현
- SMALLINT(M): 2 Byte, 부호 있는 수는 -32768 ~ 32767, 부호 없는 수는 0 ~ 65535까지 표현
- MEDIUMINT(M): 3 Byte, 부호 있는 수는 -8388608 ~ 8388607, 부호 없는 수는 0 ~ 16777215까지 표현
- INT(M), INTEGER(M): 4 Byte, 부호 있는 수는 -2147483648 ~ 2147483647, 부호 없는 수는 0 ~ 4294967295까지 표현
- BIGINT(M): 부호 있는 수는 -92233720036854775808 ~ 92233720036854775808, 부호 없는 수는 0 ~ 18446744073709551615까지 표현
- FLOAT(M, D): 언제나 부호가 있으며, -3.402823466E+38 ~ 3.402823466E+38까지 부동소수점을 표현
- DOUBLE(M,D): 언제나 부호가 있으며, 2배의 정밀도를 가져 -1.79769313486231517E+308 ~ 1.6931348623157E+308까지 부동소수점을 표현
- DATE: 3 Byte, 날짜를 'YYYY-MM-DD'의 형태로 표현
- DATETIME: 8 Byte, 날짜와 시간을 함께 'YYYY-MM-DD HH:MM:SS'의 형태로 표현
- TIMESTAMP: 4 Byte, '1970-01-01 00:00:00'부터 2037년까지 표현할 수 있음
- TIME: '-839:59:59' ~ '839:59:59'까지 시간을 표현
- YEAR: 1901 ~ 2155년, 0000년의 년도를 표현
- CHAR(M): 고정 길이 M의 문자열을 저장, M은 1 ~ 255의 값을 가짐
- VARCHAR(M): 가변 길이 M의 문자열을 저장, M은 1 ~ 255의 값을 가짐
- TINYBLOB, TINYTEXT: 255개의 문자를 저장
- BLOB, TEXT: 65,535개의 문자를 저장
- MEDIUMBLOB, MEDIUMTEXT: 16,777,215개의 문자를 저장
- LONGBLOB, LONGTEXT: 4,294,967,295개의 문자를 저장
- TINYINT...TIMESTAMP
- TIME...LONGTEXT
- CREATE TABLE 구문: 테이블을 생성할 때 사용
- 형태: CREATE TABLE 테이블명(필드명1 타입 [NULL | NOT NULL] [DEFAULT 기본값] [AUTO_INCREMENT] [, 필드명2 타입 ...], PRIMARY KEY(필드명));
- NULL | NOT NULL: 속성값의 빈 값(NULL) 허용 여부 설정
- 지정하지 않으면 NULL이 기본값으로 적용됨
- DEFAULT 기본값: 입력하지 않았을 때의 기본값 설정
- AUTO_INCREMENT: 해당 필드의 레코드가 자동으로 1씩 증가하도록 설정
- PRIMARY KEY(필드명): 해당 필드를 PRIMARY KEY로 지정할 지 설정
- 해당 필드명 뒤에 바로 PRIMARY KEY를 입력해도 동일하게 동작
- NULL | NOT NULL: 속성값의 빈 값(NULL) 허용 여부 설정
- 형태: CREATE TABLE 테이블명(필드명1 타입 [NULL | NOT NULL] [DEFAULT 기본값] [AUTO_INCREMENT] [, 필드명2 타입 ...], PRIMARY KEY(필드명));
- ALTER TABLE 구문: 테이블의 정보를 수정(Column을 추가, 삭제, 수정, 테이블명 변경)할 때 사용
- 형태
- Column 추가: ALTER TABLE 테이블명 ADD 필드명 타입 [NULL | NOT NULL] [DEFAULT 기본값] [AUTO_INCREMENT];
- Column 삭제: ALTER TABLE 테이블명 DROP 필드명;
- Column 수정: ALTER TABLE 테이블명 CHANGE 필드명1 필드명2 타입 [NULL | NOT NULL] [DEFAULT 기본값] [AUTO_INCREMENT];
- 필드명을 필드명2로 바꾸고, 속성 또한 다시 설정
- 테이블명 변경: ALTER TABLE 테이블명1 RENAME 테이블명2
- 테이블명을 테이블명2로 변경
- 형태
- DROP TABLE 구문: 테이블을 삭제할 때 사용
- 형태: DROP TABLE 테이블명;
- 제약 조건이 있을 경우 명령을 실행해도 테이블이 삭제되지 않을 수 있음
- 예시) 삭제 대상 테이블의 특정 Column이 다른 테이블의 Foreign Key라서 공유되고 있는 경우
- 제약 조건으로 인해 삭제되지 않는 경우 테이블을 생성한 반대 순서로 삭제를 해야 함
- 테이블 삭제 후 해당 테이블에 대해 DESC 명령을 수행하면 존재하지 않는 테이블이라는 메시지가 출력됨
심화 / 생각해보기
- 데이터의 길이가 10인 Column의 길이를 줄일 수 있는지 여부
- 실행 시 에러가 발생하고 실행되지 않음
- 문자열 저장 데이터 타입인 CHAR과 VARCHAR의 차이점, 그리고 두 타입을 효율적으로 사용하는 방법
- 참고자료: [DBA] 데이터타입 CHAR과 VARCHAR 중 어느것을 써야할까?
- CHAR은 고정 길이로, 문자열이 가변적이라면 비효율적임
- VARCHAR은 가변 길이로 할당된 Byte만 적용됨
- VARCHAR은 길이를 계산하기 때문에 미세하게 느리지만, 실질적인 속도 차이는 거의 없음
- 프로젝트는 언제든 변할 수 있고, 또 고정 길이는 빈 공간에 대한 비용이 생길 수 있으므로 항상 VARCHAR을 사용하는 것이 나음
- 문자열 데이터 타입에 문자셋을 지정할 수 있는데, 문자셋에 따라 필드가 차지하는 공간 크기는?
- 형태: 타입 CHARACTER SET 문자셋;
- EUC-KR: 영문, 숫자, 기호는 1 Byte, 한글, 한자는 2 Byte를 차지
- UTF-8: 영문, 숫자, 기호는 1 Byte, 한글, 한자는 3 Byte를 차지
'Today I learned > Online Courses' 카테고리의 다른 글
JDBC (Back End) ... Part 1 (0) | 2020.04.06 |
---|---|
Maven (Back End) (0) | 2020.04.06 |
SQL (Back End) ... Part 1 (0) | 2020.04.06 |
MySQL (Back End) (0) | 2020.04.05 |
EL과 JSTL (Back End) (0) | 2020.04.05 |