반응형
테이블 생성
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 |