@제약조건추가
- ALTER TABLE 테이블명 ADD 제약조건(PK, FK, U, CH)
- ALTER TABLE 테이블명 MODIFY 컬럼명 NOT NULL;
@테이블 제약조건 확인
SELECT *
FROM USER_CONSTRAINTS UC
JOIN USER_CONS_COLUMNS UCC USING(CONSTRAINT_NAME)
WHERE UC.TABLE_NAME = '테이블명';
DML(Date Manipulation Language) : 데이터 조작언어
테이블에 값을 삽입하거나(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문
1. INSERT
- 새로운 행을 추가하는 구문
-> 테이블의 행 개수 증가
[표현식]
INSERT INTO 테이블명(컬럼명,컬럼명,컬럼명,...)
VALUES (데이터1, 데이터2, 데이터3, ...);
INSERT시 모든 컬럼에 데이터를 추가할 경우 (컬럼명, 컬럼명,...) 생략 가능
#COMMIT
-DCL, 현재까지 작업한 DML 내용을 DB에 반영
★ INSERT시 VALUES 대신 서브쿼리 사용 가능
EX)
INSERT INTO EMP_01 (EMP_ID, EMP_NAME, DEPT_TITLE)
(SELECT EMP_ID,EMP_NAME,DEPT_TITLE FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID));
2. INSERT ALL
- INSERT시 서브쿼리가 사용하는 테이블이 같은경우
두 개 이상의 테이블에 INSERT ALL을 이용하여 한번에 삽입 가능,
단 서브쿼리의 조건(WHERE)절이 같아야 함
EX)
INSERT ALL
INTO 테이블1 VALUES(컬럼1, 컬럼2, 컬럼3)
INTO 테이블2 VALUES(컬럼1, 컬럼2, 컬럼3)
(SELECT 컬럼1, 컬럼2, 컬럼3, 컬럼4
FROM 공통테이블
WHERE 조건);
EX) 조건형 INSERT ALL
INSERT ALL
WHEN 조건1
THEN INTO 테이블1 VALUES (컬럼1, 컬럼2, 컬럼3)
WHEN 조건2
THEN INTO 테이블2 VALUES (컬럼1, 컬럼2, 컬럼3)
(SELECT 컬럼1,컬럼2,컬럼3 FROM 공통테이블);
# ROLLBACK
- DCL, 현재까지 작성한 DML 내용을 DB에 반영하지 않고 다 지워버림(원래 상태로 되돌림)
3. UPDATE
- 테이블에 기록된 컬럼의 값을 수정하는 구문
- 테이블 전체 행의 개수에는 변화가 없다.
[표현식]
UPDATE 테이블명
SET 컬럼명1 = 변경할 값1,
컬럼명2 = 변경할 값2, ...
[WHERE 컬럼명 비교연산자 비교값];
-[UPDATE 구문에서 서브쿼리 사용 표현식]
UPDATE 테이블명
SET 컬럼명 = (서브쿼리)
[WHERE ~~~~]
# UPDATE시 변경할 값은 해당 컬럼에 대한 제약조건을 위배되지 않게 해야함
4. MERGE(병합)
- 구조가 같은 두개의 테이블을 하나로 합치는 기능
- 테이블에서 지정하는 조건의 값이 존재하면 UPDATE
-> WHEN MATCHED THEN
- 조건값이 없으면 INSERT
-> WHEN NOT MATCHED THEN
5. DELETE
- 테이블의 행을 삭제하는 구문
-> 테이블 행의 개수가 줄어듦
[표현식]
DELETE FROM 테이블명
[WHERE 컬럼명 비교연산자 비교값];
-> WHERE 절을 설정하지 않으면 테이블의 모든 데이터 삭제됨
-제약조건을 비활성화 시키기
ALTER TABLE 테이블명 DISABLE
CONSTRAINT 제약조건명 CASCADE;
-제약조건을 다시 활성화 시키기
ALTER TABLE 테이블명 ENABLE
CONSTRAINT 제약조건명;
# TRUNCATE
- 테이블의 전체 행을 삭제하는 DDL
- DELETE보다 수행 속도가 빠름
- DB상에 메모리 공간이 확보가 된다.
# COMMIT, ROLLBACK을 사용할 수 있는 경우
-->DML 구문에 대해서만 사용 가능
# DML 구문을 작성하다 DDL 구문을 작성하면 앞에서 작성한 DML 구문이 모두 COMMIT됨
-> ROLLBACK
DCL(Data Control Language) 데이터 제어 언어
- 데이터베이스, 데이터베이스 객체에 대한 접근권한을 제어(부여,회수)하는 언어
- DCL : GRANT(권한 부여), REVOKE(권한 회수)
- TCL : COMMIT, ROLLBACK, SAVEPOINT
- 권한은 크게 시스템, 객체 권한으로 나뉘어 있음
@ 시스템 권한 부여(GRANT)
- 사용자에게 권한을 부여할 때 사용
[표기법]
GRANT 권한1, 권한2, .... TO 사용자계정명;
@ 시스템 권한 종류
CREATE SESSION : 데이터베이스 접속 권한
CREATE TABLE : 테이블 생성 권한
CREATE VIEW : 뷰 생성 권한
CREATE SEQUENCE : 시퀀스 생성 권한
CREATE PROCEDURE : 프로시져(함수) 생성 권한
CREATE USER : 계정 생성 권한
DROP USER : 계정 삭제 권한
DROP ANY TABLE : 임의의 테이블 삭제 권한
@ 계정의 종류
- 관리자 계정 (SYS AS SYSDBA, SYSTEM)
데이터베이스의 생성과 관리를 담당하는 계정
모든 권한과 책임을 가지는 계정
- 사용자 계정
데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의 작업을 수행할 수 있는 계정으로
업무에 필요한 최소한의 권한만을 가지는 것을 원칙으로 함
@ 객체 권한 부여
- 객체 권한 : 특정 DB 객체를 조작할 수 있는 권한을 부여
[표기법]
GRANT 권한종류 [(컬럼명)|ALL
ON 객체명 | ROLE 이름 | PUBLIC
TO 사용자계정명;
@ 객체 권한 종류
권한 종류 | 설정 객체 |
SELECT | TABLE, VIEW, SEQUENCE |
INSERT | TABLE, VIEW |
UPDATE | TABLE, VIEW |
DELETE | TABLE, VIEW |
ALTER | TABLE, SEQUENCE |
REFERENCES | TABLE |
INDEX | TABLE |
EXECUTE | PROCEDURE |
@ 권한 회수(REVOKE)
[표기법]
REVOKE 권한 종류 ON 객체명 FROM 사용자계정명;
★ ROLE
- 사용자에게 허가할 수 있는 권한들의 집합
- ROLE을 이용하면 권한 부여와 회수에 용이함
★ CONNECT
- 사용자가 데이터베이스에 접속 가능하도록 하기 위한
CREATE SESSION 권한이 작성되어 있는 ROLE
★ RESOURCE
- CREATE 구문을 통한 객체 생성 권한과 INSERT, UPDATE, DELETE 구문을
사용할 수 있는 권한을 모아놓은 ROLE
TCL(Transaction Control Language) : 트랜잭션 제어언어
- 데이터베이스의 논리적 연산 단위
- 데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리함
- 트랜잭션의 대상이 되는 SQL : INSERT, UPDATE, DELETE(DML)
★ COMMIT/ ROLLBACK
- COMMIT 또는 ROLLBACK 명령이 입력되기 전 까지는 데이터 변경사항이
메모리 버퍼에 임시 저장되어 있는 상태로 존재
- COMMIT : 메모리 버퍼에 임시 저장된 데이터를 DB에 반영
- ROLLBACK : 메모리 버퍼에 임시 저장된 데이터를 삭제하고 마지막 COMMIT 상태로 돌아감
-★ SAVEPOINT : 저장지점을 정의하면 롤백 할 때 트랜잭션에 포함된 전제 작업을 롤백하는 것이 아닌,
현 시점에서 지정한 SAVEPOINT 까지 트랜잭션 일부만 롤백
[표현법]
SAVEPOINT 임의의세이브포인트명;
ROLLBACK TO 임의의세이브포인트명;
'study > Oracle' 카테고리의 다른 글
8_oracle_이론 정리 (0) | 2019.11.26 |
---|---|
7_oracle_DDL (ALTER, DROP) (0) | 2019.11.23 |
5_oracle_DDL(CREATE) (0) | 2019.11.21 |
5_oracle_서브쿼리 (0) | 2019.11.20 |
4_oracle_JOIN (0) | 2019.11.19 |