RDBMS

210810(화) DB SQL 기초 2일차 - Oracle, sql developer 설치 / 방화벽 / CRUD / 트랜잭션

구름이팡팡 2021. 8. 10. 14:54
728x90

 

관리자 계정

sqlplus -> system 로그인 (system/oracle)

conn hr/hr;

이런식으로 사용자계정으로 들어가려면 conn c##java/bit

 

<설치 추가 내용>

※ 정상작동 확인법

 

시작 제어판 시스템 및 보안 관리도구 서비스

PC 우클릭 관리 서비스

OracleServiceXE 시작됨 자동 -> 실행중

OracleOraDB18Home1TNSListener 시작됨 자동 -> 실행중 (데이터를 db와 밖으로 실어나르는)

 

둘다 실행되어있어야 정상작동한다 

 

※  Listener 확인

: 2개의 파일에서 [HOST = pc이름][PORT = 1521] 확인한다

-> 그래서 컴퓨터이름을 바꿔버리면 오라클 죽음 여기서 바꿔주면 괜찮나?!

 

C:\app\bitcamp\product\18.0.0\dbhomeXE\network\admin

 

- listener.ora (서버)

: 클라이언트가 오라클 서버에 접속하기 위해서 서버 컴퓨터에 하는 설정

- tnsnames.ora (클라이언트)

: 클라이언트에서 오라클 서버에 접속할 때 필요한 설정

 

<방화벽>

다열면 위험하니까 1521번 포트만 열어두는 것

 

네트워크>우클릭>속성>


- 필드(=아이템)들이 모여서 1행(레코드)를 만들고

레코드들이 모여서 테이블을 만든다

 

<테이블 생성>

cf) 주석표시 : --

create table 테이블명(필드명 필드타입, 필드명 필드타입,...);

: 테이블명, 필드명 한글 가능

 

1.

create table 연산(

x int, -- 고정형, int는 소수이하 자른다(반올림 된다)

y number, -- 가변형, number는 소수이하 놔둔다

=>가변형: 메모리를 회수해감?!

z number(10,3));

cf) 변수명/자료형 자리 자바랑 반대

number 타입()<= 소수점 지정 가능, 넘버는 정수 실수 모두 가능~!!

 

2. SQL> select * from tab; --테이블보기

 

3. SQL> desc 연산; --자료형을 보여준다

 

create table dbtest(

name varchar2(15), -- char(고정형), varchar2(가변형)

age number,

height number(10,2),

logtime date);

 

 

Enterprise 한글 1= 2byte

Express 한글 1= 3byte


<레코드 추가>

: insert는 임시 저장이고         => 오라클은 insert, update, delete lock이 걸려있다

commit; 을 해야지 DB에 업데이트된다

 

 

insert into 테이블명(필드명,...) values(,...);

insert into 테이블명 values(,...); 테이블의 필드순서가 일치하면 필드명은 생략가능

 

[연습문제]

insert into 연산(x, y, z) values(25, 36, 12.34567);

insert into 연산(x, y, z) values(25.34567, 36.34567, 12.34567);

insert into 연산(x, y) values(25.666, 36.88888); <- 정수형이니까 26으로 반올림, 없는 값은 null로 비워둘 수 있다

insert into 연산(z,y,x) values(1, 2, 3); -- 순서가 바뀌어도 된다

insert into 연산 values(25, 36, 12.34567); -- 필드명 생략 가능하게 되면 필드를 빠짐없이 순서대로 입력해야한다

insert into 연산 values(25, 36, 1234567.3456); -- 유효숫자는 최대7자리

insert into 연산 values(25, 36, 12345678.3456); -- 유효숫자 7자리보다 크므로 error

---------------------------------------------

insert into dbtest(name,age,height,logtime) values('홍길동',25,185.567,sysdate);

insert into dbtest(name,age,height,logtime) values('Hong',30,175.56,sysdate);

insert into dbtest(name,age) values('희동이',3);

insert into dbtest(name, height) values('홍당무', 168.89);

insert into dbtest values('분홍신',5,123.5,sysdate);

insert into dbtest(name) values('진분홍');

 

cf) CRUD: insert, select, update, delete

 

<트랜잭션>

: commit을 하기 전까지의 모든 명령어

 

오라클은 insert, update, deletelock이 걸려있다

commit - 갱신 -> commit; 명령어 하면 됨.

rollback(트랜잭션 단위로 적용)

- 취소

- commit한 직후의 시점으로 돌아간다

- 현재 트랜잭션이 취소된다.


<레코드 추출>

:레코드를 읽어낸다. 젤 중요~!

데이터를 빠르고 정확하기 검색하는 것 중요!

 

select 필드, 필드,.. from 테이블명;

select * from 테이블명;  => *(와일드카드)로 대체!!

select * from 테이블명 order by 필드명 asc; 오름차순(asc는 생략가능)

select * from 테이블명 order by 필드명 desc; 내림차순

 

select * from 테이블명 order by 필드명 asc, 필드명 desc;

첫번째 필드에 똑같은 데이터가 존재하면 두번째 필드로 정렬한다.

 

select * from 테이블명 where 조건;

 

select name, age from dbtest;

select * from dbtest;

select * from dbtest where name='홍길동';

select * from dbtest where name like '%';

select * from dbtest where name like '_%';

select * from dbtest where name like '__%';

select * from dbtest where name='hong'; -- 데이터는 대소문자 가린다

select * from dbtest where lower(name) = 'hong'; -- upper() 대문자

select * from dbtest where name like '%%' and age<20;

select * from dbtest where age is null;

select * from dbtest where age is not null;

 

cf) 순서 존재! order 절은 항상 뒤에!! where절이 오더 뒤에 올 수 없음~!!!

 

 

<레코드 수정>

update 테이블명 set 수정할 내용 where 조건

update dbtest set age=0 where name='홍당무';

update dbtest set age=0, height=0 where name='진분홍';

update dbtest set age=age+1;

update dbtest set age=age+1 where name='홍길동';


레코드삭제 : delete

테이블삭제 : drop

<레코드 삭제>

delete 테이블명; 모든 레코드 삭제

delete 테이블명 where 조건;

 

<테이블 삭제> - rollback 불가

cf) rollback 은 insert, select, delete만 가능!  => flashback으로 살려내야 함.

 

drop table 테이블명;

 

- drop table 테이블명 purge; 휴지통을 거치지 않고 바로 삭제

- flashback table 테이블명 to before drop; 복원

- purge recyclebin; 휴지통비우기

- select * from recyclebin; 휴지통에 테이블 정보 검색

- show recyclebin; -> 좀더 간단한 휴지통에 테이블 정보 줌

728x90