ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL CREATE와 ALTER 그리고 제약 조건
    back-end&DB/SQL(Oracle) 2023. 5. 10. 12:21
    728x90

    1. DDL

     

    - DDL : data definition language 데이터 정의어
    - CREATE : 새로운 객체를 생성할 때 사용하는 명령어
    - CREATE TABLE, USER, VIEW, SEQUENCE,TABLE

     

    - 기존의 EMPLOYEES 테이블을 한글 버전으로 생성
    - 테이블 정보 조회 : 테이블명 작성 -> 드래그 쉬프트 F4

    - 실행화면

     

     

    CREATE TABLE 테이블 생성

    CREATE USER 계정 생성

    CREATE SEQUENCE 시퀀스 생성

    CREATE VIEW 뷰 생성

     

    1.1 테이블 생성

    CREATE TABLE 테이블명(
    컬럼명 자료형(크기) [기본값] [NULL여부],
    -- []는 선택 사항 기본값은 둘 다 NULL
    ...
    컬럼명 자료형(크기) [기본값] [NULL여부]
    );
    CREATE TABLE 직원(
     -- 컬럼명 자료형(크기) 기본값 NULL 여부
     직원ID NUMBER(6) NOT NULL,
     이름 VARCHAR2(20),
     성 VARCHAR2(25) NOT NULL,
     이메일 VARCHAR2(25) NOT NULL,
     핸드폰 VARCHAR2(20),
     입사일 DATE NOT NULL,
     직업ID VARCHAR2(10) NOT NULL,
     급여 NUMBER(8,2),
     커미션비율 NUMBER(2,2),
     매니저ID NUMBER(6),
     부서ID NUMBER(4)
    );

    출력 : Table 직원이(가) 생성되었습니다.

     

    1.1.1 테이블 생성 규칙

    - 대소문자는 구분하지 않는다.

    - 테이블명은 중복될 수  없다.

    - 같은 테이블 내에서 컬럼명은 중복될 수 없다.

    - 문자로 시작해야하며, 예약어는 사용 불가능하다.

     

    1.1.2 실습

    - 부서테이블을 한글VER 만들기

    CREATE TABLE 부서(
    부서ID NUMBER(4) not null,
    부서명 VARCHAR2(30) not null,
    매니저ID NUMBER(6),
    지역ID NUMBER(4)
    );

     

    2. 제약 조건 

     

    - ★★★ PRIMARY KEY(PK)

    - UNIQUE  KEY(UK)

    - NOT NULL

    - CHECK

    - ★★★ FOREIGN KEY(FK)

     

    2.1 PRIMARY KEY(PK)

    -식별자를 물리적 모델링 한것

    -NOT NULL + UNIQUE = NULL 불가 + 중복 불가

    - ★ 식별자 : 테이블에서 행을 식별할 수 있는 칼럼

    - ex) 사원 ID

     

    2.2 UNIQUE  KEY(UK)

    - PRIMARY KEY와 다르게 NULL 값 입력 가능

    - ★ 중복은 불가능

    - ex) 이메일 등등

     

    2.3 NOT NULL

    - NULL값 불가능

     

    2.4 CHECK

    - 지정한 데이터만 입력 가능

    - ex) 성별 등등

     

    2.5 FOREIGN KEY(FK)

    왜래키, 테이블끼리 연결되어 있는 관계를 물리적 모델링한 것

    다른 테이블의 기본키를 참조하는 속성의 값

    - ★ FOREIGN KEY 사용하면 데이터 무결성

    ex) 직원은 부서에 소속될 수 있으며, 부서는 직원을 소속할 수 있다.

     

    2.6. 무결성 제약조건

    - 무결성 데이터에 결함이 없는 상태

    - 즉, 데이터가 정확하고 유효하게 유지 된 상태

     

    2.6.1 무결성 제약 조건

    - 데이터베이스에 저장된 데이터의 무결성을 보장, 일관되게 유지하기 위함

     

    - 개체 무결성 제약조건 : 기본키를 구성하는 속성은 NULL 값을 가질 수 없음

    - 참조 무결성 제약조건 : 외래키는 참조할 수 없는 값을 지닐 수 없음

     

    2.7 PK, UK, CHECK 문법

    ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(컬럼)

    (테이블 변경)                  (제약조건 추가)                          (제약조건)

    --PK 지정
    ALTER TABLE 직원 ADD CONSTRAINT 직원_직원ID_PK PRIMARY KEY(직원ID);
    
    --UK 지정
    ALTER TABLE 직원 ADD CONSTRAINT 직원_이메일_UK UNIQUE(이메일);
    
    --CHECK 지정(급여)
    ALTER TABLE 직원 ADD CONSTRAINT 직원_급여_CK CHECK(급여 > 0);

     

    2.8 FK 추가

    - ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건(칼럼) REFERENCES 참조할 테이블(참조할 컬럼)
    - FK는 UK이거나 PK일 때 참조가능! 따라서 부서테이블의 부서ID를 PK로 먼저 제약조건을 걸고 난 후에 직원테이블에서 가능

    ALTER TABLE 부서 ADD CONSTRAINT 부서_부서ID_PK PRIMARY KEY(부서ID);
    ALTER TABLE 직원 ADD CONSTRAINT 직원_부서ID_FK FOREIGN KEY(부서ID) REFERENCES 부서(부서ID);

     

    2.9 기타(NOT NULL, 제약 조건 삭제, 제약 조건 조회)

    --NOT NULL
    ALTER TABLE 직원 MODIFY 이름 NOT NULL;
    
    --제약 조건 삭제
    ALTER TABLE 직원 DROP CONSTRAINT 직원_급여_CK;
    
    -- 제약 조건 조회
    SELECT * FROM USER_CONSTRAINTS
    WHERE TABLE_NAME ='직원';

     

    3. 실습

    CREATE TABLE 제약조건테스트(
    PK테스트 NUMBER PRIMARY KEY,
    UK테스트 NUMBER UNIQUE,
    NN테스트 NUMBER NOT NULL,
    CK테스트 NUMBER CHECK(CK테스트 > 0)
    );
    CREATE TABLE 제약조건테스트2(
    PK테스트 NUMBER,
    UK테스트 NUMBER,
    CK테스트 NUMBER,
    부서ID NUMBER(4),
    -- 제약 조건으 추가
    CONSTRAINT 테스트2_PK테스트_PK PRIMARY KEY(PK테스트),
    CONSTRAINT 테스트2_UK테스트_PK UNIQUE(UK테스트),
    CONSTRAINT 테스트2_CK테스트_CK CHECK(CK테스트>0),
    CONSTRAINT 테스트2_부서ID_FK FOREIGN KEY(부서ID) REFERENCES 부서(부서ID)
    );

     

    3.1 문제 

    테이블명 : 네이버회원
    컬럼/자료형 
    ID –> 가변형문자 15BYTE
    이름 -> 가변형문자 12 BYTE, NULL 불가
    비밀번호 -> 가변형문자 16BYTE
    생년월일 -> 날짜형
    성별 -> 가변형문자 3BYTE
    
    테이블명 : 네이버블로그
    컬럼/자료형 
    블로그번호 –> NUMBER
    블로그제목 -> 가변형문자 100BYTE, NULL불가
    블로그내용 -> 가변형문자 4000BYTE
    ID -> 가변형문자 15BYTE
    CREATE TABLE 네이버회원(
     회원ID VARCHAR2(15),
     이름 VARCHAR2(12) not null,
     비밀번호 VARCHAR2(16),
     생년월일 DATE,
     성별 VARCHAR2(3),
     CONSTRAINT 회원_ID_PK PRIMARY KEY(회원ID),
     CONSTRAINT 회원_성별_CK CHECK(성별 = '남' or 성별 = '녀')
     );
    
    CREATE TABLE 네이버블로그(
     블로그번호 NUMBER,
     블로그제목 VARCHAR2(100) NOT NULL,
     블로그내용 VARCHAR2(4000),
     회원ID VARCHAR2(15),
     CONSTRAINT 블로그_번호_PK PRIMARY KEY(블로그번호),
     CONSTRAINT 블로그_회원ID_FK FOREIGN KEY(회원ID) REFERENCES 네이버회원(회원ID) 
     );

     

    4. ALTER

    -- 컬럼 추가
    ALTER TABLE 네이버회원 ADD 나이 NUMBER(3);
    
    -- 컬럼 삭제
    ALTER TABLE 네이버회원 DROP COLUMN 나이;
    
    -- 컬럼 속성 변경
    ALTER TABLE 네이버회원 MODIFY 회원ID VARCHAR2(30);
    
    --컬럼 속성 변경
    ALTER TABLE 네이버회원 RENAME COLUMN A to B;

     

    5. DROP

    - DROP TABLE 테이블 삭제
    - 테이블에 UK,PK가 다른 테이블에 참조가 되고 있는 경우 DROP TABLE로 삭제가 불가능
    - 참조 되어 있을 때 삭제하려면 CASCADE CONSTRAINT 옵션 추가

    DROP TABLE 네이버블로그;
    DROP TABLE 네이버회원;
    
    DROP TABLE 네이버회원 CASCADE CONSTRAINT;

     

    5.1  DELETE, TUNCATE DROP 차이점

    SELECT * FROM 성적표;
    DELETE FROM 성적표; -- 데이터를 삭제, 다만 COMMIT전 까지 가능 하다.
    ROLLBACK; -- 복구
    -- 데이터를 영구적으로 삭제, 복구 불가능!
    TURNCATE TABLE 성적표;
    -- table 성적표가 잘렸습니다.
    -- 테이블을 영구적으로 삭제, 복구 불가능하다.
    DROP TABLE 성적표;
    728x90

    'back-end&DB > SQL(Oracle)' 카테고리의 다른 글

    SQL TCL, DCL과 객체  (0) 2023.05.16
    SQL DML와 서브쿼리  (0) 2023.05.15
    SQL JOIN  (0) 2023.05.09
    SQL GROUP BY와 HAVING와 ORDER BY  (0) 2023.05.08
    SQL 함수  (0) 2023.05.04
Designed by Tistory.