9장 테이블 생성 및 변경, 삭제하기(DDL)
목 차 테이블 생성 자료형 CREATE TABLE 테이블 구조 변경하기 테이블 제거하기 데이터 딕셔너리
테이블 생성 CREATE 문의 기본 형식 CREATE TABLE 테이블명 (컬럼명 자료형, , , )
테이블과 칼럼의 명명법 A~Z, a~z, 0~9, $, #, _의 문자 1~30자의 길이 시작은 영문자로 한 사용자(계정, account)가 동일 이름의 객체 포함 못함 한 테이블의 칼럼 명은 유일해야 예약어 사용 불가
CREATE user (사용자 계정 생성)_j scott1, scott2 등의 script 파일을 bin 폴더에 복사 오라클 홈 d:\oracle\product\10.1.0\db_1\bin scott_j 사용자 생성 SQL> conn system/soft SQL> CREATE USER scott_j IDENTIFIED BY tiger TEMPORARY TABLESPACE temp DEFAULT TABLESPACE users; SQL> conn scott_j/tiger >>> lacks CREATE SESSION privilege scott_j에 접속, 자원 권한 부여 SQL> grant connect, resource to scott_j; 1. System DBA에 접속 2. 사용자 id, 패스워드 지정및 영역 이름 지정 4. 사용자에 권한 부여 3. System 에 접속
CREATE user (사용자 계정 생성)_j SQL> conn scott_j/tiger SQL> @scott1 SQL> @scott2 SQL> select * from tab; 5. 사용자에 접속 6. Scott1, scott2 스크립트 파일 실행시킴 7. 6개의 파일이 복사됐는지 확인 (emp, dept, salgrade, s_emp, s_dept, s_salgrade)
CREATE user (사용자 계정 생성)_y scott1, scott2 등의 script 파일을 bin 폴더에 복사 오라클 홈 d:\oracle\product\10.1.0\db_1\bin scott_y 사용자 생성 SQL> conn system/soft SQL> CREATE USER scott_y IDENTIFIED BY tiger TEMPORARY TABLESPACE temp DEFAULT TABLESPACE users; SQL> conn scott_y/tiger >>> lacks CREATE SESSION privilege scott_y에 접속, 자원 권한 부여 SQL> conn system/soft SQL> grant connect, resource to scott_y; 1. System 에 접속 2. 사용자 id, 패스워드 지정및 영역 이름 지정 4. 사용자에 권한 부여 3. System 에 접속
CREATE user (사용자 계정 생성)_y SQL> conn scott_y/tiger SQL> @scott1 SQL> @scott2 SQL> select * from tab; 5. 사용자에 접속 6. Scott1, scott2 스크립트 파일 실행시킴 7. 6개의 파일이 복사됐는지 확인 (emp, dept, salgrade, s_emp, s_dept, s_salgrade)
자료형
자료형
자료형 –cont’d CHAR(N) VARCHAR2(N) LOB(Large Object) ROWID 고정 길이의 문자 저장 , 최대 2000 byte VARCHAR2(N) 가변 길이의 문자 저장, 최대 4000 byte LOB(Large Object) 텍스트, 그래픽이미지, 동영상, 사운드등의 대용량 데이터 저장 최대 4GB, BLOB(그래픽, 사운드 ), CLOB(대용량텍스트), NCLOB(국가별 문자셋 데이터), BFILE(binary data를 파일로) ROWID 레코드 행의 위치 지정 주소값 SQL> SELECT ROWID, empid FROM emp; 데이터객체번호 상대적 파일번호 블록번호 행 번호 32 bit 10 bit 22 bit 16 bit (총 80bit) 테이블 번호
자료형 –cont’d TIMESTAMP INTERVAL YEAR(년도자릿수) TO MONTH(월자릿수) 날짜, 시간, 백만분의 1초(0.000001초)의 소수부를 가짐 INTERVAL YEAR(년도자릿수) TO MONTH(월자릿수) 두 날짜 사이의 기간 저장 SQL>CREATE TABLE sam02 (year01 INTERVAL YEAR(3) TO MONTH); SQL>INSERT INTO sam02 VALUES( INTERVAL ’36’ MONTH(3)); SQL>SELECT year01, sysdate, sysdate+year01 FROM sam02; 자릿수 미지정시 2로 간주 기간을 36 개월로
자료형 –cont’d INTERVAL DAY(자릿수) TO SECOND(자릿수) 일, 시, 분, 초를 이용하여 두 날짜 사이의 기간 저장 SQL>CREATE TABLE sam03 (day01 INTERVAL DAY(3) TO SECOND); SQL>INSERT INTO sam03 VALUES( INTERVAL ’100’ DAY(3)); SQL>SELECT day01, sysdate, sysdate+day01 FROM sam03; 기간을 100 일로
CREATE TABLE 로 생성하기 사원테이블과 유사한 em01 테이블 생성 SQL> CREATE TABLE em01 (empno NUMBER(4), ename varchar2(20), sal NUMBER(7, 2)); 테이블 종류 확인 SQL> SELECT * FROM tab; 테이블 구조 확인 SQL> DESC em01 Em01 테이블 생성 확인
서브 쿼리로 테이블 생성하기 emp테이블의 구조와 데이터를 em02 테이블을 생성후 복사 SQL> CREATE TABLE em02 AS SELECT * FROM emp; emp테이블의 empid, empname을 em03 테이블 생성후 복사 SQL> CREATE TABLE em03 AS SELECT empid, empname FROM emp;
데이터 구조만 복사하기 emp테이블의 구조를 em04 테이블을 생성후 복사 SQL> CREATE TABLE em04 AS SELECT * FROM emp WHERE 1=0; SQL> SELECT * FROM em04; Where 절에 만족하지 않는 조건을 부여하여 구조만 복사
테이블 구조 변경하기 SQL> CREATE TABLE em05 AS SELECT * FROM emp ; 컬럼 추가하기 em05테이블에 email 컬럼 추가 SQL> ALTER TABLE em05 ADD(email VARCHAR2(10)); 컬럼 변경하기 em05테이블의 email 컬럼 자릿수 변경 SQL> ALTER TABLE em05 MODIFY(email varchar2(40));
테이블 구조 변경하기 컬럼 삭제하기 SQL> CREATE TABLE em06 AS SELECT * FROM em05 ; em06테이블의 email컬럼 삭제 SQL> ALTER TABLE em06 DROP COLUMN email;
테이블 구조 변경하기 SET UNUSED 옵션 적용하기 SQL> ALTER TABLE em05 SET UNUSED(email); Email 컬럼을 ‘set unused’로 사용못하게 함 SQL> ALTER TABLE em05 DROP UNUSED COLUMNS; ‘set unused’로 설정한 컬럼들 일괄 삭제
테이블 제거하기 테이블의 모든 로우 제거하기 SQL> DROP TABLE em04; SQL> SELECT * FROM em04; SQL> DESC em04; Drop table : 테이블의 구조와 데이터 삭제 Error >> table or view does not exist 테이블의 모든 로우 제거하기 SQL> TRUNCATE TABLE em05; SQL> SELECT * FROM em05; SQL> DESC em05; Truncate table : 테이블의 데이터 삭제 error>> no rows selected
데이터 딕셔너리 USER_ 데이터 딕셔너리 SQL> SHOW user SQL> DESC user_tables; SQL> SELECT table_name FROM user_tables 2 ORDER BY table_name DESC;
데이터 딕셔너리 ALL_ 데이터 딕셔너리 SQL> DESC all_tables; 현재 계정이 접근가능한 객체를 조회할 수 있는 데이터 딕셔너리 뷰 SQL> DESC all_tables; SQL> SELECT owner, table_name FROM all_tables; ALL_SEQUENCES : 현재 계정이 접근 가능한 모든 시퀀스 조회 ALL_INDEXES : 현재 계정이 접근 가능한 모든 인덱스 조회 ALL_VIEWS : 현재 계정이 접근 가능한 모든 뷰 조회
데이터 딕셔너리 DBA_ 데이터 딕셔너리 SQL> conn system/soft SQL> SELECT owner, table_name FROM dba_tables where owner=‘SYSTEM’; DBA_SEQUENCES : DB 에 있는 모든 시퀀스 조회 DBA_INDEXES : DB 에 있는 모든 인덱스 조회 DBA_VIEWS : DB 에 있는 모든 뷰 조회