본문 바로가기

ORACLE

oracle 테이블 관리

※ 테이블관리


① 테이블명 고치기
- ALTER table 구테이블명 RENAME TO 신테이블명;(테이블명변경)
  SQL> ALTER TABLE emp RENAME TO new_emp;
- ALTER table 테이블명 RENAME COLUMN 구컬럼명 TO 신테이블명;(테이블컬럼명변경)
  SQL> ALTER TABLE emp RENAME COLUMN job TO jobname;
- ALTER table 테이블명 RENAME CONSTRAINT 구제약조건명 TO 신제약조건명;

  (제약조건명변경)

 

② 컬럼 추가
- SQL> ALTER TABLE emp ADD(addr varchar2(50));

 

③ 컬럼 변경
- SQL> ALTER TABLE emp MODIFY(ename varchar2(50) NOT NULL);
* 컬럼이 이미 데이터를 가지고 있을 경우 다른 데이터형으로 변경 불가능

 

④ 컬럼 삭제
- SQL> ALTER TABLE emo DROP COLUMN SAL;

 

⑤ 제약조건의 삭제
- SQL> ALTER TABLE emp DROP PRIMARY KEY;
* CASCADE 연산자와 함께 사용하면 외래키에 의해 참조되는 기본키도 삭제될 수 있다
- SQL> ALTER TABLE emp DROP CONSTRAINT emp_pk_empno CASCADE

 

⑥ 테이블 TRUNCATE
- SQL> TRUNCATE TABLE emp;
* 테이블을 TRUNCATE하면 테이블의 모든 행이 삭제되고 사용된 공간이 해제
* TRUNCATE table은 DDL명령이므로 롤백 데이터가 생성되지 않는다
* DELETE 명령으로 데이터를 지우면 롤백명령어로 복구 할 수 있지만
   TRUNCATE 명령으로 데이터를 삭제하면 롤백을 할 수가 없다
* 행당 인덱스도 같이 잘려 나간다
* 외래키가 참조중인 테이블은 TRUNCATE할 수 없다

 

⑦ 테이블 삭제
- SQL> DROP TABLE emp;(테이블 삭제)
- SQL> DROP TABLE emp CASCADE CONSTRAINT;(제약조건도 같이 삭제)
* CASCADE CONSTRAINT : 외래키에 의해 참조되는 기본키를 포함한 테이블일 경우

   기본키를 참조하던 외래키 조건도 같이 된다

 

⑧ 테이블의 KEY찾기
- primary key찾기
  SQL> SELECT * FROM user_ind_columns WHERE table_name="codetable";
- 서로 연결되는 key찾기
  SQL> SELECT constraint_name,constraint_type,r_constraint_name FROM

           user_constraints WHERE table_name="TABLE_NAME";

 

⑨ 테이블 구조보기
- SQL> DESC table_name;

 

⑩ 제약조건 확인
- SQL> SELECT table_name,constraint_name,constraint_type FROM

            user_constraints WHERE table_name in("DEPARTMENT","EMPLOYEE")'

 

⑪ 테이블 복사
- 테이블A의 내용을 테이블B로 복사하는 방법(테이블A,B가 이미 존재)
  SQL> INSERT INTO b SELECT * FROM a;
- 테이블A의 내용을 테이블B를 생성하면서 복사하는 방법(테이블A만 존재)
  SQL> CREATE TABLE b AS SELECT * FROM a;
*SQL> CREATE TABLE emp_41 AS SELECT id,last_name,userid,start_date FROM

           s_emp WHERE dept_id=41;
  (where절에 엉뚱한 조건을 주면 emp_41이란 이름으로 테이블이 만들어진다)
* 기존테이블을 부분 또는 완전히 복사할 때는 서브쿼리를 가진 create table명령어를

   사용해서 쉽게 테이블 복사가능
* 제약조건, 트리거 그리고 테이블권한은 새로운 테이블로 복사되지 않는다
* 제약조건은 not null제약 조건만 복사된다
- 테이블A가 있고 테이블A와 구조가 같고 내용은 복사하지 않는 테이블B를 생성하는 방법
  SQL> CREATE TABLE b AS SELECT * FROM a WHERE 1=2;

 

⑫ 테이블 합치기
- SQL> CREATE TABLE sa4 AS SELECT saname,sajob FROM sawon

            WHERE sajob='과장';
- SQL> CREATE TABLE sa5 AS SELECT saname,sajob FROM sawon

            WHERE sajob='부장';
→ 위 두테이블 합치기
  SQL> CREATE TABLE sa45 AS SELECT * FROM sa4 UNION SELECT * FROM sa5;

 

⑬ 컬럼에 해당하는 테이블명 알아내기
- SQL> SELECT table_name FROM user_tab_cols WHERE column_name='sal';
- SQL> SELECT count(column_name) "column count" FROM cols WHERE

            table_name='emp';