Oracle

05. Chapter8 Create Table(20081028)

Gungume 2009. 1. 9. 10:40

Schema Objects (8-1)

  • Schema는 User에 해당되는 기본적인 영역??
  • scott으로 로그인 -> scott.emp, scott.dept 등등~
  • scott로 로그인하면 scott. 생략 후 바로 접근가능
  • system으로 로그인하면 scott.emp로 접근해줘야함(system이 scott쪽에 권한이 있는 경우...)
  1. // system 계정으로 로그인
  2. SQL> conn system/system
    Connected.
  3.  
  4. // system에는 emp 테이블이 없으므로 에러~
    SQL> SELECT ename FROM emp;
    SELECT ename FROM emp
                      *
    ERROR at line 1:
    ORA-00942: table or view does not ex
  5.  
  6. // scott.emp 형식으로 scott의 emp 테이블에 접근하면 가능~
    SQL> SELECT ename FROM scott.emp;
  7.  
  8. ENAME
    ----------
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
  9. ENAME
    JAMES
    FORD
    MILLER
  10. 14 rows selected.

 

 

Column Data Types (P8-6)

  • CHAR(size) VS VARCHAR2(size)

CHAR는 고정길이, VARCHAR2는 가변길이

CHAR(4), VARCHAR(4)의 경우 'a' 입력 -> CHAR는 '   a'로 저장되고, VARCHAR2는 'a'로 저장됨

 

 

NOT NULL Constraint (P8-12)

  • 각 항목 ','로 구분 (가능하면 앞에 표시)
  1. SQL> CREATE TABLE s_dept (
      2  name VARCHAR2(25)
      3  ,id VARCHAR2(4)
      4  );
  2. Table created.

 

  • 테이블 삭제
  1. SQL> DROP TABLE s_dept;
  2. Table dropped.

 

  • NOT NULL조건 사용 테이블 생성
  1. SQL> CREATE TABLE s_dept(
      2  name VARCHAR2(25) NOT NULL
      3  ,id VARCHAR2(4)
      4  );
  2. Table created.

 

  • NOT NULL 조건이 걸린 필드에 데이터 삽입
  1. // NULL 삽입하면 에러~
  2. SQL> INSERT INTO s_dept VALUES(null, 10);
    INSERT INTO s_dept VALUES(null, 10)
                              *
    ERROR at line 1:
    ORA-01400: cannot insert NULL into ("SCOTT"."S_DEPT"."NAME")
  3.  
  4. // 제대로 된 데이터 삽입하면 성공~
    SQL> INSERT INTO s_dept VALUES('kim', '10');
  5. 1 row created.

 

  •  CONSTRAINT

제약조건 이름 지정함

제약조건 삭제 등 할때 사용

생략하면 기본값으로 생성되고,  생략해도 검색통해서 제약조건명 알아낸 후 삭제 가능

 

 

UNIQUE Contraint (P8-13)

  • Unique 제약조건은 중복허용을 안할뿐 NULL 값은 상관없음
  • NULL값을 허용하기 싫으면 UNIQUE 제약조건 뒤에 NOT NULL 제약조건 이어서 쓰면 됨~
  1. // userid에 UNIQUE 제약조건 (컬럼 수준에서 제약~)
  2. SQL> CREATE TABLE s_emp(
      2  userid VARCHAR2(8) CONSTRAINT s_emp_userid_uk UNIQUE
      3  ,uname VARCHAR2(50)
      4  );
  3. Table created.
  4.  
  5. // 데이터 삽입
  6. SQL> INSERT INTO s_emp
      2  VALUES
      3  ('kim', 'KimHongChul');
  7. 1 row created.
  8.  
  9. // 똑같은 데이터 삽입 -> userid인 'kim'이 중복됨 -> 오류
  10. SQL> INSERT INTO s_emp
      2  VALUES
      3  ('kim', 'KimHongChul');
    INSERT INTO s_emp
    *
    ERROR at line 1:
    ORA-00001: unique constraint (SCOTT.S_EMP_USERID_UK) violated

 

  • 테이블 수준에서 제약 -> 여러 컬럼의 조합으로 제약조건을 줄때 사용
  1. // userid에 UNIQUE 제약조건 (테이블 수준에서 제약~)
  2. SQL> CREATE TABLE s_emp(
      2  userid VARCHAR2(8)
      3  ,uname VARCHAR2(50)
      4  ,CONSTRAINT s_emp_userid_uk UNIQUE(userid)
      5  );
  3.  
  4. // userid, uname의 조합으로 UNIQUE 제약조건 (테이블 수준에서 제약~)
  5. SQL> CREATE TABLE s_emp(
      2  userid VARCHAR2(8)
      3  ,uname VARCHAR2(50)
      4  ,CONSTRAINT s_emp_userid_uk UNIQUE(userid, uname)
      5  );

 

  • 컬럼수준에서 각각 제약조건이랑 테이블수준에서 제약조건은 다름
  1.  // userid, uname 각각이 unique 해야함
  2. SQL> CREATE TABLE s_emp(
      2  userid VARCHAR2(8) CONSTRAINT s_emp_userid_uk UNIQUE
      3  ,uname VARCHAR2(50) CONSTRAINT s_emp_userid_uk UNIQUE
      4  );
  3.  
  4. // userid+uname 조합이 uniquq해야함
    SQL> CREATE TABLE s_emp(
      2  userid VARCHAR2(8)
      3  ,uname VARCHAR2(50)
      4  ,CONSTRAINT s_emp_userid_uk UNIQUE(userid, uname)
      5  );

 

 

PRIMARY KEY Constraint (P8-14)

  • Unique + Not Null 이라고 생각하면 됨
  • 한 테이블에 하나만 사용가능
  • 컬럼 조합으로 기본키 생성하고 싶으면 테이블수준에서 제약조건을 지정하면 됨

 

  • s_emp 테이블에 id, name, sal을 컬럼으로 갖는 테이블 생성(id 컬럼을 기본키로 지정)
  • 컬럼 수준의 Primary Key 제약조건
  1. SQL> CREATE TABLE s_emp(
      2  id VARCHAR2(8) PRIMARY KEY
      3  ,name VARCHAR2(50)
      4  ,sal NUMBER(5)
      5  );
  2. Table created.

 

  • s_emp 테이블에 id, name, sal을 컬럼으로 갖는 테이블 생성(id, name 컬럼을 기본키로 지정)
  • 테이블 수준의 Primary Key 제약조건(id, name 컬럼 조합을 키본키로~)
  1. SQL> CREATE TABLE s_emp (
      2  id VARCHAR2(8)
      3  ,name VARCHAR2(50)
      4  ,sal NUMBER(5)
      5  ,PRIMARY KEY(id, name)
      6  );
  2. Table created.

 

  • s_emp 테이블에 id, name, sal을 컬럼으로 갖는 테이블 생성(id, name 컬럼을 기본키로 지정)
  • 테이블 수준의 Primary Key 제약조건 + 제약조건 이름(id, name 컬럼 조합을 키본키로~)
  1. SQL> CREATE TABLE s_emp (
      2  id VARCHAR2(8)
      3  ,name VARCHAR2(50)
      4  ,sal NUMBER(5)
      5  ,CONSTRAINT s_emp_pk PRIMARY KEY(id, name)
      6  );
  2. Table created.

 

 

 

 

 

이 글은 스프링노트에서 작성되었습니다.