본문 바로가기
카테고리 없음

ORACLE 13

by Real Iron 2007. 4. 11.

테이블 관리

SQL> CREATE TABLE SONGBOOK
  2  (
  3     NO NUMBER(6),
  4     TITLE VARCHAR2(20),
  5     SINGER VARCHAR2(20),
  6     GASA VARCHAR(20),
  7     SNO NUMBER(3)
  8  );

테이블이 생성되었습니다.

SQL> CREATE TABLE SONGTYPE
  2  (
  3     SNO NUMBER(3),
  4     GENRE VARCHAR2(10)
  5  );

테이블이 생성되었습니다.


QL> COLUMN NO FORMAT A5  -- 출력되는 사이즈 조절
COLUMN 컬럼명 FORMAT 사이즈





제약 조건

기본키(PRIMARY KEY)  - 중복 안됨, null허용 안함 - 단 하나만
unique                        - 중복 안됨, null 허용  -여러게 존제
CHECK                       -
NOT NULL
FOREIGN KEY


2 가지 방법
제약 조건의 이름을 넣는 방법 과 넣지 않는 방법

문법)


SQL> CREATE TABLE SONGBOOK2
  2  (
  3     NO NUMBER(6) primary key,
  4     TITLE VARCHAR2(20) not null,
  5     SINGER VARCHAR2(20) check(singer in('보아','남진','강진','뽀미언니')),
  6     GASA VARCHAR(50) unique,
  7     SNO NUMBER(3) default 10  
  8  );

CREATE TABLE 테이블명
(
     컬럼명 데이터타입 CONSTRAINT 테이블명_컬럼명_타입 제약조건
....
);

create table songbook3
(
   NO NUMBER(6) CONSTRAINT SONGBOOK3_NO_PK primary key,
   TITLE VARCHAR2(20) CONSTRAINT SONGBOOK3_TITLE_NN not null,
   SINGER VARCHAR2(20) CONSTRAINT SONGBOOK3_SINGER_CK check(singer in('보아','남진','강진','뽀미언니')),
   GASA VARCHAR2(50) CONSTRAINT SONGBOOK3_GASA_UK unique,
   SNO NUMBER(3) default 10
)
/





제약조건 조회


select constraint_name, constraint_type, table_name
from user_constraints
where table_name='';

SQL> select constraint_name, constraint_type, table_name
  2  from user_constraints
  3  where table_name='SONGBOOK2';

CONSTRAINT_NAME                C TABLE_NAME
------------------------------ - ------------------------------
SYS_C003006                    C SONGBOOK2
SYS_C003007                    C SONGBOOK2                 // c = not null의 속성도 동일하게 출력
SYS_C003008                    P SONGBOOK2
SYS_C003009                    U SONGBOOK2

예제)
create table songbook3
(
   NO NUMBER(6) CONSTRAINT SONGBOOK3_NO_PK primary key,
   TITLE VARCHAR2(20) CONSTRAINT SONGBOOK3_TITLE_NN not null,
   SINGER VARCHAR2(20) CONSTRAINT SONGBOOK3_SINGER_CK check(singe
   GASA VARCHAR(20) CONSTRAINT SONGBOOK3_GASA)UK unique,
   SNO NUMBER(3) default 10
)

  1  select constraint_name, constraint_type, table_name
  2  from user_constraints
  3* where table_name='SONGBOOK3'
SQL> /

CONSTRAINT_NAME                C TABLE_NAME
------------------------------ - ------------------------------
SONGBOOK3_TITLE_NN             C SONGBOOK3
SONGBOOK3_SINGER_CK            C SONGBOOK3
SONGBOOK3_NO_PK                P SONGBOOK3
SONGBOOK3_GASA_UK              U SONGBOOK3



1600 남행열차,김수희,비내리는,2 으로 추가하라

SQL> INSERT INTO SONGBOOK3
  2  VALUES(1600,'남행열차','김수희','비내리는3',20);
INSERT INTO SONGBOOK3



  1  INSERT INTO SONGBOOK3
  2* VALUES(1600,'남행열차','남진','비내리는',20)
SQL> /

1 개의 행이 만들어졌습니다.


SQL> INSERT INTO SONGBOOK3
  2  VALUES(1602,'밤행열차','강진','비내리는호남선',NULL);

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM SONGBOOK3
  2  ;

        NO TITLE SINGER               GASA                        SNO
---------- ----- -------------------- -------------------- ----------
########## 남행  남진                 비내리는                     20
           열차

########## 밤행  강진                 비내리는호남선
           열차


SQL>
SQL> INSERT INTO SONGBOOK3(NO, TITLE, SINGER, GASA)
  2  VALUES(1603,'완행열차','남진','비내리는오후');

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM SONGBOOK3;

        NO TITLE SINGER               GASA                        SNO
---------- ----- -------------------- -------------------- ----------
########## 남행  남진                 비내리는                     20
           열차

########## 밤행  강진                 비내리는호남선
           열차

########## 완행  남진                 비내리는오후                 10
           열차


예제)

SQL> INSERT INTO SONGBOOK3
  2  VALUES(1604,NULL,'뽀미언니','이슬비내리는',10);
