본문 바로가기

Oracle

(101)
SQL 제약 (5) Foreign Key (자식키) 특정컬럼에 지정된 데이터만 허용할때 그 지정된 데이터가 다른 테이블의 데이터를 참조하는 경우 허용하는 제약이다. foreign key 제약을 걸려면 참조하려는 테이블에 primary key 제약이 걸려있어야 걸린다. 따라서 만약 dept 를 참조해서 emp 를 데이터를 입력하게 된다면 dept 에 primary key 를 걸어 (부모 테이블) 로 만들고 emp에 foreign key 를 걸어 (자식 테이블) 로 생성이 가능하다. 자식테이블에는 함부로 데이터를 insert 를 할 수 없고 부모 테이블에는 함부로 데이터를 delete 를 할 수 없다. ex ) dept 테이블의 dpetno 에 pk 제약을 걸고 emp 테이블의 deptno fk 제약을 걸게 되면 앞으로 emp 테이블의 deptno 에 데이터..
SQL (4) 제약 CHECK 특정 컬럼에 지정된 데이터만 입력 될 수 있도록 제한 하는방법 예제 월급이 0~9000 사이로만 입력되게 CHECK 제약 거시오 alter table emp add constrAInt emp_sal_ck check(sal between 0 and 9000); 체크 제약이 걸린후 확인을 해보자~ update emp set sal =9500 where ename = 'KING'; →9500 은 9000 이상이라 제약조건에 위배되어 수정되지 않았다. 문제 576 emp14 table 에 체크 제약을 걸어라 (@ 이가 포함되지않으면 데이터가 입력되지않게) ALTER TABLE EMP14 add constraint emp14_email_ck check(email like'%@%'); 다시 제약조건 삭제하기 alt..
SQL (3) 제약 NOT NULL 제약 NULL 값데이터 ————> 결측치 데이터 분석시 데이터 전처리시에 반드시 확인해야하는 2가지 데이터가 있는데 결측치 이상치 NOT NULL 제약 거는방법 2가지 1. 테이블 생성시 제약 거는방법 create table emp407 (empno number(10) constraint emp407_empno_mm not null, ename varchar2(10)); 2. 만들어진 테이블에 제약 거는방법 alter table 테이블명 modify 컬럼명 constraint 제약이름 제약명 ; alter table dept modify dname constraint dept_dname_nn not null; → 기존 pk, un 와 다른 점은 add 가 아니라 modify 를 쓴다는 것. 만약 제약을 삭제한..
SQL (2) 제약 UNIQUE 중복된 데이터를 허용하지 않는 제약 unique 제약을 걸게 되면 자동으로 unique 인덱스가 생성된다. 제약 방법 2가지 1. 테이블을 생성할때 제약을 걸면서 생성하는 방법 create table dept701 (deptno number(10), loc varchar2(20) constraint dept701_loc_un unique, dnamd varchar2(20)); 2. 만들어진 테이블에 제약을 거는 방법 alter table dept add constraint dept_loc_un unique(loc); → dept 테이블 loc 에 unique 제약을 걸었다. alter table emp add constraint emp_name_un unique(ename); → emp 테이블 ename..
SQL (1) 제약 Primary key 제약의 종류 5가지 primart key : 중복된 데이터와 null 값이 입력되지 못하게 하는 제약 unique : 중복된데이터를 입력하지 못하게 하는 제약 not null : null 값을 입력하지 못하게 하는 제약 check : 정의한 데이터만 입력또한 수정 되게 하는 제약 foreign key : 참조하는 컬럼에 거는 제약 데이터의 품질을 높이기 위해 중복된 데이터와 null 값을 입력할 수 없도록 컬럼에 제약을 걸어주는것 데이터 분석을 할때 정제 작업에 거의 80% 이상을 사용한다. 정제작업 코딩을 못하면 상당한 힘든일이라, 인내를 가지고 작업을 해야한다. 그러나 코딩을 잘하면 쉽고 재밌게 할 수 있다. 데이터를 처음부터 정제를 잘 하면 나중의 정제작업의 시간을 줄일 수 있다. 이러한 상황을 위..
SQL - FLASHBACK Transaction Query (수행된 DML문의 거꾸로 돌리는 DML 문장 출력 쿼리) 그동안 특정 테이블에 어떠한 작업들이 일어났는지 그 dml 문들을 거꾸로 되돌리는 dml문장이출력되는 쿼리문 이다. 가능한 버전은 enterprise edition 내가쓰는 오라클 버전 확인하기 select * from v$version; 예전에 insert 작업을 수행했다면 insert into emp(empno, ename, sal) values(1234,'AAAA',3000) ; 그다음 트랜잭션 쿼리를 쓰게 되면 다음과 같은 문장이 결과로 나온다. delete from emp where empno =1234; 현업은 잘 안쓴다.
SQL - Flashback Version Query (데이터 변경내역 이력 확인) 특정테이블의 데이터가 그동안 어떻게 변경되어 왔는지 그 이력정보를 확인할때 사용하는기능 9:48 ~ 지금현재까지의 EMP table 의 변경을 확인하는 쿼리 select ename, sal, job, versions_operation from emp versions between timestamp to_timestamp('21/11/29 09:48:16', 'RR/MM/DD HH24:MI:SS') AND MAXVALUE where ename = 'KING' order by versions_starttime nulls first; → MAXVLAUE = 현재시간 → versions_operation 의 u 는 update , d 는 delete 이다. 십분전으로 복구!할것 alter table emp en..
SQL - Flashback DROP 된 데이터 복구 (인덱스도 함께 복구) DROP 시킨 데이터 복구 하기 CREATE INDEX EMP_SAL_IDX ON EMP(SAL); → 해당 테이블은 인덱스가 존재한 상태 DROP TABLE EMP; → 테이블을 drop 시킴. 1. 휴지통속 emp 테이블 확인 ( 삭제된 인덱스 이름들 꼭 복사해놓기) select object_name, original_name, droptime from user_recyclebin; → 확인해보면 emp 테이블과 연관된 인덱스들도 같이 휴지통으로 들어간다. → index 이름이 뭐였는지 original_name 에 있는 이름을 잘 확인해야한다.(어디 복사해놓아야함!!!!) 2. 휴지통속에있는 테이블을 밖으로 복원하는 명령어 FLASHBACK table emp to before drop; → drop ..