210810(화) DB SQL 기초 2일차 - Oracle, sql developer 설치 / 방화벽 / CRUD / 트랜잭션
sqlplus -> system 로그인 (system/oracle)
이런식으로 사용자계정으로 들어가려면 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, delete에 lock이 걸려있다
① 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; -> 좀더 간단한 휴지통에 테이블 정보 줌