DDL 문 -> 즉시 COMMIT 완료됨!
1. CREATE TABLE
테이블명 생성시 주의 사항
- 객체를 의미할 수 있는 단수형의 적절한 이름을 사용
- 다른 테이블과 중복되지 않아야함
- 한 테이블 내에는 칼럼명이 중복되게 지정할 수 없다.
- 테이블 이름을 지정하고 각 칼럼들은 괄호 ()로 묶어 지정
- 칼럼들은 콤마 , 로 구분하고 테이블 생성문의 끝은 세미콜론 ; 으로 끝남
- 테이블명과 칼럼명은 반드시 문자로 시작해야하고, 벤더별로 길이에 대한 한계 잇음.
- 벤더에서 사전에 정의한 예약어는 사용 불가
- A-Z, a-z, 0-9, _ , $, # 문자만 허용
CREATE TABLE 테이블이름( PRO_ID VARCHAR(10) NOT NULL PRIMARY KEY, PR0_NUM NUMBER NULL ); |
CREATE TABLE PLAYER( PRO_ID VARCHAR(10) NOT NULL, PR0_NUM NUMBER NULL, CONSTRAINT PLAYTER_PK PRIMARY KEY(PRO_ID), CONSTRAINT PLAYER_FK FOREIGN KEY(PRO_ID) REFERENCES TEAM(TEAM_ID)); // ALTER TABLE PLAYER ADD CONSTRAINT PLAYTER_PK PRIMARY KEY(PRO_ID); |
CREATE TABLE 테이블이름 AS SELECT * FROM TEAM; |
SELCET문을 이용한 테이블 생성
Select 문을 이용해 테이블을 생성하면 not null 설정만 전달이 되고 기본키, 고유키, 외래키, CHECK 등의 다른 제약조건은 없어지므로 제약조건을 추가하려면 ALTER TABLE 기능을 사용해줘야 한다.
제약조건(CONSTRAINT)
- 제약조건은 데이터의 무결성을 유지하기 위한 데이터베이스의 보편적인 방법이다.
- 테이블을 생성할 때 반드시 기술할 필요는 없지만, 이후에 ALTER TABLE을 이용해서 추가, 수정하는 경우 이미 데이터가 입력된 경우라면 처리 과정이 쉽지 않으므로 초기 테이블 생성 시점부터 적합한 제약조건에 대한 충분한 검토가 있어야 한다.
PRIMARY KEY | 하나의 테이블에 하나의 기본키 제약만 정의 가능 기본키 제약을 정의하면 DBMS는 자동으로 UNIQUE 인덱스를 생성 기본키를 구성하는 칼럼은 NOT NULL 이어야 함 NULL 불가능 PRIMARY KEY 제약 = UNIQUE 제약 + NOT NULL 제약 |
UNIQUE KEY | 행 데이터를 고유하게 식별하기 위한 고유키를 정의 NULL 값도 가능 NULL 값을 가진 행이 여러 개가 있더라도 고유키 제약조건에 위반되지 않음 |
NOT NULL | NULL 값 입력 금지 |
CHECK | 입력할 수 있는 값의 범위를 제한 |
FOREGN KEY | 참조 무결성 제약 옵션 선택 가능 테이블간의 관계를 정의하기 위해 기본키를 다른 테이블의 외래키로 복사하는 경우 생성됨 |
NULL의 의미
- 아직 정해지지 않은 미지의 값 OR 현재 데이터를 입력하지 못하는 경우를 의미
- 공백과 숫자0 과는 전혀 다른 값
- 조건에 맞는 데이터가 없을 때의 공집합과도 다르다.
DEFULAT 의미
데이터 입력 시에 칼럼의 값이 지정되지 않을 경우 DEFAULT(기본값)을 사전에 설정할 수 있다.
데이터 입력 시 명시된 값을 지정하지 않은 경우에 NULL 값이 입력된다.
DESC 테이블명 / DESCRIBE 테이블명 / sp_help ‘dbo.테이블명’
2. ALTER TABLE
ALTER TABLE 테이블명 ADD 칼럼명 데이터 유형 |
ALTER TABLE PLAYER ADD PLAYER_ID VARCHAR(10); |
ADD COLUMN
※ 새롭게 추가된 칼럼은 테이블의 마지막 칼럼이 되며 칼럼의 위치를 지정할 수는 없다.
ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명; |
ALTER TABLE PLAYER DROP COLUMN PLAYER_ID; |
DROP COLUMN
※ 데이터가 있거나 없거나 모두 삭제 가능
※ 한번에 하나의 칼럼만 삭제 가능
※ 칼럼 삭제 후 최소 하나 이상의 칼럼이 테이블에 존재해야 한다.
※ 한 번 삭제된 칼럼은 복구가 불가능하다.
ALTER TABLE 테이블명 MODIFY (칼럼이름 데이터유형 [DEFAUL식][NOT NULL], … ); |
ALTER TABLE PLAYER MODIFY P_ID NUMBER DEFAULT ‘2020-09-08’ NOT NULL); |
MODIFY COLUMN
※ 칼럼의 크기를 늘릴 수는 있지만 줄일 수는 없음
※ 해당 칼럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 칼럼의 폭을 줄일 수 있음
※ NULL 값만을 가지고 있으면 데이터 유형을 변경할 수 있음
※ 해당 칼럼의 DEFAULT 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
※ 해당 칼럼에 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있음
ALTER TABLE 테이블명 RENAME COLUMN 변경전칼럼명 TO 변경후칼럼명 |
ALTER TABLE PLAYER RENAME COLUMN P_ID TO PPPP_ID |
RENAME COLUMN
※ 오라클만 가능 SQL Server에서는 sp_rename 저장 프로시저를 이용하여 칼럼 이름을 변경할 수 있다.
※ Sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, ‘COLUMN’;
ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명; |
ALTER TABLE PLAYER RENAME COLUMN P_ID TO PPPP_ID |
※ 오라클만 가능 SQL Server에서는 sp_rename 저장 프로시저를 이용하여 칼럼 이름을 변경할 수 있다.
※ Sp_rename 변경해야 할 칼럼명, 새로운 칼럼명, ‘COLUMN’;
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명); |
ALTER TABLE PLAYER ADD CONSTRAINT PRO_FK FOREIGN KEY(PRO_ID) REFERENCES TEAM(TEAM_ID); |
ADD CONSTRAIN
1.
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건 (칼럼명); |
ALTER TABLE PLAYER ADD CONSTRAINT PRO_FK FOREIGN KEY(PRO_ID) REFERENCES TEAM(TEAM_ID); |
RENAME TABLE
RENAME 변경전테이블명 TO 변경후테이블명; RENAME PLAYER TO APPLE; |
sp.rename PLAYER, APPLE; |
2. DROP TABLE
DROP TABLE PLAYER [CASCADE CONSTRAINT
- CASCADE CONSTRAINT 는 해당 테이블과 관계가 있었던 참조되는 제약조건에 대해서도 삭제한다는 것을 의미
- SQL server는 CASCADE 옵션이 존재하지 않으며, 테이블을 삭제하기 전에 참조하는 FOREING KEY 제약조건 또는 참조하는 테이블을 먼저 손으로 직접 삭제해야 한다.
6. TRUNCATE TABLE
TRUNCATE TABLE PLAYER; |
※ Truncate TABLE 은 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장공간을 재상용 가능하도록 한다.
※ TRUNCATE TABLE 실행 후 테이블의 구조 자체는 남아있음. 알맹이 빈 껍데기
※ 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.
※ AUTO COMMIT 이 진행된다.
※ TRUNCATE TABLE 명령어 수행 후 정상적인 복구가 불가능하므로 주의 해야 한다.
※ DELETE TABLE 보다는 시스템 부하가 적은 TRUNCATE TABLE을 권고한다.
7. DELETE, DROP, TRUNCATE 비교
'노력만이 살길! > SQLD' 카테고리의 다른 글
NULL 처리하기 (0) | 2021.06.01 |
---|---|
DML문 (0) | 2021.06.01 |
제6절 분산데이터베이스와 성능 (0) | 2021.06.01 |
제5절 데이터베이스의 구조와 성능 (0) | 2021.06.01 |
제 4절 대량 데이터에 따른 성능 (0) | 2021.06.01 |