본문 바로가기

JAVA/JDBC

DDL (Data Definition Language) [create / drop / alter] + 제약조건


CREATE : (만들기)


문자형 데이터 타입

 데이터 유형

 설명

 길이

 char

[(size[BYTE |CHAR])]

(가장 많이 사용)

고정 길이의 문자형 데이터 타입으로 그 크기는 SIZE만큼의 BYTE수 혹은 문자 개수가 된다.

 최대 크기는 2000BYTE가 될수 있으며 byte,char명시 안하면 디폴트로 byte가 된다.

size 값을 명시하지 않을 경우 디폴트 값은 1이다.

 VARCHAR2

[size[BYTE | CHAR]]

(가장 많이 사용)

가변 길이의 문자형 데이터 타입으로 그 크기는 최대  SIZE만큼의 BYTE수 혹은 문자수가 된다. 반드시 size값을 명시해야 한다.

 최대 크기는 4000byte가 될 수 있으며,byte나 char를 명시하지 않을 경우 디폴트값은 byte가 되며, size값을 생략할 수 없다.

 NCHAR [(size)]

고정 길이의 유니코드 문자형 데이터 타입으로 그 크기는 UTF8 엔코딩의 경우 size*3byte, AL16UTF16 엔코딩의 경우 size*2byte가 된다. 

최대 크기는 2000byte이며 size 값을 명시하지 않을 경우 디폴트값은 1이다. 

 NVARCHAR2 (size)

가변 길이의 유니코드 문자형 데이터 타입으로 그 크기는 최대 size 값이 되며, UTF8의 경우 3배, AL16UTF16 엔코딩의 경우 2배의 byte가 된다. 

최대 크기는 4000byte이며 size 값을 생략할 수 없다. 

 LONG

가변 길이의 문자형 데이터 타입 

최대 크기는 2GB이다.



숫자형 데이터 타입

 데이터 유형

설명 

길이 

BINARY_FLOAT 

32bit 부동 소수 

4byte 

BINARY_DOUBLE

64bit 부동 소수 

8byte 

NUMBER

[ (prec |prec, scale) ] 

(가장 많이 사용)

가변 숫자 타입으로, prec로 설정한 값(1~38)은 전체 자릿수이며, scale로 설정값(-84~127)은 소수점 이하 자릿수를 의미한다. 

최대값은 21byte 



날짜형 데이터 타입

 데이터 유형

설명 

길이 

DATE 

(가장 많이 사용)

고정 길이의 날짜와 시간 데이터로서 BC4712년 1월 1일부터 9999년 12월 31일까지 표현할 수 있다. 

7byte 표현형태는 NLS_DATE_FORMAT 파라미터에 명시된 값을 따른다. 

INTERVAL YEAR

[(yr_prec)] TO MONTH 

연도와 월 형태로 기간을 표현한다. yr_prec는 날짜의 연도의 최대 자릿수를 나타내며 그 값은 0~9 범위이고 디폴트 값은 2이다. 

5byte 

INTERVAL DAY

[(day_prec)] TO SECOND

[(frac_sec_prec)] 

요일, 시, 분, 초 형태로 기간을 표현한다.  Day_prec는 날짜 자릿수를 frac_sec_prec는 날짜의 초 자릿수를 나타내며 0~9까지 사용할 수 있다. 디폴트 자릿수는 day_prec가 2,  frac_sec_prec가 6이다. 

11byte 

TIMESTAMP

[(frac_sec_prec)] 

밀리초 까지 표현가능한 날짜형 데이터 타입으로 , frac_sec_prec에는 초(second) 정보의 정밀도를 나타내는데 0~9까지 올 수 있고 디폴트 값은 6이다.

precision에 다라 7~11byte로 디폴트값은 NLS_TIMESTAMP_FORMAT 파라미터에 명시된 값을 따른다. 

TIMESTAMP

[(frac_sec_prec)] WITH TIME ZONE 

시간대와 더불어 날짜와 시간을 표현한다. 시간대는 '-5:0 '나 'US/Pacific'가 올 수 있다.

frac_sec_prec은 TIMESTAMP를 위한 것이다.

13byte로 디폴트값은 NLS_TIMESTAMP_TZ_FORMAT 파라미터에 명시된 값을 따른다. 

 TIMESTAMP

[(frac_sec_prec)]WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONE과 비슷하나 저장시점에는 데이터베이스 시간대를 준수하나 조회시에는 조회하는 클라이언트의 시간대로 표현된다. frac_sec_prec은 TIMESTAMP를 위한 것이다. 

frac_sec_prec에 따라 7~11byte이며, 디폴트값은 NLS_TIMESTAMP_FORMAT 파라미터에 명시된 값을 따른다. 



1. TABLE 생성하기.


create table department (

dept_id         number(3),

dept_name     varchar2(30),

location        varchar2(60),


constraint dept_id_pk primary key(dept_id)

);


create table employee(

emp_id        number(3),

emp_name  varchar2(30) not null,

email           varchar2(50) not null,

position       varchar2(30) not null,

salary          number         not null,

hire_date    date               not null,

dept_id        varchar(3)    not null,


--제약조건

constraint emp_id_pk primary key(emp_id),

constraint dept_id_fk foreign key(dept_id) references department(dept_id)

--constraint dept_id_fk foreign key(dept_id) references department(dept_id) [on delete cascade]

);


제약조건!! 

constraint [제약조건이름] primary key(컬럼명) 

constraint [제약조건이름] foriegn key(컬럼명) references 부모테이블명(컬럼명) on delete cascade


제약조건의 종류


UNIQUE

테이블에 있는 데이터를 유일하게 식별하기 위한 무결성 제약조건 중 하나이다.

만약에 주소록 테이블에 이메일까지 저장을 하게된다면 이메일은 그 누구와도 중복되지 않고 유일하다는 걸 알고 있을 것이다.  UNIQUE는 중복되지 않고 유일하게 그 데이터를 식별하기 위해 사용된다.


CHECK

입력되는 값을 체크하여 일정한 조건에 해당되는 값만 입력될 수 있게 하는 제약조건이다.



DROP :(삭제)

DROP TABLE 테이블명 [ CASCADE CONSTRAINTS ];




ALTER : (변경)

1. 테이블에 컬럼 추가하기

ALTER TABLE 테이블명 ADD (컬럼명 VARCHAR2(03)  [NOT NULL]);


2. 테이블에 컬럼 변경하기

ALTER TABLE 테이블명 MODIFY (컬럼명 VARCHAR2(03) [NOT NULL]);

CHAR <-> VARCHAR2 : 해당 컬럼의 데이터가 NULL이 아니어도 MODIFY 가능

CHAR/VARCHAR2 <-> CLOB : 해당 컬럼의 데이터가 NULL이어도 MODIFY 불가


3.테이블에 컬럼 삭제하기

ALTER TABLE 테이블명 DROP COLUMN (컬럼1);    -- 1개 삭제

ALTER TABLE 테이블명 DROP (컬럼1 [,컬럼2,...]); -- 2개 이상 삭제


4.테이블 이름 재설정하기

ALTER TABLE 테이블명 RENAME COLUMN old_컬럼 TO new_컬럼;


5. 제약조건 추가하기

ALTER TABLE 테이블명 ADD PRIMARY KEY (컬럼명);

ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼명);


6. 제약조건 삭제하기

ALTER TABLE 테이블명 DROP PRIMARY KEY;

ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;




반응형