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 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 TABLE 테이블명; |
테이블 삭제+제약조건 삭제 | DROP TABLE 테이블명 CASCADE CONSTRAINT; |
INSERT | 작성법 |
---|---|
테이블 생성 | INSERT INTO 테이블명 VALUES (입력데이터1, 입력데이터2, ... ); INSERT INTO 테이블명 (컬럼명1,컬럼명2,...) VALUES (입력데이터1, 입력데이터2, ... ); INSERT INTO 테이블명 (서브쿼리); |
특정 대상이 되는 테이블의 데이터를 서브쿼리로 조회하여 두개 이상의 테이블에 데이터를 삽입할 수 있는 방식
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 테이블명 SET 컬럼 = '데이터' , 컬럼 = '데이터', .... [WHERE 조건] |
-- 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 FROM 테이블명 [WHERE 조건] |
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE,STATUS FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';
ALTER TABLE 테이블명 DISABLE CONSTRAINT [CONSTRAINT_NAME];
TRUNCATE | 작성법 |
---|---|
테이블 초기화 | TRUNCATE TABLE 테이블명; |
구분 | 정리 |
---|---|
DELETE | Table의 데이터 삭제 Rollback을 통해서 Commit 전 시전까지 되돌릴 수 있다. |
TRUNCATE | Table의 데이터 삭제(데이터 자체를 초기화) Rollback을 하더라도 되돌릴 수 없다. |
DROP | Table 자체를 삭제 객체 삭제는 기본적으로 Rollback이 안된다. (Rollback은 데이터에 대한 복구만 가능) |
구분 | 적용 시점 |
---|---|
CREATE | 즉시 적용 |
DROP | 즉시 적용 |
INSERT | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
UPDATE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
DELETE | 즉시 적용 안됨 (COMMIT : 적용, ROLLBACK: 되돌리기) |
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 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 = '테이블명';
구분 | 의미 |
---|---|
COMMIT | 트랜잭션 작업이 정상 완료 되면 변경 내용을 영구히 저장 (모든 savepoint 삭제) |
SAVEPOINT savepoint명 | 현재 트랜잭션 작업 시점에 이름을 지정함 / 하나의 트랜잭션 안에서 구역을 나눌수 있음 |
ROLLBACK | 트랜잭션 작업을 모두 취소하고 최근 commit 시점으로 이동 |
ROLLBACK TO savepoint명 | 트랜잭션 작업을 취소하고 savepoint 시점으로 이동 |