[SQLD] 2-2. DDL
2021. 10. 29. 19:38ㆍCertificate`/SQLD
DDL (데이터 정의어)
데이터 유형
데이터 유형 | 설명 |
CHAR(s) | ● 고정 길이 문자열 (Oracle, SQL Server = CHAR) ● s = 1byte / Oracle 최대길이 = 2000byte / SQL Server 최대길이 = 8000byte ● 고정길이보다 s가 작을 경우 나머지 길이는 공간으로 채워진다 |
VARCHAR(s) | ● 가변 길이 문자열 (Oracle = VARCHAR2 / 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 가능