🔎 데이터 타입이란 컬럼이 저장되는 데이터 유형을 말한다
🔎 기본 데이터 타입은 문자형, 실수, 소수, 자료형 등의 여러 데이터를 식별하는 타입이다
🔎 varchar2 가변길이로 저장된다.
-> char() 형식으로 사용하는 것보다 varchar() 형식으로 사용하는 것이 메모리 소비차원에서 합리적이다.
🔎 대부분 NUMBER형을 사용한다.
🔎 P는 소수점을 포함한 전체 자릿수를 의미하고, S는 소수점 자릿수를 의미한다.
🔎 NUMBER는 가변숫자이므로 P와S를 입력하지 않으면 저장 데이터의 크기에 맞게 자동으로 조절된다.
🔎 파라미터 값 두 개를 받아온다.(P,S)
입력값 타입 저장되는 값 123.89 NUMBER 123.89 123.89 NUMBER(3) 124 // 3자리수 변환후 반올림 123.89 NUMBER(3,2) 오류 123.89 NUMBER(4,2) 오류 123.89 NUMBER(5,2) 123.89 123.89 NUMBER(6,1) 123.9
🔎 일반적으로는 날짜 데이터 타입은 DATA 타입이다.
🔎 LOB이란 Large Object의 약자로 대용량 데이터를 처리할 수 있는 데이터 타입이다.
🔎 데이터의 구조를 정의하기 위한 테이블 생성, 삭제와 같은 명령어
- create table : 테이블 생성 - drop table : 테이블 삭제 - alter table : 테이블 수정 - truncate table: 테이블에 있는 모든 데이터 삭제
-> 다음과 같이 정말 delete할 것인지에 대한 안내 문구가 나오는데, 신중히 선택한다.
- 데이터 조회 및 변형을 위한 명령어 - select : 데이터 조회 - insert : 데이터 입력 - update : 데이터 수정 - delete : 데이터 삭제
insert into 테이블명 values (값1, 값2, ...) -> 전체컬럼 - insert into 테이블명 (컬럼1, 컬럼2, ...) values (값1, 값2, ...) -> 특정컬럼 - update 테이블명 set 컬럼1 = 값1, 컬럼 2 = 값2, ... where 조건..; - delete 테이블명 where 조건;
drop table 테이블명;
🔎 존재 자체가 삭제된다.
🔎 데이터만 통 삭제
🔎 truncate는 테이블이 삭제되는 명령어는 아니고 안에 들어있던 모든 레코드들을 제거하는 명령어이다.
🔎 테이블을 drop했다가, create하는 작업
🔎 모든 행을 삭제하는 데에는 가장 빠르고 효율적인 작업
🔎 delete는 조건에 해당하는 것만 지울수도 있고, 전체를 지울수도 있는 이유가 한줄 한줄 삭제하기 때문이다.
🔎 로그를 남김
-> drop과 truncate는 정말 조심해서 사용하도록 한다.
<예제>
🔎 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
🔎 트랜잭션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
🔎 commit을 수행하면, 하나의 트랜젝션 과정을 종료하게 된다.
-> commit의 개념
🔎 transaction작업 내용을 실제 db에 저장
🔎 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.
🔎select, insert, update, delete -> 이러한 하나의 작업 단위를 영구적으로 db에 저장
🔎상단바에 'Auto'를 누르면 로그를 볼 수 있다.
-> 다음과 같이 초기 설정은 Auto(commit)으로 되어있는데, 이를 해제하여 commit으로 코드를 작성하고 싶을 때 위 그림을 따라서 설정할 수 있다.
🔎 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 변경 사항을 취소하고, 트랜잭션 과정을 종료시킨다
.
🔎 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
🔎 이전 commit한 곳 까지만 복구한다.
🔎 트랜젝션 작업 중 하나라도 문제가 발생하면, 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야 한다.
-> rollback의 개념
🔎 문제가 발생하면 논리적인 작업의 단위를 모두 취소해 버리면 되기 때문이다.
🔎 데이터의 무결성이 보장된다.
🔎 논리적으로 연관된 작업을 그룹화할 수 있다.
🔎 비정상적인 종료가 됐을 때
🔎 DDL문(create, alter, drop, truncate)
🔎 DCL문(grant, revoke) 사용권한애 대한 insert, update, delete 작업 후 commit하지 않고 오라클을 정상 종료시에 commit명령어를 입력하지 않아도 정상 commit후 오라클 종료
🔎 not null : 널값이 입력되지 못하게 하는 것
🔎 unipqe : 중복된 값이 입력되지 못하게 하는 조건
🔎 chck : 주어진 값만을 허요하는 조건
🔎 primary key : not null + unique + index의 의미
🔎foreing key : 다른 테이블의 필드(컬럼)를 참조해서 무결성을 검사하는 조건
<예제>
(1) not null
(2) unique
(3) check
🔎 기본키 역시 기본적인 제약조건들은 테이블을 생성할때 같이 정의한다.
🔎 테이블당 하나만 정의가 가능하다.
🔎 기본키 ,식별자, pk 등으로 불리고 있다.
🔎 not null + unique + index
CREATE TABLE constTest( pkCol1 varchar2(10) PRIMARY KEY, // 이 방법이 가장 많이 사용된다. pkCol2 varchar2(10) CONSTRAINT pk_test1 PRIMARY KEY , pkCol3 varchar3(10) CONSTRAINT pk_test2 PRIMARY KEY (pkCol3) );
🔎 외부키, 외래키, 참조키, fk, 외부식별자 등으로 불린다.
🔎 FK가 정의된 테이블을 자식 테이블이라고 칭한다.
🔎 참조되는 테이블 즉, PK가 있는 테이블을 부모 테이블이라 한다.
🔎 부모테이블의 PK컬럼에 존재하는 데이터만 자식테이블에 입력할 수 있다.
🔎 부모테이블은 자식의 데이터나 테이블이 삭제된다고 영향을 받지 않는다.
🔎 참조하는 데이터 컴럼과 데이터 타입이 반드시 일치해야 한다.
🔎 참조할 수 있는 컬럼은 기본키이거나 unique만 가능하다.
(보통은 pk랑 엮는다.)
CREATE TABLE foreign_key( department_id varchar2(10), CONSTRAINT dept_fk REFERENCES departments(department_id) // 제약을 거는 이름 : dept_fk // 제약 조건 : department(department_id) name varchar2(10), // 인라인 방법 : 선언과 제약 조건이 같이 옴. salary number(10), // 컬럼이 나중에 오기 때문에 지목을 할 필요가 없음 ( 앞에서 미리 해주었기 때문) ( 인라인 방식 ) );
-> 자식 테이블인'Employees' 테이블에서 40이라는 컬럼은 부모 테이블인 'Departments' 테이블에 들어갈 수 없으므로 해당 사진은 잘 못 된 예시이다.
🔎 on delete cascade
: 참조되는 부모 테이블의 행에 대한 delete를 허용한다.
즉, 참조되는 부모 테이블 값이 삭제되면 연쇄적으로
자식 테이블 값 역시 삭제된다.
🔎 on delete set null
: 참조되는 부모테이블의 행에 대한 delete를 허용한다.
이건 cascade와 다른데, 부모테이블의 값이 삭제되면
해당 참조하는 자식테이블의 값들은 null값으로 설정된다.
<예제>
<1-1> 기본키(daddy 테이블)
<1-2> 외래키(daughter 테이블)
<2-1> 기본키(TB_TEAM 테이블)
<2-2> 외래키(TB_PLAYER 테이블)