CHAP 9~13 복습(DDL, DCL, DML, TCL 구문 정리)

김승현·2021년 10월 18일
0

DDL


CREATE


CREATE작성법
테이블 생성CREATE TABLE 테이블명 (컬럼명 자료형(크기), 컬럼명 자료형(크기), ....);
테이블 생성+서브쿼리CREATE TABLE 테이블명 AS (서브쿼리);
컬럼별 주석COMMENT ON COLUMN 테이블명.컬럼명 IS '주석';
  • 제약 조건 정보 확인
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';


SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME 
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='테이블명'
UNION
SELECT TABLE_NAME,CONSTRAINT_NAME, CONSTRAINT_TYPE 
FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명'
ORDER BY 3 DESC;



ALTER


ALTER작성법
컬럼 추가 ALTER TABLE 테이블명 ADD(컬럼명 데이터타입 [DEFAULT] );
데이터 타입 수정
(DEFAULT 값 수정 가능)
ALTER TABLE 테이블명 MODIFY(컬럼명 데이터타입 [DEFAULT]);
제약 조건 추가
(제약조건명 지정해야함)
PRIMARY KEY, FOREIGN KEY, UNIQUE는 ADD
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 PRIMARY KEY | FOREIGN KEY | UNIQUE(컬럼명);
NOT NULL, CHECK 는 MODIFY
ALTER TABLE 테이블명 MODIFY 컬럼명 CONSTRAINT 제약조건명 NOT NULL | CHECK;
테이블 이름 변경ALTER TABLE 테이블명 RENAME TO 테이블명(변경후);
RENAME 테이블명 TO 테이블명(변경후);
컬럼명 수정ALTER TABLE 테이블명 RENAME COLUMN 컬럼명(변경전) TO 컬럼명(변경후);
제약 조건 이름 변경ALTER TABLE 테이블명 RENAME CONSTRAINT 제약조건명(변경전) TO 제약조건명(변경후);
컬럼 삭제참조하고있는 컬럼이 있다면 컬럼 삭제 불가능
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
삭제시 연결되어 있는 제약 조건도 모두 없애기
ALTER TABLE 테이블명 DROP COLUMN 컬럼명 CASCADE CONSTRAINT;
제약 조건 삭제ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건명 ;



DROP


DROP작성법
테이블 삭제DROP TABLE 테이블명;
테이블 삭제+제약조건 삭제DROP TABLE 테이블명 CASCADE CONSTRAINT;



DML


INSERT


INSERT작성법
테이블 생성INSERT INTO 테이블명 VALUES (입력데이터1, 입력데이터2, ... );
INSERT INTO 테이블명 (컬럼명1,컬럼명2,...) VALUES (입력데이터1, 입력데이터2, ... );
INSERT INTO 테이블명 (서브쿼리);



INSERT ALL


  • 특정 대상이 되는 테이블의 데이터를 서브쿼리로 조회하여 두개 이상의 테이블에 데이터를 삽입할 수 있는 방식

  • EX)

-- 사번, 사원명, 매니저ID 저장하는 테이블
CREATE TABLE EMP_MANAGER AS
    SELECT EMP_ID, EMP_NAME, MANAGER_ID
    FROM EMPLOYEE
    WHERE 1=0;  -- 거짓으로 만들어서 테이블 구조만 가져오기

-- 사번, 이름, 부서코드, 부서명을 저장하는 테이블
CREATE TABLE EMP_DEPT_D2 AS
    SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
    FROM EMPLOYEE
    LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
    WHERE 1=0; -- 거짓으로 만들어서 테이블 구조만 가져오기

-- 부서코드가 D2 사원의 정보 추출하여 각 테이블에 정보 삽입
INSERT ALL
INTO EMP_MANAGER VALUES(EMP_ID, EMP_NAME, MANAGER_ID)
INTO EMP__DEPT_D2 VALUES(EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE)
(SELECT EMP_ID, EMP_NAME, MANAGER_ID, DEPT_CODE, DEPT_TITLE
 FROM EMPLOYEE
 LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
 WHERE DEPT_CODE='D2');

SELECT * FROM EMP_MANAGER;
SELECT *FROM EMP_DEPT_D2;



UPDATE


UPDATE작성법
컬럼값 수정
서브쿼리 사용 가능
UPDATE 테이블명 SET 컬럼 = '데이터' , 컬럼 = '데이터', ....
[WHERE 조건]



MERGE


  • EX)
