본문 바로가기

DB

Oracle(테이블 생성,제약조건,시퀀스)

반응형

테이블 생성

 

CREATE TABLE 테이블명
(    컬럼명 타입(길이),
     컬럼명 타입(길이))
            .
            .
            .
     컬럼명 타입(길이))
 ); 
CREATE TABLE TBL_MEMBER(
    
    MEMBER_NAME VARCHAR2(30),
    MEMBER_PASSWORD VARCHAR2(50),
    MEMBER_ROLE VARCHAR2(30),
    MEMBER_EMAIL VARCHAR2(60),
    MEMBER_ADDRES VARCHAR2(100),
    MEMBER_AGE VARCHAR2(60),
  
    );

컬럼명과 타입명, 길이만 설정했지만 NOT NULL을 추가적으로 설정할 수 있다.

위 처럼 NOT NULL을 적지않으면 디폴트로 NULL 가능이 설정된다.

 

테이블 생성후에도 NOT NULL 조건과 제약조건을 추가 할수 있고 삭제 할수 있다.

ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;

 

 


#프라이머리키 제약조건 추가(제약조건명 지정)
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY (칼럼명1);

#유니크 추가
ALTER TABLE 테이블명 ADD UNIQUE(컬럼명);

#왜래키 추가
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY(외래키 칼럼명) 
REFERENCES 부모테이블(부모테이블_PK) [ON DELET 옵션] [ON UPDATE 옵션]

#제약 조건 이름 변경
ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건이름 TO 변경할 이름;

#프라이머리키 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY:

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

#컬럼추가
ALTER TABLE 테이블 ADD (추가할 컬럼명 데이터 타입());
ALTER TABLE 테이블 ADD 컬럼 데이터타입() DEFAULT 'test@test.com' NOT NULL;

#컬럼 일부분 데이터 추가
INSERT INTO 테이블 (컬럼명1, 컬럼명2) VALUES (데이터,데이터);

#컬럼삭제
ALTER TABLE 테이블 DROP COLUMN 컬럼명;

#컬럼 데이터 삭제
DELETE 테이블 WHERE 컬럼명 = 컬럼 데이터; 

#컬럼 데이터 업데이트
UPDATE 테이블명 SET 컬럼1 = 수정값1, 컬럼2 = 수정값2 WHERE 조건;

 

 

CREATE TABLE 테이블명
(    컬럼명 타입(길이) NOT NULL,
     컬럼명 타입(길이) NOT NULL,CONSTRAINT 재약조건이름 UNIQUE(컬럼명)
)
            .
            .
            .
     컬럼명 타입(길이))
     CONSTRAINT 제약조건 이름 PRIMARY KEY(컬럼이름),
     CONSTRAINT 제약조건 이름 FOREIGN KEY(컬럼이름)
   	 REFERENCES 부모테이블(부모컬럼PK)ON DELETE CASCADE,
     
 ); 
CREATE TABLE TBL_MEMBER(
    
    MEMBER_NAME VARCHAR2(30) ,
    MEMBER_PASSWORD VARCHAR2(50) NOT NULL,
    MEMBER_ROLE VARCHAR2(30) NOT NULL,
    MEMBER_EMAIL VARCHAR2(60) NOT NULL,
    MEMBER_ADDRES VARCHAR2(100) CONSTRAINT ADDRES_UNIQUE UNIQUE(MEMBER_ADDRES),
    MEMBER_AGE VARCHAR2(60) NOT NULL,
  
  	CONSTRAINT FK_MEMBER_NAME FOREIGN KEY(MEMBER_WRITER)
    REFERENCES TBL_MEMBER(MEMBER_NAME) ON DELETE CASCADE,
    CONSTRAINT PK_BOARD_NO PRIMARY KEY(BOARD_NO)
    
    );

데이터 베이스를 설계 하면서 가장 놓치는 부분이 뭐냐면  ON DELETE 옵션인데 테이블 추가 하면서 해주는게 편하다 ㅜ

테이블 생성후에 추가하기 위해서는 제약조건을 한번 삭제후에 외래키를 다시 추가해주면서 ON DELETE 설정을 해줘야한다.

 

#외래키 삭제
ALTER TABLE TBL_BOARD DROP CONSTRAINT FK_MEMBER_NAME;


#외래키 추가
ALTER TABLE 자식 테이블
ADD CONSTRAINT 제약 조건 이름
  FOREIGN KEY (자식 테이블 컬럼명)
  REFERENCES 부모테이블 (부모테이블 PK)
  ON DELETE CASCADE;

 

시퀀스 생성

CREATE SEQUENCE [시퀀스명]
INCREMENT BY [증감숫자] --증감숫자가 양수면 증가 음수면 감소 디폴트는 1
START WITH [시작숫자] -- 시작숫자의 디폴트값은 증가일때 MINVALUE 감소일때 MAXVALUE
NOMINVALUE OR MINVALUE [최솟값] -- NOMINVALUE : 디폴트값 설정, 증가일때 1, 감소일때 -1028 
                               -- MINVALUE : 최소값 설정, 시작숫자와 작거나 같아야하고 MAXVALUE보다 작아야함
NOMAXVALUE OR MAXVALUE [최대값] -- NOMAXVALUE : 디폴트값 설정, 증가일때 1027, 감소일때 -1
                               -- MAXVALUE : 최대값 설정, 시작숫자와 같거나 커야하고 MINVALUE보다 커야함
CYCLE OR NOCYCLE --CYCLE 설정시 최대값에 도달하면 최소값부터 다시 시작 NOCYCLE 설정시 최대값 생성 시 시퀀스 생성중지
CACHE OR NOCACHE; --CACHE 설정시 메모리에 시퀀스 값을 미리 할당하고 NOCACHE 설정시 시퀀스값을 메로리에 할당하지 않음

시퀀스를 생성하고 데이터값을 넣으면 1부터 시작하지 않을때가 있다. 그럴때는 밑에 처럼 해주면 된다.

#시퀀스 조회
SELECT * FROM user_sequences;



#시퀀스의 현재 값을 확인
SELECT LAST_NUMBER FROM USER_SEQUENCES WHERE SEQUENCE_NAME = 'SEQ_BOARD';

#시퀀스의 INCREMENT 를 현재 값만큼 빼도록 설정 (아래는 현재값이 10000000000 일 경우)
ALTER SEQUENCE SEQ_BOARD INCREMENT BY -10000000000;

#시퀀스에서 다음 값을 가져 온다
SELECT SEQ_BOARD.NEXTVAL FROM DUAL;

#현재 값을 확인 해보면 -999999 만큼 증가 했다
SELECT SEQ_BOARD.CURRVAL FROM DUAL;

#시퀀스의 INCREMENT 를 1로 설정 한다
ALTER SEQUENCE SEQ_BOARD increment by 1;

 

 

시퀀스도 수정도 가능하다 

ALTER SEQUENCE SEQ_BOARD
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999999999
CYCLE
ORDER
NOCACHE;

 

반응형

'DB' 카테고리의 다른 글

Oracle(트리거생성,UPDATE,INSERT)  (0) 2020.12.10
Oracle(프로시저)  (0) 2020.12.10
Oracle(Join ) 유형 및 구분  (0) 2020.12.01
Oracle (변환 함수)  (0) 2020.11.20
Oracle 날짜 함수  (0) 2020.11.20