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쪽에 권한이 있는 경우...)
- // system 계정으로 로그인
- SQL> conn system/system
Connected. - // system에는 emp 테이블이 없으므로 에러~
SQL> SELECT ename FROM emp;
SELECT ename FROM emp
*
ERROR at line 1:
ORA-00942: table or view does not ex - // scott.emp 형식으로 scott의 emp 테이블에 접근하면 가능~
SQL> SELECT ename FROM scott.emp; - ENAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS - ENAME
JAMES
FORD
MILLER - 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)
- 각 항목 ','로 구분 (가능하면 앞에 표시)
- SQL> CREATE TABLE s_dept (
2 name VARCHAR2(25)
3 ,id VARCHAR2(4)
4 ); - Table created.
- 테이블 삭제
- SQL> DROP TABLE s_dept;
- Table dropped.
- NOT NULL조건 사용 테이블 생성
- SQL> CREATE TABLE s_dept(
2 name VARCHAR2(25) NOT NULL
3 ,id VARCHAR2(4)
4 ); - Table created.
- NOT NULL 조건이 걸린 필드에 데이터 삽입
- // NULL 삽입하면 에러~
- 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") - // 제대로 된 데이터 삽입하면 성공~
SQL> INSERT INTO s_dept VALUES('kim', '10'); - 1 row created.
- CONSTRAINT
제약조건 이름 지정함
제약조건 삭제 등 할때 사용
생략하면 기본값으로 생성되고, 생략해도 검색통해서 제약조건명 알아낸 후 삭제 가능
UNIQUE Contraint (P8-13)
- Unique 제약조건은 중복허용을 안할뿐 NULL 값은 상관없음
- NULL값을 허용하기 싫으면 UNIQUE 제약조건 뒤에 NOT NULL 제약조건 이어서 쓰면 됨~
- // userid에 UNIQUE 제약조건 (컬럼 수준에서 제약~)
- SQL> CREATE TABLE s_emp(
2 userid VARCHAR2(8) CONSTRAINT s_emp_userid_uk UNIQUE
3 ,uname VARCHAR2(50)
4 ); - Table created.
- // 데이터 삽입
- SQL> INSERT INTO s_emp
2 VALUES
3 ('kim', 'KimHongChul'); - 1 row created.
- // 똑같은 데이터 삽입 -> userid인 'kim'이 중복됨 -> 오류
- 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
- 테이블 수준에서 제약 -> 여러 컬럼의 조합으로 제약조건을 줄때 사용
- // userid에 UNIQUE 제약조건 (테이블 수준에서 제약~)
- SQL> CREATE TABLE s_emp(
2 userid VARCHAR2(8)
3 ,uname VARCHAR2(50)
4 ,CONSTRAINT s_emp_userid_uk UNIQUE(userid)
5 ); - // userid, uname의 조합으로 UNIQUE 제약조건 (테이블 수준에서 제약~)
- SQL> CREATE TABLE s_emp(
2 userid VARCHAR2(8)
3 ,uname VARCHAR2(50)
4 ,CONSTRAINT s_emp_userid_uk UNIQUE(userid, uname)
5 );
- 컬럼수준에서 각각 제약조건이랑 테이블수준에서 제약조건은 다름
- // userid, uname 각각이 unique 해야함
- 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 ); - // 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 제약조건
- SQL> CREATE TABLE s_emp(
2 id VARCHAR2(8) PRIMARY KEY
3 ,name VARCHAR2(50)
4 ,sal NUMBER(5)
5 ); - Table created.
- s_emp 테이블에 id, name, sal을 컬럼으로 갖는 테이블 생성(id, name 컬럼을 기본키로 지정)
- 테이블 수준의 Primary Key 제약조건(id, name 컬럼 조합을 키본키로~)
- SQL> CREATE TABLE s_emp (
2 id VARCHAR2(8)
3 ,name VARCHAR2(50)
4 ,sal NUMBER(5)
5 ,PRIMARY KEY(id, name)
6 ); - Table created.
- s_emp 테이블에 id, name, sal을 컬럼으로 갖는 테이블 생성(id, name 컬럼을 기본키로 지정)
- 테이블 수준의 Primary Key 제약조건 + 제약조건 이름(id, name 컬럼 조합을 키본키로~)
- 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 ); - Table created.
이 글은 스프링노트에서 작성되었습니다.