ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ORACLE_DDL(CREATE, ALTER, DROP)
    Oracle SQL 2022. 3. 25. 00:10

    DDL(Data Definition Language)

    : 데이터 정의어(객체 관련)

    -CREATE(객체 생성)

    -ALTER(객체 수정)

    -DROP(객체 삭제)

     

    CREATE

    <생성 구조>

    CREATE TABLE 테이블명(

    컬럼명 데이터타입(데이터 크기),

    컬럼명 데이터타입(데이터 크기),

    컬럼명 데이터타입(데이터 크기)

    );

    <데이터 타입>

    1) 문자

    -CHAR(크기[바이트/문자]) : 고정 문자열 자료형 (최대 2000byte)

     ex.CHAR(10) 1바이트 -->한글 3글자

        CHAR(10char)-->한글 10글자

    -VARCHAR2(크기[바이트/문자]) : 가변 문자열 자료형 (최대 4000byte)

     ex.CHAR(10char) --> 안녕하세요_ _ _ _ _

         VARCHAR2(10char) --> 안녕하세요

    -NVARCHAR2 : 문자 개수 자체를 길이로 계산하는 자료형

     -->유니코드에 적합하다.

    고정되어있는 (크기)는 변하지않고 크기가 넘어가게되면 에러남!!

    대부분 바이트 자체로 많이 사용한다.

     

    2) 숫자

    : NUMBER[(P, S)]

    NUMBER : 최대 40자리

    NUMBER(크기) : 길이 지정 가능

    P : 최대 자리수

    S : 소수점 자리수

    ex. NUMBER(4, 3) --> 최대 네 자리수, 소수점 세 자리 허용.

     

    3) 날짜

    : DATE, TIMESTAMP

     

    <컬럼에 주석달기>

    COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';

    COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원 아이디';
    COMMENT ON COLUMN MEMBER.MEMBER_PWD IS '회원 비밀번호';
    COMMENT ON COLUMN MEMBER.MEMBER_NAME IS '회원 이름';
    
    SELECT * FROM USER_TABLES;--사용자가 작성한 테이블을 확인하는 뷰
    SELECT *
    FROM USER_TAB_COLUMNS
    WHERE TABLE_NAME = 'MEMBER';
    
    DESC MEMBER;

     

    <제약조건>(CONSTRAINTS)

    : 테이블 작성 시 각 컬럼마다 값 기록에 대한 제약 조건 설정 가능

     데이터 무결성 보장 목적 (데이터 무결성 : 데이터의 정확성, 일관성, 유효성 유지)

     입력 데이터에 문제가 없는지 검사하는 목적

    DESC USER_CONSTRAINTS;
    SELECT * FROM USER_CONSTRAINTS;
    
    CREATE TABLE USER_NOCONST(
        USER_NO NUMBER,
        USER_ID VARCHAR2(20),
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50)
    );
    
    INSERT INTO USER_NOCONST VALUES(1, 'user01', 'pass01', '김나라', '여', '010-1111-2222', 'kim@k.k');
    INSERT INTO USER_NOCONST VALUES(NULL, NULL, NULL, NULL, NULL, NULL, NULL);
    --값 대입, NULL 대입도 가능

    <제약조건 종류>

    1) NOT NULL

    : 데이터에 NULL 허용X

    2) UNIQUE

    : 중복된 값 허용X

    3) PRIMARY KEY

    : NOT NULL + UNIQUE (NULL X, 중복X) --> 고유 식별자

    4) FOREIGN KEY

    : 외부 테이블에서 참조해 온 컬럼 값이 존재하면 허용

    5) CHECK

    : 데이터 값의 범위나 조건을 지정해 설정한 값만 허용 

     

    1) NOT NULL

    반드시 들어가야하는 값에 NOT NULL로 컬럼 레벨에서 제한 (컬럼 옆에 제약조건 설정)

    CREATE TABLE USER_NOTNULL(
        USER_NO NUMBER NOT NULL,
        USER_ID VARCHAR2(20) NOT NULL,
        USER_PWD VARCHAR2(30) NOT NULL,
        USER_NAME VARCHAR2(30) NOT NULL,
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50)
    );
    
    INSERT INTO USER_NOTNULL VALUES(1, 'user01', 'pass01', '김나라', '여', '010-1111-2222', 'kim@k.k');
    INSERT INTO USER_NOTNULL VALUES(NULL, NULL, NULL, NULL, NULL, NULL, NULL);--NOT NULL때문에 NULL값 불가능
    INSERT INTO USER_NOTNULL VALUES(2, 'user02', 'pass02', '김라나', NULL, NULL, NULL);

    2) UNIQUE

    입력 값이 중복되지 않도록 컬럼 레벨과 테이블 레벨에 설정 가능 (중복X 설정)

    2)-1 컬럼레벨

    CREATE TABLE USER_UNIQUE(
    	USER_NO NUMBER,
        USER_ID VARCHAR2(20) UNIQUE,--컬럼 레벨에서 제약조건 설정 가능
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50)
    );
    
    INSERT INTO USER_UNIQUE
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    INSERT INTO USER_UNIQUE
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');--'user01' 불가능(중복X)
    INSERT INTO USER_UNIQUE
    VALUES(1, 'user02', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    --UNIQUE인 USER_ID만 중복불가능하고 다른 정보들은 중복가능.

    2)-2 테이블 레벨

    CREATE TABLE USER_UNIQUE2(
        USER_NO NUMBER,
        USER_ID VARCHAR2(20),
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        UNIQUE(USER_ID)--테이블 레벨
    );

     

    CREATE TABLE USESR_UNIQUE3(
        USER_NO NUMBER,
        USER_ID VARCHAR2(20),
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        UNIQUE(USER_NO, USER_ID)--묶어서 사용가능, 둘다 중복 불가능
    );
    
    INSERT INTO USER_UNIQUE3
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    INSERT INTO USER_UNIQUE3
    VALUES(2, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');--USER_ID 중복되서 불가능
    INSERT INTO USER_UNIQUE3
    VALUES(1, 'user02', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');--USER_NO 중복되서 불가능
    INSERT INTO USER_UNIQUE3
    VALUES(2, 'user02', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');--USER_NO, USER_ID에 중복없기 때문에가능
    INSERT INTO USER_UNIQUE3
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');--USER_ID, USER_NO 둘다 중복되서 불가능

    <제약조건 이름 설정>

    CONSTRAINT 설정할 이름명 UNIQUE(적용할 변수명)

    CREATE TABLE CONS_NAME(
        TEST_DATA1 VARCHAR2(20) CONSTRAINT CN_TD1_NN NOT NULL,--CN_TD1_NN 테이블명, 컬럼명, NOT NULL
        TEST_DATA2 VARCHAR2(20) CONSTRAINT CN_TD2_UQ UNIQE,
        TEST_DATA3 VARCHAR2(20),
        CONSTRAINT CN_TD3_UK UNIQUE(TEST_DATA3)
    );
    
    INSERT INTO CONS_NAME VALUES('Z', 'A', 'B');

    3) PRIMARY KEY

    NOT NULL + UNIQUE --> 고유 식별자

    -한 테이블 당 한 개만 설정 가능 (고유 -> 유일하기 때문에)

    CREATE TABLE USER_PRIMARYKEY(
        USER_NO NUMBER CONSTRAINT UP_UNO_PK PRIMARY KEY,
        USER_ID VARCHAR2(20),
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50)
    );
    
    INSERT INTO USER_PRIMARYKEY
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    
    INSERT INTO USER_PRIMARYKEY
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    --중복일 때 --> 무결성 제약 조건에 위배(마치 유니크에서 오류난 것처럼 뜸)
    CREATE TABLE USER_PRIMARYKEY2(
        USER_NO NUMBER,
        USER_ID VARCHAR2(20),
        USER_PWD VARCHAR2(30),
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        CONSTRAINT UP2_UNO_UI_PK PRIMARY KEY(USER_NO, USER_ID)
    );
    
    INSERT INTO USER_PRIMARYKEY2
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    
    INSERT INTO USER_PRIMARYKEY2
    VALUES(1, 'user02', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    --USER_NO 중복되서 불가능
    INSERT INTO USER_PRIMARYKEY2
    VALUES(2, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k');
    --USER_NO와 USER_ID가 중복되지 않아서 가능함.

    4) FOREIGN KEY

    : 외부 테이블에서 참조해 온 컬럼 값이 존재하면 허용

    CREATE TABLE USER_GRADE(--부모테이블
        GRADE_CODE NUMBER PRIMARY KEY,
        GRADE_NAME VARCHAR2(30) NOT NULL
    );
    INSERT INTO USER_GRADE VALUES(10, '일반회원');
    INSERT INTO USER_GRADE VALUES(20, '우수회원');
    INSERT INTO USER_GRADE VALUES(30, '특별회원');
    
    CREATE TABLE USER_FOREIGNKEY(--자식테이블(부모테이블 참조)
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(20) UNIQUE,
        USER_PWD VARCHAR2(30) NOT NULL,
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        GRADE_CODE NUMBER,
        CONSTRAINT UF_GC_FK FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE(GRADE_CODE)
    );
    
    INSERT INTO USER_FOREIGNKEY
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k', 10);
    
    INSERT INTO USER_FOREIGNKEY
    VALUES(2, 'user02', 'pass02', '남나눔', '남', '010-2222-3333', 'nam@n.n', 10);
    
    INSERT INTO USER_FOREIGNKEY
    VALUES(3, 'user03', 'pass03', '도대담', '남', '010-3333-4444', 'do@d.d', 30);
    
    INSERT INTO USER_FOREIGNKEY
    VALUES(4, 'user04', 'pass04', '류라라', '여', '010-2222-1111', 'ryu@r.r', NULL);
    --참조하는 테이블(=부모테이블)의 참조 컬럼 값 외에 NULL 값도 가능
    
    INSERT INTO USER_FOREIGNKEY
    VALUES(5, 'user05', 'pass05', '문미미', '여', '010-1111-0000', 'moon@m.m', 50);
    --ORA-02291: 무결성 제약조건(KH.UF_GC_FK)이 위배되었습니다- 부모 키가 없습니다
    --부모테이블의 USER_GRADE에 50이 없는데 50을 참조

    <삭제 옵션>

    1) DELETE

    DELETE FROM USER_GRADE
    WHERE GRADE_CODE = 10;
    --ORA-02292: 무결성 제약조건(KH.UF_GC_FK)이 위배되었습니다- 자식 레코드가 발견되었습니다
    --참조되어 사용되어서 삭제 불가능이라고 오류 뜸.
    
    DELETE FROM USER_GRADE
    WHERE GRADE_CODE = 20;
    --참조되고있지않아서 삭제 가능.

    2) ON DELETE SET NULL

    CREATE TABLE USER_GRADE2(--부모테이블
        GRADE_CODE NUMBER PRIMARY KEY,
        GRADE_NAME VARCHAR2(30) NOT NULL
    );
    INSERT INTO USER_GRADE2 VALUES(10, '일반회원');
    INSERT INTO USER_GRADE2 VALUES(20, '우수회원');
    INSERT INTO USER_GRADE2 VALUES(30, '특별회원');
    
    CREATE TABLE USER_FOREIGNKEY2(--자식테이블(부모테이블 참조)
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(20) UNIQUE,
        USER_PWD VARCHAR2(30) NOT NULL,
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        GRADE_CODE NUMBER,
        CONSTRAINT UF2_GC_FK FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE2(GRADE_CODE) ON DELETE SET NULL
        --ON DELETE SET NULL : 삭제 옵션
    );
    
    INSERT INTO USER_FOREIGNKEY2
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k', 10);
    
    INSERT INTO USER_FOREIGNKEY2
    VALUES(2, 'user02', 'pass02', '남나눔', '남', '010-2222-3333', 'nam@n.n', 10);
    
    INSERT INTO USER_FOREIGNKEY2
    VALUES(3, 'user03', 'pass03', '도대담', '남', '010-3333-4444', 'do@d.d', 30);
    
    INSERT INTO USER_FOREIGNKEY2
    VALUES(4, 'user04', 'pass04', '류라라', '여', '010-2222-1111', 'ryu@r.r', NULL);
    --참조하는 테이블(=부모테이블)의 참조 컬럼 값 외에 NULL 값도 가능

     

    3) ON DELETE CASCADE

    : 부모 키 삭제 시 자식 키도 함께 삭제

    CREATE TABLE USER_GRADE3(--부모테이블
        GRADE_CODE NUMBER PRIMARY KEY,
        GRADE_NAME VARCHAR2(30) NOT NULL
    );
    INSERT INTO USER_GRADE3 VALUES(10, '일반회원');
    INSERT INTO USER_GRADE3 VALUES(20, '우수회원');
    INSERT INTO USER_GRADE3 VALUES(30, '특별회원');
    
    CREATE TABLE USER_FOREIGNKEY3(--자식테이블(부모테이블 참조)
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(20) UNIQUE,
        USER_PWD VARCHAR2(30) NOT NULL,
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        GRADE_CODE NUMBER,
        CONSTRAINT UF3_GC_FK FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE3(GRADE_CODE) ON DELETE CASCADE
        --ON DELETE CASCADE : 부모 키 삭제 시 자식 키도 함께 삭제
    );
    
    INSERT INTO USER_FOREIGNKEY3
    VALUES(1, 'user01', 'pass01', '김나리', '여', '010-1111-2222', 'kim@k.k', 10);
    
    INSERT INTO USER_FOREIGNKEY3
    VALUES(2, 'user02', 'pass02', '남나눔', '남', '010-2222-3333', 'nam@n.n', 10);
    
    INSERT INTO USER_FOREIGNKEY3
    VALUES(3, 'user03', 'pass03', '도대담', '남', '010-3333-4444', 'do@d.d', 30);
    
    INSERT INTO USER_FOREIGNKEY3
    VALUES(4, 'user04', 'pass04', '류라라', '여', '010-2222-1111', 'ryu@r.r', NULL);
    --참조하는 테이블(=부모테이블)의 참조 컬럼 값 외에 NULL 값도 가능

    5) CHECK

    데이터 값의 범위나 조건을 지정해 설정한 값만 허용 

    CREATE TABLE USER_CHECK(
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(20) UNIQUE,
        USER_PWD VARCHAR2(30) NOT NULL,
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10) CHECK(GENDER IN('남', '여')),
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50)
    );
    
    INSERT INTO USER_CHECK
    VALUES(1, 'user01', 'pass01', '강건강', '남', '010-1111-2222', 'kang@k.k');
    
    INSERT INTO USER_CHECK
    VALUES(2, 'user02', 'pass02', '남나눔', '남자', '010-1111-2222', 'kang@k.k');
    
    CREATE TABLE USER_CHECK2(
        TEST_NUMBER NUMBER,
        CONSTRAINT UC2_TN_CK CHECK(TEST_NUMBER > 0)
    );
    INSERT INTO USER_CHECK2 VALUES(10);
    INSERT INTO USER_CHECK2 VALUES(-1);

    <CREATE 작성 예시>

    CREATE TABLE USER_TEST(
        USER_NO NUMBER CONSTRAINT PK_UT_USERNO PRIMARY KEY,
        USER_ID VARCHAR2(20) CONSTRAINT UQ_UT_USERID UNIQUE,
        USER_PWD VARCHAR2(20) CONSTRAINT NN_UT_USERPWD NOT NULL,
        PNO VARCHAR2(20) CONSTRAINT NN_UT_PNO NOT NULL,
        GENDER VARCHAR2(3) CONSTRAINT CK_UT_GENDER CHECK(GENDER IN('남', '여')),
        PHONE VARCHAR2(20),
        ADDRESS VARCHAR2(100),
        STATUS VARCHAR2(3) CONSTRAINT NN_UT_STATUS NOT NULL,
        CONSTRAINT UQ_UT_PNO UNIQUE(PNO),
        CONSTRAINT CK_UT_STATUS CHECK(STATUS IN('Y', 'N'))
    );
    
    COMMENT ON COLUMN USER_TEST.USER_NO IS '회원번호';
    COMMENT ON COLUMN USER_TEST.USER_ID IS '회원아이디';
    COMMENT ON COLUMN USER_TEST.USER_PWD IS '회원 비밀번호';
    COMMENT ON COLUMN USER_TEST.PNO IS '주민등록번호';
    COMMENT ON COLUMN USER_TEST.GENDER IS '성별';
    COMMENT ON COLUMN USER_TEST.PHONE IS '전화번호';
    COMMENT ON COLUMN USER_TEST.ADDRESS IS '주소';
    COMMENT ON COLUMN USER_TEST.STATUS IS '탈퇴여부';
    INSERT INTO USER_TEST
    VALUES(1, 'user01', 'pass01', '010101-1800000', '남', '010-1111-2222', '서울', 'N');
    INSERT INTO USER_TEST
    VALUES(2, 'user02', 'pass02', '121201-1500000', '남', '010-2222-3333', '강원', 'N');
    INSERT INTO USER_TEST
    VALUES(3, 'user03', 'pass03', '110101-1200000', '남', '010-3333-4444', '광주', 'N');
    INSERT INTO USER_TEST
    VALUES(4, 'user04', 'pass04', '100101-2200000', '여', '010-4444-5555', '부산', 'N');
    INSERT INTO USER_TEST
    VALUES(5, 'user05', 'pass05', '890101-2200000', '여', '010-5555-6666', '제주', 'N');

    <SUBQUERT를 이용한 테이블 생성>

    CREATE TABLE EMPLOYEE_COPY
    AS SELECT * FROM EMPLOYEE;
    
    SELECT * FROM EMPLOYEE_COPY;
    
    CREATE TABLE EMPLOYEE_COPY2
    AS SELECT EMP_ID, EMP_NAME, SALARY, DEPT_TITLE, JOB_NAME
        FROM EMPLOYEE
            LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
            JOIN JOB USING(JOB_CODE);
    
    SELECT * FROM EMPLOYEE_COPY2;

    <제약조건 추가>

    ALTER TABLE 테이블명 ADD 제약조건;

    CREATE TABLE USER_GRADE4(
        GRADE_CODE NUMBER,
        GRADE_NAME VARCHAR2(30)
    );
    ALTER TABLE USER_GRADE4 ADD /*CONSTRAINT UG4_GC_PK*/ PRIMARY KEY(GRADE_CODE);
    
    CREATE TABLE USER_PRIMARYKEY4(
        USER_NO NUMBER PRIMARY KEY,
        USER_ID VARCHAR2(20),--UNIQUE
        USER_PWD VARCHAR2(30),--NOT NULL
        USER_NAME VARCHAR2(30),
        GENDER VARCHAR2(10),--CHECK
        PHONE VARCHAR2(30),
        EMAIL VARCHAR2(50),
        GRADE_CODE NUMBER--FOREIGN KEY
    );
    ALTER TABLE USER_FOREIGNKEY4 ADD UNIQUE(USER_ID);
    ALTER TABLE USER_FOREIGNKEY4 MODIFY USER_PWD NOT NULL;
    ALTER TABLE USER_FOREUGNKEY4 ADD CHECK(GENDER IN('남', '여'));
    ALTER TABLE USER_FOREUGNKEY4 ADD FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE4(GRADE_CODE);
    --생략가능 참조하는 테이블에 프라이머리 가져와서 참조하면 생략가능!!!
    ALTER TABLE USER_FOREUGNKEY4 ADD FOREIGN KEY(GRADE_CODE) REFERENCES USER_GRADE4;

     

    미니실습

    : DEPARTMENT테이블의 LOCATION_ID에 외래키 제약조건 추가
      (참조 테이블은 LOCATION, 참조 컬럼은 LOCATION은 기본키)

    ALTER TABLE DEPARTMENT ADD FOREIGN KEY(LOCATION_ID) REFERENCES LOCATION;

     

    ALTER

    객체 수정

    -컬럼 추가/삭제, 제약조건 추가/삭제, 컬럼 자료형 변경, DEFAULT값 변경

    -테이블 명/ 컬럼 명/ 제약조건 명 변경

    -컬럼 추가, 삭제, 수정

     

    <컬럼 추가>

    ALTER TABLE 추가할 테이블명

    ADD(생성할 컬럼명 데이터타입(크기));

    ALTER TABLE DEPT_COPY
    ADD (ANAME VARCHAR2(20));

    DEFAULT값 변경

    ALTER TABLE DEPT_COPY
    ADD (ANAME VARCHAR2(40) DEFAULT '한국');

    <컬럼수정>

    MODIFY 사용

    ALTER TABLE DEPT_COPY
    MODIFY DEPT_ID CHAR(3)
    MODIFY DEPT_TITLE VARCHAR2(30)
    MODIFY LOCATION_ID VARCHAR2(20)
    MODIFY ANAME CHAR(25)
    MODIFY BNAME DEFAULT '미국';
    
    INSERT INTO DEPT_COPY
    VALUES('010', '생산부', 'L2', NULL, DEFAULT);
    
    SELECT * FROM DEPT_COPY;
    
    ALTER TABLE DEPT_COPY
    MODIFY DEPT_TITLE VARCHAR2(10);
    --**오류**일부 값이 너무 커서 열 길이를 줄일 수 없음

    <컬럼 삭제>

    DROP

    -DROP이 실행되면 COMMIT이 자동으로 됨.-->이후에 ROLLBACK 실행이 안됨.--> 이미 커밋이 된 이후이기 때문이다. 

    -테이블에 모든 열들을 삭제할 수 없다.--> 한개는 남아 있어야함.

    ALTER TABLE DEPT_COPY2
    DROP COLUMN DEPT_ID;
    
    ROLLBACK;--ROLLBACK 불가능!

    <CASCADE CONSTRAINTS>

    제약조건과 함께 삭제

    ALTER TABLE TB1
    DROP COLUMN PK1 CASCADE CONSTRAINTS;
    
    SELECT * FROM TB1;

    <제약조건 추가 예시>

    ALTER TABLE DEPT_COPY
    ADD CONSTRAINT DCOPY_DID_PK PRIMARY KEY(DEPT_ID)
    ADD CONSTRAINT DCOPY_DTITLE_UQ UNIQUE(DEPT_TITLE)
    MODIFY LNAME CONSTRAINT DCOPY_LNAME_NN NOT NULL;

    DEPT_COPY의 DEPT_ID컬럼에 PRIMARY KEY(DCOPY_DID_PK),
    DEPT_TITLE컬럼에 UNIQUE(DCOPY_DTITLE_UQ),
    LNAME컬럼에 NOT NULL(DCOPY_LNAME_NN)추가

     

    <제약조건 삭제>

    ALTER TABLE DEPT_COPY
    DROP CONSTRAINT DCOPY_DID_PK;
    
    ALTER TABLE DEPT_COPY
    DROP CONSTRAINT DCOPY_DTITLE_UQ
    DROP CONSTRAINT SYS_C007611
    MODIFY ANAME NULL;

    <컬럼명 변경>

    ALTER TABLE DEPT_COPY
    RENAME COLUMN DEPT_TITLE TO DEPT_NAME;

    <제약조건 이름 변경>

    ALTER TABLE DEPT_COPY
    RENAME CONSTRAINT SYS_C007612 TO DCOPY_LID_NN;

    <테이블 명 변경>

    ALTER TABLE DEPT_COPY
    RENAME TO DEPT_TEST;

    <테이블 삭제>

    DROP TABLE DEPT_TEST
    CASCADE CONSTRAINTS;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    'Oracle SQL' 카테고리의 다른 글

    오라클_DDL_예제_문제풀이  (0) 2022.03.25
    ORACLE_DML  (0) 2022.03.25
    오라클_시험대비_기본개념정리[1]  (0) 2022.03.24
    오라클_VIEW_예제_문제풀이[1]  (0) 2022.03.23
    오라클_예제_문제풀이[2]  (0) 2022.03.21
Designed by Tistory.