본문 바로가기

DataBase/DBMS

(20)
13.트렌젝션(TRANSACTION) 트렌젝션의 대상 : DML (insert, update, delete) 이다 트렌젝션이 필요한 이유? -전체 일처리가 완결 되어야 의미가 있는 작업 (하나라도 오류가 나면 무너지는 경우) → so, 전체 성공(완결) : commit; 도중 둘중하나라도 실패 : rollback ex) 은행의 계좌이체 : 1.내 통장에서 돈이 빠져나가야 된다 2.상대방 통장에 돈이 입금이 되어야 한다 -> 1, 2번이 둘 다 완결되어야 업무 로직이 완성이 된다 but 둘 중 하나라도 실패하면 일 전체가 실패, 둘 다 성공해야지 성공 주의!! 자바 프로그램과 연동해서 사용할 때, JDBC 이용시는 (AUTO커밋있음) DB에서 개별적으로 insert 한 후에는 반드시 commit을 해주어야한다. 예시 1.테이블 생성 2.데이터..
12-3.시퀀스 (SEQUENCE) CREATE SEQUENCE 시퀀스이름; (DEFAULT 시퀀스값 : 1) CREATE SEQUENCE 시퀀스이름 START WITH 290 INCREMENT BY 10; (290부터 10씩 증가) 시퀀스.CURRVAL :현재 시퀀스 값을 볼 수 있다 (SELECT 시퀀스.CURRVAL FROM DUAL) 시퀀스.NEXTVAL : 주어진 증감 만큼 변화하도록 (기본 DEFAULT 1) RELEASE 할 때, -SEQUENCE를 새로 설정해서 하거나(1부터 시작하기위해) -연결해서 하고싶을 경우에는 ROW의 갯수 COUNT하여 +1 하면서 EX) 게시판 번호, 글 번호 같은 것들 시퀀스 보충 주의! 시퀀스 값은 수정하거나 처음부터 다시 할 수 없어서 DROP 해야한다. 어디에서 쓸 때 마다 NEXTVAL은..
12-2.뷰(View) Why 뷰? 1. 과도한 join을 회피 (쿼리문의 복잡함을 막아준다) 2. 보안이 필요한 row에 대한 예민한 데이터 커버? (다른 부서의 보안이 필요한 정보를 오픈하지 않고 권한이 있는 사람에게만 오픈할 수 있도록) ⇒나중에 정규화를 배운다 (세포 분열하듯이 테이블을 쪼갠다) →그러면 과도하게 조인해서 데이터를 가져와야한다 =⇒정규화를 하면 할 수록 테이블은 쪼개지고 과도하게 조인을 해야되고 쿼리문이 길어진다 어떤 데이터 결과를 찾아내기 위해서 여러테이블을 join해서 사용해야한다. but 계속 반복되는 쿼리문을 하나의 창문에 넣어서 필요할 때 view를 이용해서 사용하자. 하나의 통일된 view ex) 여러테이블끼리 join을 사용한 복잡하고 긴 쿼리문이 반복적으로 사용될 때 view에 저장해서 사..
12-1.인덱스 Why 인덱스? : FULL SCAN 안 하도록 하자!!!! - 성능 향상 (B*tree 구조) - 일정한 검색 속도를 유지 시켜준다 (자동으로 b*tree 형태로 균형화 하기 때문에) (-primary 키만 생성해줘도 기본적인 index는 생성이 된다 또 다른 컬럼에 대해서도 인덱스 생성 가능!!) : 컬럼 속에 있는 레코드 하나하나에 인덱스를 하나 만들어줘서 각각의 값에 대하여 해당하는 ROWID값에 다 주소값을 만들어놓는다 인덱스 생성 방법 CREATE INDEX 테이블이름_인덱싱하고자는컬럼명_idx on 테이블이름(컬럼명); CREATE TABLE BOARD( SEQ NUMBER PRIMARY KEY, TITLE VARCHAR2(50), WRITER VARCHAR2(50), CONTENTS VAR..
11. 서브쿼리(하위 질의문) : SQL의 꽃2 (WHERE절, HAVING절, FROM절-n-tier) 서브쿼리 작성 순서 1. 서브쿼리문 먼저 작성 2. 메인쿼리문 작성 ex) SELECT 컬럼명 FROM 테이블명 WHERE 컬럼 연산자 (서브 쿼리) SELECT 컬럼명 FROM 테이블명 GROUP BY 컬럼명 having 컬럼 연산자 (서브쿼리) SELECT ROWNUM, ALIAS.컬럼명 FROM (서브쿼리) ALIAS WHERE ROWNUM 조건절 (인덱스라 생각하고 범위설정) -SELECT LAST_NAME, SALARY FROM EMPLOYEES WHERE SALARY>(SELECT AVG(SALARY) FROM EMPLOYEES) -select dno from emp group by dno Having AVG(SAL)=(SELECT MAX(AVG(sal)) from emp GROUP BY dn..
10. JOIN(조인) : SQL의 꽃1 (조인, ANSI조인) JOIN 하는 이유 : -지금까지는 하나의 테이블 안에 있는 데이터를 가져왔었다. -2개 이상의 테이블에서 데이터를 검색하기 위해서 ex) 'king'의 부서이름을 구하여라 select employee_id, department_id from employees where last_name='King'; → 부서번호까지 구했다 (부서번호를 이용해 departments 테이블에서 부서이름을 가져와야한다) select department_id, department_name from departments where department_id in (80,90); JOIN 사용 방법 TIP (순서) 1. 내가 원하는 데이터가 무엇인지??(컬럼 목록 정의) (처음에 어느 테이블에 있는지 신경쓰지 말고) 2. 원하는 ..
9-2. 두개의 컬럼을 묶어서 PK 설정, 하나의 컬럼에 두가지 제약조건 설정 - 두 컬럼의 값이 둘 다 같이 중복이 되어야지 중복된 걸로 인지 CREATE TABLE EMP10( EMPNO NUMBER, ENAME VARCHAR2(20), JOB VARCHAR2(20), DEPTNO NUMBER, LOC VARCHAR2(20) DEFAULT 'SEOUL' ); ALTER TABLE EMP10 ADD CONSTRAINT EMP10_EMPNO_ENAME_PK PRIMARY KEY(EMPNO,ENAME); INSERT INTO EMP10(EMPNO,ENAME,JOB,DEPTNO) VALUES(100,'LEE','IT',30); INSERT INTO EMP10(EMPNO,ENAME,JOB,DEPTNO) VALUES(100,'PARK','IT',30); - 두가지 제약 조건 설정 (UNI..
9-1. 제약조건 삭제시 (PK의 경우, FK고려해야함) -제약조건 삭제(ALTER -DROP) ALTER TABLE 테이블명 DROP CONSTRAINT 제약조건이름; ALTER TABLE EMP DROP CONSTRAINT EMP_EMPNO_PK; 만약 PK를 삭제하려고하는데 FK에 PK를 참조하고 있다면 무결성 유지할 수 없기때문에,(3가지 중에 적합한 방법으로) 1. FK에 있는 PK를 참조하는 데이터 삭제 2. FK 제약조건을 삭제 3. 테이블을 만들 때 컬럼명 데이터형 REFERENCES 참조테이블(참조컬럼명) ON DELETE CASCADE 를 해주면, PK 삭제시 참조하고있는 FK의 데이터도 같이 삭제된다. 그래서 FOREIGN KEY 생성할때 아래 옵션 추가하면 가능 ON DELETE CASCADE 옵션을 주면 부모테이블의 데이터가 지워지면 자..