INSERT INTO SONGBOOK3
*
1행에 오류:
ORA-01400: NULL을 ("RAIN"."SONGBOOK3"."TITLE") 안에 삽입할 수 없습니다


SQL>



primary key

SQL> insert into songbook3
  2  values(null,'아침열차','보아','꽃뿌리는',30);
insert into songbook3
*
1행에 오류:
ORA-01400: NULL을 ("RAIN"."SONGBOOK3"."NO") 안에 삽입할 수 없습니다


SQL> insert into songbook3
  2  values(1603,'아침열차','보아','꽃뿌리는',30);
insert into songbook3
*
1행에 오류:
ORA-00001: 무결성 제약 조건(RAIN.SONGBOOK3_NO_PK)에 위배됩니다


unique

  1  INSERT INTO SONGBOOK3
  2* VALUES(1604,'아침열차','보아','비내리는',30)
SQL> /
INSERT INTO SONGBOOK3
*
1행에 오류:ORA-00001: 무결성 제약 조건(RAIN.SONGBOOK3_GASA_UK)에 위배됩니다


  1  INSERT INTO SONGBOOK3
  2* VALUES(1605,'아침열차','보아',null,30)
SQL> /

1 개의 행이 만들어졌습니다.

SQL> select * from songbook3;

        NO TITLE                SINGER
---------- -------------------- --------------------
GASA                                                      SNO
-------------------------------------------------- ----------
      1600 남행열차             남진
비내리는                                                   20

      1602 밤행열차             강진
비내리는호남선

      1603 완행열차             남진
비내리는오후                                               10

      1605 아침열차             보아
                                                           30



 숙제)


1  create table member2
  2  (
  3     no number(3) primary key,
  4     name varchar2(10) not null,
  5     id varchar2(10) unique,
  6     pwd varchar2(10) default 123,
  7     addr varchar2(10) check(addr in('안산','서울','인천','수원'))
  8* )
SQL> /

테이블이 생성되었습니다.




SONGTYPE 테이블의 제약조건 조회

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name='SONGTYPE';

선택된 레코드가 없습니다.


DDL - 변경을 가하거나 삭제하는 명령어의 모임
ALTER (TABLE 테이블명)

ADD       : 추가
MODIFY  : 수정(테이블 컬럼의 데이타타입, 크기 변경-컬럼과 관련된것)수정, 제약조건 수정 불가
               단 테이터가 입력이 되었다면 크기축소시 주의,
DROP     : 삭제
* 컬럼은 추가/수정/삭제 가능
   제약조건은 추가와 삭제만 가능.
* 테이블 설계가 잘못된것이다. 설계의 중요성.

테이블에 [제약]컬럼 추가

ALTER TABLE 테이블명
ADD  (컬럼명 데이터타입 [CONSTRAINT 제약조건명 제약조건] )   ()생략가능

--SONGTYPE 테이블의 SNO 컬럼에 PK제약 조건 추가

SQL> ALTER TABLE SONGTYPE
  2  ADD CONSTRAINT SONGTYPE_SNO_PK PRIMARY KEY(SNO);

테이블이 변경되었습니다.



BIGO 컬럼 추가


SQL> ALTER TABLE SONGTYPE
  2  ADD (BIGO VARCHAR2(10));

테이블이 변경되었습니다.


-BIGO 컬럼의 데이터타입을 CHAR(20)변경

SQL> ALTER TABLE SONGTYPE
  2  MODIFY BIGO CHAR(20);

테이블이 변경되었습니다.

  1  ALTER TABLE SONGTYPE
  2* MODIFY (BIGO NUMBER(5))
SQL> /

테이블이 변경되었습니다.



문제) SONGTYPE 테이블에 10 , 댄스 , 11111 입력

SQL> INSERT INTO SONGTYPE
  2  VALUES(10,'댄스',11111);

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM SONGTYPE;

       SNO GENRE            BIGO
---------- ---------- ----------
        10 댄스            11111


문제2)  bigo 컬럼의 데이터다입을 number(3) 으로 변경

SQL> alter table songtype
  2  modify (bigo number(3));
modify (bigo number(3))
        *
2행에 오류:
ORA-01440: 정도 또는 자리수를 축소할 열은 비어 있어야 합니다

SQL> alter table songtype
  2  modify (bigo varchar2(10));
modify (bigo varchar2(10))
        *
2행에 오류:
ORA-01439: 데이터 유형을 변경할 열은 비어 있어야 합니다

* 데이터타입의 값이 있다면 변경은 불가능하다.
*

SQL> alter table songtype
  2  modify (bigo varchar2(10));

테이블이 변경되었습니다.



문제) bigo 컬럼 삭제

   alter table songtype
   drop column bigo;


테이블이 변경되었습니다.

primary key  제약조건 제거


alter table songtype
drop primary key cascade

SQL> alter table songtype
  2  drop primary key cascade
  3  ;

테이블이 변경되었습니다.

SQL> desc songtype
 이름                                      널?      유형
 ----------------------------------------- -------- ------------------------
 SNO                                                NUMBER(3)
 GENRE                                              VARCHAR2(10)

SQL> select constraint_name, constraint_type
  2  from user_constraints
  3  where table_name='SONGTYPE';

선택된 레코드가 없습니다.