2020.11.25 SQLD 공부 - DDL , DML , DCL , 트랜젝션 제어어

테이블 생성 (CREATE) 

 

CREATE TABLE 테이블이름 ( 컬럼명 1 DATATYPE , 컬럼명2 DATATYPE ); 


CREATE TABLE PLAYER ( PLAYER_ID CHAR(7) NOT NULL , PLAYER_NAME VARCHAR2(20) NOT NULL , TEAM_ID CHAR(3) , WEIGHT NUMBER(3) , CONSTRAINT PLAYER_PK PRIMARY KEY (PLAYER_ID), CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID)); 



예시 2 ) 



Oracle CREATE TABLE TEAM ( TEAM_ID CHAR(3) NOT NULL, REGION_NAME VARCHAR2(8) NOT NULL, TEAM_NAME VARCHAR2(40) NOT NULL, E_TEAM_NAME VARCHAR2(50), ORIG_YYYY CHAR(4), STADIUM_ID CHAR(3) NOT NULL, ZIP_CODE1 CHAR(3), ZIP_CODE2 CHAR(3), ADDRESS VARCHAR2(80), DDD VARCHAR2(3), TEL VARCHAR2(10), FAX VARCHAR2(10), HOMEPAGE VARCHAR2(50), OWNER VARCHAR2(10), CONSTRAINT TEAM_PK PRIMARY KEY (TEAM_ID), CONSTRAINT TEAM_FK FOREIGN KEY (STADIUM_ID) REFERENCES STADIUM(STADIUM_ID) ); 


ALTER TABLE(테이블 구조 변경)


1) ADD COLUMN 


SQL - SERVER : ALTER TABLE PLAYER ADD ADDRESS VARCHAR(80) ; 



2) DROP COLUMN


ALTER TABLE PLAYER DROP COLUMN ADDRESS; 


3) MODIFY COLUMN 


- 해당 컬럼의 크기는 늘릴 수 있지만 줄이지는 못한다. 기존 데이터 훼손가능해서 

NULL 값만 가지고 있는 컬럼이면 줄일 수 있다. 데이터 유형변경도 가능 


ORACLE : ALTER TABLE TEAM_TEMP MODIFY ( ORIG VARCHAR2(8) DEFAULT '20022020' NOT NULL ) ; 


SQL SERVER : ALTER TABLE TEAM_TEMP ALTER COLUMN ORIG VARCHAR(80) NOT NULL ; 


ALTER TABLE TEAM_TEMP ADD CONSTRAINT DF_ORIG DEFAULT '2020129' FOR ORIG



4) RENAME 


ORACLE 등 일부에서만 지원


ALTER TABLE PLAYER RENAME COLUMN PLAYER_ID TO TEMP_ID; 

ALTER TABLE PLAYER RENAME COLUMN TEMP_IT TO PLAYER_ID ; 



5) DROP CONSTRAINT 


ORACLE

ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK 


SQL SERVER 

ALTER TABLE PLAYER DROP CONSTRAINT PLAYER_FK 



6) ADD CONSTRAINT 


ORACLE

ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY ( TEAM_ID ) REFERENCES TEAM ( TEAM_ID) 



SQL SERVER

ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM (TEAM_ID) 



7) RENAME TABLE


RENAME TEAM TO TEAM_BACKUP ; 

RENAME TEAM_BACKUP TO TEAM ; 



8) DROP TABLE 


DROP TABLE 테이블명 



9) TRUNCATE TABLE 


TRUNCATE TABLE 은 테이블 자체가 삭제되는 것이 아니라 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다. 테이블 구조를 완전히 삭제 하기 위해서는 DROP TABLE 실행한다. 


TRUNCATE TABLE TEAM 


정상적 복구 불가능 




DML (DATA MANIPULATION LANGUAGE ) 


1. INSERT 


INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID , POSITION, HEIGHT , BACK_NO ) VALUES ( '2002007' , '박지성' , 'K07' , 'MF' , 178, ''MK" , NULL , 73, 7  );  

* 모든 컬럼에 데이터를 입력하는 경우로 굳이 COLUMN_LIST 를 언급하지 않아도 되지만, 컬럼의 순서대로 빠짐없이 데이터가 입력되어야 한다. 



2. UPDATE



UPDATE PLAYER SET BACK_NO = 99; 



3. DELETE 


DELETE FROM PLAYER WHERE ~~ ; 




* DDL ( CREATE, ALTER, RNAME, DROP ) 명령어인 경우에는 직접 데이터베이스의 테이블에 영향을 미치기 때문에 DDL 을 입력하는 순간 명령어에 해당하는 작업이 즉시 ( AUTO COMMIT) 완료된다 하지만 DML ( INSERT, UPDATE, DELETE, SELECT ) 명령어의 경우, 조작하려는 테이블을 메모리 버퍼에 올려놓고 작업을 하기 때문에 실시간으로 테이블에 영향을 미치는 것은 아니다. 

COMMIT 명령어를 입력해서 TRANSACTION 을 종료해야 한다. 


그러나 SQL SERVER에서는 DML의 경우도 AUTO COMMIT 으로 처리되기 때문에 실제 테이블에 반영하기 위해 COMMIT 명령어를 입력할 필요가 없다. 

테이블의 전체 데이터를 삭제하는 경우, 시스템 활용 측면에서는 삭제된 데이터를 로그로 저장하는 DELETE FROM TABLE이름 보다는 시스템 부하가 적은 TRUNCATE TABLE 을 권고한다. TRUNCATE TABLE 은 ROLLBACK 이 불가능 



SELECT 

*DISTINCT : 중복되는 데이터가 있으면 모두 1건으로 처리해서 출력한다. 


SELECT DISTINCT POSITION FROM PLAYER



 






















댓글