-- ID 와 NAME을 가지고 있는 TABLE_A, TABLE_A 병합
MERGE INTO TABLE_A USING TABLE_B ON(TABLE_A.ID=TABLE_B.ID)
WHEN MATCHED THEN   			  -- ID가 같으면
UPDATE SET TABLE_A.NAME = TABLE_B.NAME    -- NAME을 UPDATE(수정)
WHEN NOT MATCHED THEN  			  -- 그렇지 않으면
INSERT VALUES(TABLE_B.ID, TABLE_B.NAME);  -- TABLE_B의 ID, NAME을 INSERT(추가)



DELETE


DELETE작성법
테이블 행 삭제DELETE FROM 테이블명
[WHERE 조건]
  • 외래키(FOREIGN KEY) 제약 조건으로 컬럼 삭제가 불가능한 경우에 제약조건을 비활성화한 후 삭제 가능

  1. CONSTRAINT_NAME 확인하기
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,STATUS FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';
  1. CONSTRAINT_NAME을 찾아서 제약조건을 비활성화
ALTER TABLE 테이블명 DISABLE CONSTRAINT [CONSTRAINT_NAME];



TRUNCATE


TRUNCATE작성법
테이블 초기화TRUNCATE TABLE 테이블명;



  • 비교
구분정리
DELETETable의 데이터 삭제
Rollback을 통해서 Commit 전 시전까지 되돌릴 수 있다.
TRUNCATETable의 데이터 삭제(데이터 자체를 초기화)
Rollback을 하더라도 되돌릴 수 없다.
DROPTable 자체를 삭제
객체 삭제는 기본적으로 Rollback이 안된다.
(Rollback은 데이터에 대한 복구만 가능)



구분적용 시점
CREATE즉시 적용
DROP즉시 적용
INSERT즉시 적용 안됨
(COMMIT : 적용, ROLLBACK: 되돌리기)
UPDATE즉시 적용 안됨
(COMMIT : 적용, ROLLBACK: 되돌리기)
DELETE즉시 적용 안됨
(COMMIT : 적용, ROLLBACK: 되돌리기)



DCL


GRANT


GRANT작성법
접속권한 부여GRANT CONNECT TO 계정명;
객체(생성, 수정, 삭제),
데이터(입력, 수정, 조회, 삭제) 권한 부여
GRANT RESOURCE TO 계정명;
보기 권한 부여GRANT SELECT ON 계정명1.테이블명 TO 계정명2;
데이터 추가 권한 부여GRANT INSERT ON 계정명1.테이블명 TO 계정명2;
데이터 삭제 권한 부여 GRANT DELETE ON 계정명1.테이블명 TO 계정명2;
데이터 수정 권한 부여GRANT UPDATE ON 계정명1.테이블명 TO 계정명2;



REVOKE


REVOKE작성법
접속권한 회수REVOKE CONNECT FROM 계정명;
객체(생성, 수정, 삭제),
데이터(입력, 수정, 조회, 삭제) 권한 회수
REVOKE RESOURCE FROM 계정명;
보기 권한 회수REVOKE SELECT ON 계정명1.테이블명 FROM 계정명2;
데이터 추가 권한 회수REVOKE INSERT ON 계정명1.테이블명 FROM 계정명2;
데이터 삭제 권한 회수REVOKE DELETE ON 계정명1.테이블명 FROM 계정명2;
데이터 수정 권한 회수 REVOKE UPDATE ON 계정명1.테이블명 FROM 계정명2;

  • 계정별 부여된 롤 권한 확인 (대문자로 쓰기)
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE = '계정명' ;

  • 계정별 부여된 테이블 권한 확인(대문자로 쓰기)
SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE, GRANTOR
FROM DBA_TAB_PRIVS
WHERE GRANTEE = '테이블명';



TCL


COMMIT, ROLLBACK, SAVEPOINT


구분의미
COMMIT트랜잭션 작업이 정상 완료 되면 변경 내용을 영구히 저장 (모든 savepoint 삭제)
SAVEPOINT savepoint명현재 트랜잭션 작업 시점에 이름을 지정함 / 하나의 트랜잭션 안에서 구역을 나눌수 있음
ROLLBACK트랜잭션 작업을 모두 취소하고 최근 commit 시점으로 이동
ROLLBACK TO savepoint명트랜잭션 작업을 취소하고 savepoint 시점으로 이동
  • 만약 ROLLBACK 으로 가장 마지막 지점으로 이동하게 되면 중간에 있던 savepoint는 사라짐
profile
개발자로 매일 한 걸음

0개의 댓글