1. 데이터 유형
자주 쓰이는 데이터 유형
데이터 유형 | 설명 |
CHARACTER(s) | ‐ 고정 길이 문자열 정보CHAR 로 표현)‐ s 는 기본 길이 1바이트. 최대 길이 2000 or 8000바이트.‐ s 만큼 최대 길이 갖고, 고정 길이 갖고 있으므로할당된 변수 값의 길이가 s 보다 작을 경우엔그 차이 길이만큼 공간으로 채워짐. |
VARCHAR(s) | ‐ "CHARACTER VARYING"의 약자. 가변 길이 문자열 정보 Oracle: VARCHAR2 , SQL Server: VARCHAR ‐ s 는 최소 길이 1바이트, 최대 길이 4000 or 8000바이트.‐ s 만큼의 최대 길이 갖지만, 가변 길이 조정되므로할당된 변수값의 바이트만 적용됨. |
NUMERIC | ‐ 정수, 실수 등 숫자 정보(Oracle은 NUMBER )‐ Oracle에선, 처음에 전체 자리 수 지정, 그리고 소수 부분 자리 수 지정. |
DATE | ‐ 날짜와 시각 정보 ‐ Oracle은 1초 단위 |
2. CREATE TABLE
2.1. 테이블과 칼럼 정의
기본키 칼럼 정의
- 테이블에 존재하는 모든 데이터를 고유하게 식별 가능하면서
반드시 값 존재하는 단일 칼럼이나 칼럼의 조합들(후보키) 중에 하나를 선정.
- 기본키는 단일 칼럼이 아닌 여러 개 칼럼으로도 만들어질 수 있음.
- 테이블과 테이블 간 정의된 관계는 기본키와 외부키 활용해서 설정
- 변경 및 삭제 시에 수정/삭제 이상Anomaly 현상 발생 가능성
=> 테이블 별도 분리 저장(ID / 이름)
ID를 외부키로 참조.
테이블 | 칼럼 설명 |
부서 (DEPT) | 부서에 대한 상세 정보 (부서ID, 부서명, 부서지역) |
사원 (EMP) | 사원에 대한 상세 정보 (사원ID, 사원명, 업무, 매니저, 입사일자, 급여, 커미션, 부서ID) |
2.2. CREATE TABLE
테이블 생성 구문 형식
1
2
3
4
5
CREATE TABLE 테이블이름 (
칼럼명1 DATATYPE [DEFAULT 형식],
칼럼명2 DATATYPE [DEFAULT 형식],
칼럼명3 DATATYPE [DEFAULT 형식]
);
테이블 생성 시 주의할 규칙
테이블명은 객체 의미에 적절한 이름 사용.
가능한 단수형으로.테이블명은 다른 테이블 이름과 중복 X
한 테이블 내에선 칼럼명 중복 지정 X
(다른 테이블 간 동일 이름 칼럼은
기본키-외래키 관계 경우 많음.)테이블 이름 지정하고,
각 칼럼들은 괄호( )
로 묶어 지정.각 칼럼들은 콤마
,
로 구분,
테이블 생성문의 끝은 항상 세미콜론;
으로 끝남.칼럼에 대해선 다른 테이블까지 고려하여
DB 내에선 일관성 있게 사용하기.
(데이터 표준화 관점)칼럼 뒤의 데이터 유형은 꼭 지정되어야 함.
테이블명, 칼럼명은 반드시 문자로 시작,
벤더별로 길이에 대한 한계 존재.A-Z
,a-z
,0-9
,_
,$
,#
문자만 허용.
실제 DBMS에선 칼럼명을 PC나 UNIX의 디렉토리 구조처럼
'DB명+DB사용자명+테이블명+칼럼명'와 같은 계층적 구조로 관리
2.2.1. 선수 테이블 PLAYER
생성
1
2
3
4
5
6
7
8
9
CREATE TABLE PLAYER (
PLAYER_ID CHAR(7) NOT NULL,
PLAYER_NAME VARCHAR(20) NOT NULL,
TEAM_ID CHAR(3) NOT NULL,
E_PLAYER_NAME VARCHAR(40),
JOIN_YYYY CHAR(4),
CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID),
CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)
);
테이블 생성 관련 추가 주의사항
테이블 생성시 대/소문자 구분은 X
(테이블, 칼럼명은 대문자로 만들어짐)DATETIME 데이터 유형엔 별도로 크기 지정 X
문자 데이터 유형은 반드시
가질 수 있는 최대 길이 표시해야 함.칼럼과 칼럼의 구분은 콤마,
But, 마지막 칼럼은 X.칼럼에 대한 제약조건 있다면
CONSTRAINT
으로 추가 가능.
1
2
3
4
5
6
7
8
9
10
CREATE TABLE TEAM (
TEAM_ID CHAR(7) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(20) NOT NULL,
E_TEAM_NAME VARCHAR(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES TEAM(TEAM_ID)
);
2.3. 제약조건CREATE TABLE
: 데이터의 무결성 유지하기 위한 DB의 보편적 방법으로,
테이블의 특정 칼럼에 설정하는 제약.
(데이터 무결성 유지 <===> 사용자가 원하는 조건의 데이터만 유지)
2.3.1. 제약조건의 종류
구분 | 설명 |
PRIMARY KEY (기본키) | ‐ 테이블에 저장된 row 데이터를 고유하게 식별 위한 기본키 정의. ‐ 한 테이블에 하나의 기본키 제약만. ‐ 기본키 제약 정의 시, DBMS는 자동으로 고유키 인덱스 생성, 기본키 구성 칼럼에서는 ``NULL`` 입력불가. ==> '기본키 제약 = 고유키 제약 & NOT NULL 제약' |
UNIQUE KEY (고유키) | ‐ 테이블 저장된 row 데이터를 고유하게 식별 위한 고유키 정의. 단, NULL 은 고유키 제약 대상 아님.==> NULL 값 가진 row가 여러 개 있어도 고유키 제약 위반은 X. |
NOT NULL | ‐ NULL 값 입력 금지함.‐ 디폴트 상태에선 모든 칼럼에 NULL 허가하고 있음.But, 이 제약 지정으로 해당 칼럼은 입력 필수가 됨. ‐ NOT NULL 을 CHECK 의 일부분으로도 이해 가능. |
CHECK | ‐ 입력 가능한 값의 범위 등을 제한. ‐ CHECK 제약으론 TRUE or FALSE 으로 평가 가능한 논리식 지정함. |
FOREIGN KEY (외래키) | ‐ RDB에서 테이블 간 관계 정의 위해 기본키를 다른 테이블의 외래키로 복사할 때 생김. ‐ 외래키 지정시 참조 무결성 계약 옵션 선택 가능. |
2.3.2. NULL
의 의미
NULL
은 공백(BLANK)이나 숫자 0
과는 전혀 다른 값.
조건 맞는 데이터 없을 때의 공집합($ \varnothing $)과도 다름.
==> ‘아직 정의되지 않은 미지의 값’ OR ‘현재 데이터 입력하지 못하는 경우’를 의미
2.3.3. DEFAULT
의 의미
column 값이 지정되어 있지 않을 경우 기본값DEFAULT을 사전에 설정 가능.
==> 지정 안 한 경우: NULL
값
정의한 경우: 정의된 기본 값으로 입력됨.
2.3.4. 팀 테이블 TEAM
생성
1
2
3
4
5
6
7
8
9
10
CREATE TABLE TEAM (
TEAM_ID CHAR(7) NOT NULL,
REGION_NAME VARCHAR(8) NOT NULL,
TEAM_NAME VARCHAR(20) NOT NULL,
E_TEAM_NAME VARCHAR(50),
ORIG_YYYY CHAR(4),
STADIUM_ID CHAR(3) NOT NULL,
CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID),
CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES TEAM(TEAM_ID)
);
2.4. 생성된 테이블 구조 확인
1
DESCRIBE PLAYER;
결과
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
PLAYER_ID | char(7) | NO | PRI | null | |
PLAYER_NAME | varchar(20) | NO | null | ||
TEAM_ID | char(3) | NO | MUL | null | |
E_PLAYER_NAME | varchar(40) | YES | null | ||
JOIN_YYYY | char(4) | YES | null |
2.5. SELECT
문장 통한 테이블 생성 사례
1
2
CREATE TABLE TEAM_TEMP
AS SELECT * FROM TEAM;
1
DESC TEAM_TEMP;
결과
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
TEAM_ID | char(7) | NO | null | ||
REGION_NAME | varchar(8) | NO | null | ||
TEAM_NAME | varchar(20) | NO | null | ||
E_TEAM_NAME | varchar(50) | YES | null | ||
ORIG_YYYY | char(4) | YES | null | ||
STADIUM_ID | char(3) | NO | null |
3. ALTER TABLE
3.1. ADD COLUMN
기존 테이블에 필요한 column 추가하기
1
2
ALTER TABLE 테이블명
ADD 추가할 칼럼명 데이터 유형;
1
2
ALTER TABLE PLAYER
ADD ADDRESS VARCHAR(80);
1
DESC PLAYER;
결과
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
PLAYER_ID | char(7) | NO | PRI | null | |
PLAYER_NAME | varchar(20) | NO | null | ||
TEAM_ID | char(3) | NO | MUL | null | |
E_PLAYER_NAME | varchar(40) | YES | null | ||
JOIN_YYYY | char(4) | YES | null | ||
ADDRESS | varchar(80) | YES | null |
3.2. DROP COLUMN
- 테이블에서 필요 없는 column 삭제.
(데이터가 있든 없든 모두 삭제 가능.) - 한 번에 하나의 칼럼만 삭제 가능
&
삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 함.
1
2
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;
결과
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
PLAYER_ID | char(7) | NO | PRI | null | |
PLAYER_NAME | varchar(20) | NO | null | ||
TEAM_ID | char(3) | NO | MUL | null | |
E_PLAYER_NAME | varchar(40) | YES | null | ||
JOIN_YYYY | char(4) | YES | null |
3.3. MODIFY COLUMN
1
2
3
ALTER TABLE 테이블명
modify (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL],
칼럼명2 데이터 유형 ...);
1
2
ALTER TABLE TEAM_TEMP
MODIFY ORIG_YYYY VARCHAR(8) DEFAULT '20020129' NOT NULL;
1
2
3
SELECT *
FROM COLS
WHERE TABLE_NAME = 'TEAM_TEMP';
결과
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
TEAM_ID | char(7) | NO | null | ||
REGION_NAME | varchar(8) | NO | null | ||
TEAM_NAME | varchar(20) | NO | null | ||
E_TEAM_NAME | varchar(50) | YES | null | ||
ORIG_YYYY | varchar(8) | NO | 20020129 | ||
STADIUM_ID | char(3) | NO | null |
칼럼 변경 시 아래 사항 고려
- 해당 칼럼의 크기를 늘릴 수는 있지만 줄이지는 못함.
기존 데이터가 훼손될 수 있기 때문. - 해당 칼럼이
NULL
값만을 가지고 있거나
테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있음. - 해당 칼럼이
NULL
값만 가지고 있으면
데이터 유형 변경 가능. - 해당 칼럼의
DEFAULT
값 바꾸면
변경 작업 이후 발생하는 행 삽입에만 영향 미침. - 해당 칼럼에
NULL
값 없을 경우에만
NOT NULL
제약조건 추가 가능.
3.4. RENAME COLUMN
1
2
ALTER TABLE 테이블명
RENAME COLUMN 변경해야 할 칼럼명 TO 새로운 칼럼명;
3.5. DROP CONSTRAINT
1
2
ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;
1
DROP TABLE PLAYER;
3.6. TRUNCATE TABLE
테이블 자체는 삭제 X
해당 테이블에 들어있던 모든 행들 제거되고
저장 공간 재사용 가능하도록 해체함.
1
TRUNCATE TABLE;
1
TRUNCATE TABLE TEAM;
4. RENAME TABLE
1
RENAME 변경전 테이블명 TO 변경후 테이블명;
5. DROP TABLE
1
DROP TABLE 테이블명 [CASCADE CONSTRAINT];
※ CASCADE CONSTRAINT
란?
: 해당 테이블과 관계 있었던 참조되는 제약조건에 대해서도 삭제한다는 것 의미.
6. TRUNCATE TABLE
1
TRUNCATE TABLE 테이블명;
TRUNCATE TABLE
은 테이블 자체 삭제 X,
해당 테이블에 들어있던 모든 row들이 제거되고 저장 공간 재사용 가능토록 해제함.