[Oracle/SQL] 테이블/인덱스/컬럼/메타데이터/DB Link/데이터형
Posted on 2009. 6. 5. 13:24
Filed Under DB
----------------------------------------------------------------------------------------------------
♠ 용어
* Primary Key: 테이블의 행을 유일하게 식별할 수 있는 유일 키 칼럼(들)을 지정
* Foreign Key: 자신이나 다른 테이블의 Primary Key를 참조하는 칼럼(들)을 지정
* Constraint(제한조건) : Primery Key, Foreign Key, Unique, Check (조건식)
♠ 데이터형 상세 설명
http://www.gurubee.net/lecture/1380
----------------------------------------------------------------------------------------------------
♠ 테이블명 변경
ALTER TABLE table1 RENAME TO table2
----------------------------------------------------------------------------------------------------
♠ 기존 테이블의 데이터 끌어다 넣기
UPDATE tbl1 N
SET N.col1 = (SELECT L.col2 FROM tbl2 L WHERE N.a = L.a);
♠ 테이블 복사
CREATE TABLE tbl_name AS
SELECT * FROM target_tbl_name;
-------------------------------------------------------------------------------------------------
♠ 테이블 컬럼
1) 컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 to 새 컬럼명;
2) 컬럼 추가
ALTER TABLE 테이블명 ADD (컬럼명 NUMBER(2) DEFAULT 디폴트값 NOT NULL);
ALTER TABLE 테이블명 ADD (컬럼명 NUMBER UNSIGNED NOT NULL AUTO_INCREMENT);
3) 컬럼 데이터 타입 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 신_데이터타입;
4) 테이블/컬럼에 코멘트 추가
COMMENT ON TABLE 테이블명 IS '코멘트';
COMMENT ON COLUMN 테이블명.컬럼명 IS '코멘트' ;
5) 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
----------------------------------------------------------------------------------------------------
♠ 제약조건 추가/삭제
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK (컬럼명 = 0 OR (컬럼명 > 14);
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
----------------------------------------------------------------------------------------------------
♠ FK 설정하기 <출처: http://mainia.tistory.com/513>
ALTER TABLE board_free -- 설정할 테이블
ADD FOREIGN KEY (mem_no) -- 테이블에 FK 컬럼
REFERENCES members(mem_no)-- FK 연결이 되는 테이블과 PK 컬럼
ON DELETE RESTRICT -- 기본설정으로 자식에서 부모를 삭제 불가
ON UPDATE RESTRICT; -- 기본설정으로 자식에서 부모를 업데이트 불가
다음은 마지막 옵션값에 대한 설명이다.
ON DELETE RESTRICT : 기본설정으로 자식 row 에서 해당 부모 row 를 삭제하지 못한다.
ON DELETE CASCADE : 부모 테이블의 row가 삭제되면, InnoDB는 부모 row를 참조키와 동일한 외래 키를 갖는 자식 테이블의 모든 해당 row도 자동적으로 삭제한다.
ON DELETE SET NULL(?) : 자식 row도 자동적으로 update되어 외래 키에 해당하는 row는 NULL이 된다.
♠ 용어
* Primary Key: 테이블의 행을 유일하게 식별할 수 있는 유일 키 칼럼(들)을 지정
* Foreign Key: 자신이나 다른 테이블의 Primary Key를 참조하는 칼럼(들)을 지정
* Constraint(제한조건) : Primery Key, Foreign Key, Unique, Check (조건식)
♠ 데이터형 상세 설명
http://www.gurubee.net/lecture/1380
----------------------------------------------------------------------------------------------------
♠ 테이블명 변경
ALTER TABLE table1 RENAME TO table2
----------------------------------------------------------------------------------------------------
♠ 기존 테이블의 데이터 끌어다 넣기
UPDATE tbl1 N
SET N.col1 = (SELECT L.col2 FROM tbl2 L WHERE N.a = L.a);
♠ 테이블 복사
CREATE TABLE tbl_name AS
SELECT * FROM target_tbl_name;
-------------------------------------------------------------------------------------------------
♠ 테이블 컬럼
1) 컬럼명 변경
ALTER TABLE 테이블명 RENAME COLUMN 컬럼명 to 새 컬럼명;
2) 컬럼 추가
ALTER TABLE 테이블명 ADD (컬럼명 NUMBER(2) DEFAULT 디폴트값 NOT NULL);
ALTER TABLE 테이블명 ADD (컬럼명 NUMBER UNSIGNED NOT NULL AUTO_INCREMENT);
3) 컬럼 데이터 타입 변경
ALTER TABLE 테이블명 MODIFY 컬럼명 신_데이터타입;
4) 테이블/컬럼에 코멘트 추가
COMMENT ON TABLE 테이블명 IS '코멘트';
COMMENT ON COLUMN 테이블명.컬럼명 IS '코멘트' ;
5) 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
----------------------------------------------------------------------------------------------------
♠ 제약조건 추가/삭제
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 CHECK (컬럼명 = 0 OR (컬럼명 > 14);
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명;
----------------------------------------------------------------------------------------------------
♠ FK 설정하기 <출처: http://mainia.tistory.com/513>
ALTER TABLE board_free -- 설정할 테이블
ADD FOREIGN KEY (mem_no) -- 테이블에 FK 컬럼
REFERENCES members(mem_no)-- FK 연결이 되는 테이블과 PK 컬럼
ON DELETE RESTRICT -- 기본설정으로 자식에서 부모를 삭제 불가
ON UPDATE RESTRICT; -- 기본설정으로 자식에서 부모를 업데이트 불가
다음은 마지막 옵션값에 대한 설명이다.
ON DELETE RESTRICT : 기본설정으로 자식 row 에서 해당 부모 row 를 삭제하지 못한다.
ON DELETE CASCADE : 부모 테이블의 row가 삭제되면, InnoDB는 부모 row를 참조키와 동일한 외래 키를 갖는 자식 테이블의 모든 해당 row도 자동적으로 삭제한다.
ON DELETE SET NULL(?) : 자식 row도 자동적으로 update되어 외래 키에 해당하는 row는 NULL이 된다.
----------------------------------------------------------------------------------------------------
♠ INDEX 생성/삭제
CREATE (UNIQUE) INDEX [인덱스명] ON [테이블명](컬럼1, 컬럼2, 컬럼,..);
DROP INDEX 인덱스명;
--인덱스명 변경
ALTER INDEX idx_name1 RENAME TO idx_name2
ALTER INDEX idx_name1 RENAME TO idx_name2
----------------------------------------------------------------------------------------------------
♠ Oracle 메타 테이블 정보
♠ DB Link 생성
----------------------------------------------------------------------------------------------------
♠ Oracle IP정보
-- 메타 정보 테이블 목록 SELECT * FROM DICTIONARY ORDER BY TABLE_NAME; -- 컬럼 코멘트 정보 SELECT * FROM USER_COL_COMMENTS WHERE ROWNUM < 5; -- 테이블 코멘트 정보 SELECT * FROM ALL_TAB_COMMENTS WHERE TABLE_NAME = '테이블명'; -- 테이블 스키마(DATA_TYPE,NULLABLE,..) SELECT * FROM USER_TAB_COLUMNS B WHERE ROWNUM < 5;----------------------------------------------------------------------------------------------------
♠ DB Link 생성
DROP DATABASE LINK DB링크명; CREATE DATABASE LINK DB링크명 CONNECT TO 접속ID IDENTIFIED BY 패스워드 USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=IP주소)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=서비스명)))';
----------------------------------------------------------------------------------------------------
♠ Oracle IP정보
-- 접속자 IP정보 SELECT SYS_CONTEXT('USERENV', 'IP_ADDRESS'), SYSDATE FROM DUAL; -- Oracle IP정보 SELECT UTL_INADDR.GET_HOST_ADDRESS, UTL_INADDR.GET_HOST_NAME FROM DUAL;
----------------------------------------------------------------------------------------------------
♠ Long한 서브쿼리 따로 빼서 보기
WITH SUBQUERY_VW AS
(
SELECT A FROM B WHERE 1=1
)
SELECT A.*
FROM SUBQUERY_VW A
;
반응형