복습

데이터베이스 5일차 - 트랜잭션, DML, 데이터타입, 제약조건 본문

데이터베이스

데이터베이스 5일차 - 트랜잭션, DML, 데이터타입, 제약조건

ykm1256 2020. 4. 24. 17:33

트랜잭션

 - 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위.

 - 여러 개의 문장으로 구성된 트랜잭션은 반드시 동시에 실행(COMMIT) 되거나 취소(ROLEBACK)된다.

 - 트랜잭션은 DML 문이 실행되었을 때 시작한다.

 - 트랜잭션은 commit, rollback 명령을 사용하거나, DDL이나 DCL문을 사용했을 때(자동 commit), 비정상적인 종료,시스템다운(자동 rollback)일 때 끝난다.

 

TCL(COMMIT, ROLLBACK, SAVEPOINT)

 COMMIT : 모든 DML(데이터 입력,수정,삭제)작업을 수행한 후 작업을 완료할 때 반드시 필요하다. (저장)

 ROLLBACK : 트랜잭션의 실행을 취소하였음을 알리는 연산자로 원래의 상태로 복귀시키고 연산을 취소한다.

 SAVEPOINT : 저장점을 만들어 ROLLBACK SAVEPOINT를 하면 저장점으로 복귀한다.

 

DML(데이터 조작어)

: 데이터베이스에 데이터를 입력, 수정, 삭제하는 명령어이다.

 

 INSERT : 테이블에 새로운 행을 삽입한다.

  - 각 컬럼과 VALUES 절의 값은 반드시 1:1 대응 (순서가 같아야 함)

  - INSERT 문장에서 생략된 컬럼은 널값이 입력된다.

  - 컬럼 목록을 생략하면 모든 컬럼에 값을 입력한다.

  - 입력 값이 숫자가 아닌 경우 ''을 사용한다.

 

  셀렉트문으로 테이블에 입력하기.

-- 셀렉트문에서 가져온 EMPLOYEES 테이블 데이터 XX_EMP 테이블에 입력 
INSERT INTO XX_EMP (empno, ENAME, SALARY)  
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY
FROM EMPLOYEES;

  인서트 실행중에 에러가 나는 경우

-- 1. 기본키에 이미 있는 (중복된) 값을 입력할 경우
INSERT INTO departments (department_id, DEPARTMENT_NAME,MANAGER_ID, 
                            LOCATION_ID)
VALUES                  (10,'개발부 10', 100, 1700);
-- 2. FK(외래키)에 참조되지 않은 값을 입력 (참조 테이블에 없는 값)
INSERT INTO departments (department_id, department_name, manager_id, location_id)
VALUES                   (5, '개발부 5', 100, 1);
--departments 테이블은 location 테이블을 참조하는 데 외래키가 location_id이다.
--location 테이블의 location_id에 없는 1이라는 값을 입력하여 에러가 발생

-- 3. 데이터의 종류가 틀릴 때
INSERT INTO departments (department_id, department_name, manager_id, location_id)
VALUES                   (5, '개발부 5', 100, 'D1');

-- 4. 데이터 사이즈가 맞지 않을 때
INSERT INTO departments (department_id, department_name, manager_id, location_id)
VALUES                   (5, '개발부 5 개발부 5 개발부 5 개발부 5 개발부 5 ', 100, 'D1');

DESC departments; -- 글자수 널값 확인
SELECT * FROM departments;

  테이블 복사하기

CREATE TABLE COPY_EMP
AS SELECT * FROM employees;

   AS를 이용하여 복사하며 제약조건은 다 복사하지 못한다.

 

 UPDATE : 컬럼의 값을 수정한다.

  - 여러 행 동시에 수정가능

  - WHERE절 생략 시 지정된 컬럼의 모든 행의 값이 수정(주의)

  - DEFAULT를 기술하면 테이블에 정의된 DEFAULT 값으로 변경 됨.

  - 서브쿼리를 이용하여 수정가능

  - WHERE절에는 기본키를 활용하여 수정하는 것이 좋다.

 

  UPDATE 예제) departments 테이블의 'Music' 부서의 매니저와 location ID 업데이트 하기

--예제1)
UPDATE departments
SET location_id = 1800, manager_id = 100
WHERE department_name = 'Music';

SELECT * FROM departments WHERE department_name = 'Music';

 

 DELETE : WHERE절의 조건에 해당하는 행단위로 데이터를 삭제한다.

  - 조건이 없는 경우 모든 행을 삭제한다.

  - 테이블을 삭제해도 테이블의 물리적인 구조는 변하지 않는다.(행단위로 삭제하기 때문)

 

  departsments 테이블의 부서번호가 71~76인 데이터 삭제

DELETE FROM departments
WHERE department_id BETWEEN 71 AND 76;
COMMIT;

 

   TRUNCATE(전체삭제) : 행을 전체 삭제한다. DDL이므로 롤백이 불가능하다.

TRUNCATE TABLE COPY_EMP;
ROLLBACK; -- 롤백해도 데이터가 복구되지 않음

 

오라클의 데이터타입

 문자형 데이터타입

 숫자형 데이터타입

p는 소수점을 포함한 전체 자릿수를 의미하고, s는 소수점의 자릿수를 의미한다.

 날짜형 데이터 타입

 * 주로  VARCHAR2, NUMBER, DATE의 세 가지 타입을 사용한다.

 

DDL(데이터 정의어)

 : 데이터베이스를 정의하는 언어로 데이터를 생성하거나 수정, 삭제 등 데이터의 전체 골격을 결정하는 언어.

 테이블 생성

  - 테이블 이름을 지정하고 각 컬럼들은 괄호로 묶어 지정한다.

  - 컬럼 뒤에 데이터 타입을 꼭 지정한다.

  - 한 테이블 안에서 컬럼이름은 중복될 수 없고, 다른 테이블에서는 중복가능하다.

  - DEFAULT는 입력이 누락되었을 때 기본 입력값을 정의하는 것이다.

 

 테이블 삭제

 

 제약조건(Constraints)

 - 위와 같이 제약 조건을 정의하는 방법은 하나의 컬럼을 정의하면서 같이 정의하는 방법(컬럼 레벨 정의)

 테이블 생성 명렁어 마지막에 기술하는 방법(테이블 레벨 정의) 두 가지가 있다.

 - 제약조건의 이름은 이름만 봐도 어떤 제약조건인지 알 수 있게 '테이블이름_컬럼이름_제약조건' 형식으로 만든다.

 

 NOT NULL 설정

 - NOT NULL 설정은 컬럼 레벨 정의만 가능하며 지정된 컬럼은 널값을 허용하지 않는다.

 

 고유키(Unique Key) 설정

 - 중복된 값을 허용하지 않는 조건으로 널값은 여러 개의 값을 허용한다.

 

 CHECK 설정

  - 행에 입력될 데이터의 조건을 정의한다.

  - 조건은 WHERE 절에 기술하는 조건 형식과 동일하다.