-DB구조를 정의할 때
-구조를 가지고 있는 객체 ← 객체의 구조를 정의할때 생성 수정 삭제
-테이블 : 데이터저장 기본 단위 행, 열 구성
-뷰 : 데이터 엑세스 제한해서 봄 부분적으로 봄
-시퀀스 : 숫자 값 생성기로 일련번호, pk 만들 때 자주사용
-인덱스 : 검색속도 향상
-동의어 : 객체에 동일이름 제공
DB 구현 : 1. create 테이블 생성 2. insert 데이터 삽입 3. commit 저장
-테이블 생성
-creat table table_name (column선언 number(2));
-> table created.
DD 와 TABLE을 각각 저장. 저장하면 DD가 갱신
-데이터정보가 바뀌면 DD가 갱신됨. 트랜잭션은 I/O의 최소화해주는 작업
-CHAR(SIZE) - 고정길이
CHAR(5) 'AAA' 일 때 CHAR(저장공간) 공간이 정해져있어서 그 만들어진 공간을 사용, 남은 공간은 사용할 수 없다. 성능↑ 공간활용도↓ 사이즈 결정할 때 주의!! 실제 입력이 될 데이터보다 20% 더 큰 사이즈로 만드는 것이 최적!!
공간 낭비 최소화 하기위해 DB의 확장성 때문
-VARCHAR2(사이즈) - 가변길이 디스크 I/O 최소화
VARCHAR2(5) 입력된 데이터에 따라 공간을 맞춤 / 성능↓ 공간활용도↑
-NUMBER : 음수,0,양수 모두가능가변성이 너무 커서 잘 안쓴다
-NUMBER(P)-정수자리만
-NUMBER(P,S)-소수점 표현됨 가장많이씀
-DATE 운영체제마다 날짜 포맷이 결정됨
-TIMESTAMP 년 월 일 시간 분 초 EX) HIRE_DATE TIMESTAMP
✔long~bfile 사이즈가 큰 데이터로 멀티미디어 데이터 (이미지성 등)
✔BLOB 주로 이미지 데이터, 최대 4GB
✔ROWID : 인덱스가 주로 사용함
delete DML 명령문 행 삭제 저장공간 남음 복구시 rollback으로 취소
truncate DDL 테이블의 전체 데이터, 행 삭제 행 where절 없음
저장된 공간 삭제되고 테이블정보 저장공간은 남김 => 효용 테이블을 만들었을 때 형태로 만들어줌 복구 불가
drop DDL 행, 테이블 정보 모든정보도 삭제 복구 불가
drop, truncate ->> auto commit 실행과 동시에 저장이 됨
-테이블의 데이터 무결성을 보장하기 위한 조건
-컬럼별로 설치 (조건 부여)
-한개의 컬럼에 여러개 제약조건 부여 가능
-종속된 테이블 삭제 방지
-NOT NULL : 반드시 값이 있어야함 ex)이름
-UNIQUE : 널값은 허용하나 실제값에 대해서는 중복 허용x
-PK : not null, unique 테이블에 1개의 pk 지정되어야됨!
-FK : 다른테이블에 있는 컬럼을 참조할 때 있어야됨! 참조대상 컬럼에 pk와 unique가 지정되어있어야됨
-check : 사용자 정의 제약 조건 ex) check(column in(10,20,30))
-제약조건에 이름 지정 안하면 오라클 서버가 sys_001과 같이 임의의 이름이 생성됨 ->관리힘듦
-create table 함께 생성하거나 alter table로 추가
-DD에서 확인가능
-constraint 절 사용
-references : 관계테이블 설정 - 참조대상 지정해주는 절, 참조할 테이블 이름과 컬럼이름을 명시해줘야됨! --->테이블이름(컬럼이름)
create 컬럼 나열 후 제약조건 명령문을 포함 시키면 됨
create table dept
(did number(5), dname char(10),
constraint dept_did_pk primary key(did)
);
//table level에서의 선언 : 컬럼을 먼저 선언 후 별도로 제약조건 선언
설치할 컬럼의 이름이 마지막에 명시
**PK, UK, FK, CK 제약조건만 가능**
create table dept
(did number(5)constraint dept_did_pk primary key(did),
dname char(10)
);
// column level에서의 선언 : 컬럼과 제약조건을 같이 명시, 컬럼이 앞에 명시됨
**PK, UK, FK, CK, NN 제약조건 가능**
create table dept
(did number(5)
dname char(10) not null,
loc char(10),
constraint dept_did_pk primary key(did)
);
//PK, CK, UK, FK 제약조건은 제약조건 이름을 부여해서테이블레벨로 선언을 많이 사용함
NOT NULL은 이름없이 컬럼과 같이 선언 -> 시스템임의 이름 생성 SYS_001
NOT NULL은 바로 NOT NULL을 쓰도록 하자!
drop table test cascade constraints;
//drop 하는 이유 위에서 부터 차례로 계속 실행이 되는데, 실행할때마다 반복되기 때문!
//아래에서 테이블을 생성해줬기 때문
//cascade는 두 관계 테이블을 끊음
drop table test1 cascade constraints;
create table test // 테이블 생성시 테이블이름 - 컬럼 - 컬럼별 - 데이터타입
(a number(3),
b number(3) not null,
constraint test_a_pk primary key(a) // 제약조건_제약이름_유형(컬럼이름)
);
create table test1
(c number(3),
d number(3) not null,
e number(3),
a number(3),
constraint test1_c_pk primary key(c),
constraint test1_e_ck check(e in(0,1)),
constraint test1_a_fk foreign key(a) references test(a)
);
.sql 확장자 파일 : 스크립트파일
경로 : C:\oraclexe\app\oracle\product\11.2.0\server\bin
동시에 여러개의 명령문 저장 가능. 문장 끝에;
save 이름.sql
불러내기 -> @이름.sql 엔터
if 조건식() { true 일때 실행될 코드 }
( )의 결과값이 논리형if 문 조건식이 true일때 실행, false일때 빠져나감
if else문 조건식이 t일때 실행, f일때 else t에 해당하지 않는 부분이 넘어옴
-조건식에 && 로 조건 두 개 이상 줄 수 있음 전부 true일 때 실행문 ~!
-쓰일 변수를 만들어서 조건식에 넣어도 됨 논리형 변수로!
boolean a = (b+c+d+f) >= 60; boolean a1 = b>=8 && c>=8 && d>=8;
-곱하는 최소값이 소수점이면 자동형변환이 되어 실수형으로 됨, 그럴때는 앞에 수동형변환으로 (int) 를 붙여주자
-if문만 썼을때는 하나하나 위에서부터 아래로 검사하기때문에 조건식을 다 작성해줘야함, 효율떨어짐
switch문
-break 자기를 감싸는 중괄호를 빠져나간다. 마지막엔 안써도됨
-case는 값이 들어감 딱 떨어지는 정확한 결과값~!
-default : 기본값이라고 하며, 케이스 값이 모두 해당되지 않을때 이외의 값일 때 구문
-if 와 차이 : 범위비교 x 비교연산자x 식 쓰는것은 가능하다. 식만 !! ex) num%2 값이 딱 떨어질 때 사용, if는 범위설정
-값으로 바로 넘어가기 때문에 속도가 조금 더 빠르지만 크게 차이가 없다!
//num 값이 1이면 안녕하세요
//2이면 잘가세요
//3이면 반갑습니다
//4이면 또만나요
//그외 또만나요
int num = 1;
switch(num) {
case 1:
System.out.println("안녕하세요");
break; // 속한 중괄호 밖으로 빠져나가기
case 2:
System.out.println("잘가세요");
break;
case 3:
System.out.println("반갑습니다");
break;
default:
System.out.println("또만나요");
break; // 아래구문이 없어서 안써도 됨
}