-> 블로그 이전

[SQLD] 2-2. DDL

2021. 10. 29. 19:38Certificate`/SQLD

DDL (데이터 정의어)

데이터 유형

데이터 유형 설명
CHAR(s) ● 고정 길이 문자열 (Oracle, SQL ServerCHAR)
● s = 1byte / Oracle 최대길이 = 2000byte / SQL Server 최대길이 = 8000byte
● 고정길이보다 s가 작을 경우 나머지 길이는 공간으로 채워진다
VARCHAR(s) ● 가변 길이 문자열 (OracleVARCHAR2 / SQL Server = VARCHAR)
● Oracle 최대길이 = 4000byte / SQL Server 최대길이 = 8000byte
 고정길이보다 s가 작을 경우 나머지 길이는 가변으로 조정된다
NUMBER(p,s) ● 정수, 실수 등 숫자 정보 (Oracle =NUMBER(p,s) / SQL Server ≫ 10가지 이상 타입)
● p = 정수 부분 / s = 소수점 부분
DATETIME ● 날짜와 시각 정보 (Oracle = DATE / SQL Server = DATETIME)
● Oracle = 1초 단위 / SQL Server = 3.33ms 단위

※ CHAR / VARCHAR

- CHAR 유형 : 'AA' = 'AA '

- VARCHAR 유형 : 'AA' ≠ 'AA '

 

CREATE TABLE

CREATE TABLE parent(
    parentPK NUMBER PRIMARY KEY
);

CREATE TABLE test1(
    id NUMBER(3) PRIMARY KEY, 
    name VARCHAR2(10) DEFAULT '홍길동', 
    age NUMBER(10) NOT NULL,
    jumin CHAR(14) NOT NULL CHECK (jumin LIKE '%-%'),  
    start_date CHAR(10), 
    end_date CHAR(10) CHECK (start_date <= end_date), 
    parentPK NUMBER,
    CONSTRAINT fk_made FOREIGN KEY(parentPK) 
    REFERENCES parent(parentPK) ON DELETE CASCADE
);

※ 주의사항

1. 테이블명은 다른 테이블과 중복 X

2. 한 테이블내에서 컬럼명 중복 X

3. 테이블명과 컬럼명은 반드시 문자로 시작

4. A-Z / a-z / 0-9 / _ / $ / # 문자만 허용

 

※ ON DELETE ~

- ON DELETE CASCADE

  • 참조되는 부모 테이블의 행에 대한 DELETE 허용
  • 부모테이블 값이 삭제되면 자식테이블 값 역시 삭제
  • 부모 테이블 값이 삭제되면 상속된 자식테이블 값의 로우값 또한 삭제

- ON DELETE SET NULL

  • 참조되는 부모 테이블의 행에 대한 DELETE 허용
  • 부모테이블의 값이 삭제되면 자식테이블 값은 NULL값으로 설정

 

제약조건

제약조건 종류 설명
PRIMARY KEY ● 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 기본키 정의
● 하나의 테이블에는 하나의 기본키 제약
● 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스 생성
● 기본키를 구성하는 컬럼에는 NULL을 입력할 수 없다
기본키 제약 = UNIQUE + NOT NULL
UNIQUE KEY ● 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키 정의
NULL 값을 허용
NOT NULL ● NULL 값 입력 금지
● NOT NULL을 CHECK의 일부분으로 이해 가능
CHECK ● 입력할 수 있는 값의 범위 제한
● TRUE or FALSE로 평가할 수 있는 논리식 지정
FOREIGN KEY ● 관계형 DB에서 테이블 간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사
● 외래키 지정 시 참조 무결성 제약 옵션 선택 가능

※ NULL 의미

- NULL ≠ (공백, 숫자0, 공집합)

- NULL은 '아직 정의되지 않은 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'

 

※ DEFAULT 의미

- 데이터 입력시 명시된 값을 지정하지 않은 경우 NULL 값 입력

- DEFAULT 값을 정의했다면 해당 컬럼에 NULL 값이 아니라 정의된 기본 값 자동 입력

 

ALTER TABLE

≫ 칼럼 추가

ALTER TABLE 테이블명
ADD 컬럼명 데이터타입;

 

칼럼 삭제

ALTER TABLE 테이블명
DROP 컬럼명;

 

≫ 컬럼 수정

- 데이터 타입, 길이 변경 / DEFAULT 값 변경 / NOT NULL 설정

- 데이터 타입을 변경할 때 해당 컬럼의 값들을 전부 삭제해야 한다

-- Oracle
ALTER TABLE 테이블명
MODIFY (컬럼명 데이터타입 [DAFAULT 식] [NOT NULL]);

-- SQL Server
ALTER TABLE 테이블명
ALTER COLUMN (컬럼명 데이터타입 [DAFAULT 식] [NOT NULL]);

-- Example
ALTER TABLE TABLE1 MODIFY (ID VARCHAR2(20));
ALTER TABLE TABLE1 MODIFY (NAME NOT NULL);
ALTER TABLE TABLE1 MODIFY (ID DEFAULT 'ADMIN');

 

≫ 제약조건 삭제

ALTER TABLE 테이블명
DROP CONSTRAINT 제약조건명;

-- Example
ALTER TABLE TABLE1 DROP CONSTRAINT PLAYER_FK;

 

제약조건 추가

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

-- Example
ALTER TABLE TABLE1 ADD CONSTRAINT UNIQ_BACK UNIQUE (BACKNUM); -- UNIQUE
ALTER TABLE TABLE1 ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID); -- 외래키

 

컬럼 이름 변경

-- Oracle
ALTER TABLE 테이블명
RENAME COLUMN 원래컬럼명 TO 바꿀컬럼명

-- SQL Server
ALTER TABLE 테이블명
CHANGE 원래 컬럼명 바꿀컬럼명 컬럼타입;

-- Example
ALTER TABLE TABLE1 RENAME COLUMN player_id TO user_id;

 

≫ 테이블 이름 변경

-- Oracle
RENAME 원래 테이블명 TO 바꾼 테이블명;

-- SQL Server
sp_rename 원래 테이블명, 바꾼 테이블명;

-- Example
RENAME TABLE1 TO TABLE2;
sp_rename 'TABLE1','TABLE2';

 

DROP TABLE

≫ 테이블 삭제 (ALL)

DROP TABLE 테이블명 [CASCADE CONSTRAINT];

※ CASCADE CONSTRAINT 

- 해당 테이블과 관계가 있었던 참조되는 제약조건도 같이 삭제

- SQL Server에는 CASCADE 옵션이 없다 -> 먼저 참조 FOREIGN KEY 제약조건 or 참조 테이블 삭제

 

≫ 테이블 삭제 (Row)

TRUNCATE TABLE 테이블명;

- 해당 테이블의 모든 행 제거

- 저장공간을 재사용 가능하도록 해제

- Oracle = ROLLBACK 불가능 / SQL Server = ROLLBACK 가능