17일 시험에는 오늘배운것들이 가장 많이 나옴
데이터베이스
- Oracle - Oracle : 상업성, 프리미엄, 기술지원
- MySql - GNU : 무료, 스타트업, 꽁짜이기 때문에 책임지는 사람이 없다.
- MSSQL - Microsoft : 유료, 쓰는 사람들만 쓴다.
DBMS는 데이터베이스를 관리하는 프로그램
하드디스크에 데이터를 저장 / 수정 / 삭제 / 조회 하는 목적의 프로그램
SQL Plus : CLI방식으로 사용하는 방법
GUI방식 : 별도 다운로드 필요 sqldeveloper
최고관리자 계정 생성
Oracle접속 우클릭 > 새접속 > 최초접속(최고관리자 계정 생성)
접속이름 : 연결의 이름 정하기
사용자 이름: system(최고관리자, 최초 접속)
비밀번호 : 오라클 생성
호스트 이름 : localhost(나 자신)
포트 : 변경할수 있지만 변경할 필요 없음
관리자접속에서 kh계정 생성
접속권한 부여 (관리자가 권한을 주지 않으면 접속 생성조차 안된다)
명령어 뒤 세미콜론에 커서를 두고 [Ctrl+ Enter] 로 실행
-- 사용자 계정을 생성하겠다.
create user kh identified by kh;
-- kh 계정에 접속 권한을 부여한다.
grant connect to kh
table 생성 해보기
creat table test(
seq number
);
-- 자원에 관련된 모든 권한
grant resource to kh;
*부여받은 계정 연결 접속 끊고 재접속해야 함
테이블 생성
create table beverage(
pid number,
pname varchar(20),
price number
);
테이블 확인
--describe 묘사하다
desc beverage;
값 추가
생성할때의 순서대로 데이터 입력
쌍따옴표(")를 사용하지 않고 따옴표(')로 문자열 표시
--오라클에서는 쌍따옴표(")쓰지 않음
insert into beverage values(1001,'Americano',2000, 'hot');
insert into beverage values(1002,'Cafe Latte',3000, null);
insert into beverage values(1003,'Espresso',2000,'yes');
insert into beverage values(1004,'Espresso',2000,'yes');
저장 결과 보기
select * from beverage;
Query 문
데이터베이스에게 요청하는 문법들 (SQL : 구조화된 쿼리 언어)
- DDL (Data Definition Language)
- 객체를 생성 / 삭제 / 수정 하는 명령 집합
- 객체는 user, table, 뷰, 트리거, ...
- (테이블 안에 insert한 값은 객체가 아니라 데이터라고 함)
- creat / drop / alter
- DML (Data Manipulation Language)
- 테이블 내의 데이터를 생성 / 삭제 / 수정 / 조회 하는 명령 집합
- insert / select / update / delete
- select를 다르게 분류하기도 함
- DCL (Data Controle Language)
- 권한 통제 명령
- grant / revoke
- TCL (Transaction Control Language)
- 트랜젝션을 관리하는 명령 집합
- rollback / commit / savepoint
값을 집어넣을때 column 개수에 맞추지 않으면
insert into beverage(1004,'Cafe Mocha');
넣는 값이 어떤 컬럼에 들어가는지 모르기 때문
컬럼은 정해서 넣어주면
insert into beverage(pid, pname) values(1004,'Cafe Mocha');
제약조건 (constraint) - 테이블 구성에서 규칙을 정하는 문법
테이블 생성하면서 제약조건 걸기
primary key(주키): 동일한 값이 2개 들어올 수 없음, not null 포함, 식별자 역할
not null : pname, price는 null 일 수 없다.
--null 값이 못오게 하는 방법
--제약조건 (constraint) - 테이블 구성에서 규칙을 정하는 문법
drop table beverage;
create table beverage(
pid number primary key,
pname varchar(20) not null,
price number not null
);
-- primary key(주키): 동일한 값이 2개 들어올 수 없음, not null 포함
-- not null : pname, price는 null 일 수 없다.
-- 테이블 삭제후, 생성하면서 제약조건 걸기
제약조건 check
오라클에는 boolean이 없음
-- 제약조건 check
create table beverage(
pid number primary key,
pname varchar(20)
unique
not null,
price number not null,
iceable varchar(5)
check (iceable in ('yes','no'))
not null
);
creat table beverage(
pid number primary key,
pname varchar(20) not null,
price number not null,
iceable varchar(5) check (iceable in ('yes','no')) not null
);
varchar() , char() 차이
variable character
- 변할 수 있는 문자
- 설정해준 문자 수보다 짧아도 조절해줌
- 수시로 재조정해준다는 것은 cpu작업(성능저하)
char
- 사이즈를 스스로 조절하지 못함
- 입력 글자 수가 적으면 빈공간을 놔둠
- cpu에 오버헤드를 주지 않음
리소스 : 자원에 대한 모든 권한
- 식별자는 아니지만 중복이 안되도록 하는 방법
- primary key는 1개만 가능
제약조건 unique
- primary key와는 달리 not null이 포함된 제약조건은 아님
- unique not null은 기능상 primary key와 같지만 의미적 차이 존재
creat table beverage(
pid number primary key,
pname varchar(20) not null,
price number not null,
iceable varchar(5) check (iceable in ('yes','no')) not null
);
DBMS dictionary table
dictionary
- 객체의 생성 / 수정 / 삭제나
- 사용자의 특정 행동들에 의해 발생하는 메타데이터를
- 보관하는 오라클 시스템 테이블
select * from user_tables;
select * from user_constraints;
COSTRAINT_NAME 제약조건 이름 정하기
명명규칙은 따로 없음
creat table beverage(
pid number constraint beverage_pk primary key,
pname varchar(20) unique not null,
price number not null,
iceable varchar(5) check (iceable in ('yes','no')) not null
);
select * from user_tables;
select * from user_constraints;
CONSTRANINT_TYPE
c : check , not null
u : unique
p : primary key
creat table beverage(
pid number constraint beverage_pk primary key,
pname varchar(20)
constraint pname_uq unique
constraint pname_nn not null,
price number not null,
iceable varchar(5)
constraint iceable_check check (iceable in ('yes','no'))
constraint iceable_nn not null
);
예제
--테이블 이름 : members
--컬럼 1 : id 문자열 주키 설정
--컬럼 2 : pw 문자열 비울 수 없음
--컬럼 3 : name 문자열 비울 수 없음
--컬럼 4 : gender '남' 또는 '여'만 입력 가능
create table members(
id varchar(20) constraint members_pk primary key,
pw varchar(20) constraint pw_nn not null,
name varchar(20) constraint name_nn not null,
gender varchar(5) constraint gender_check check (gender in ('남','여'))
);
select * from members;
insert into members values('Tom','1234','Tom','남');
drop table members;
drop table trade_history;
참조무결성 , references
다른 테이블에 존재하는 항목만 등록 가능 (멤버테이블 id가 있는 사람만 거래내역 테이블에 추가되도록)
프라이머리키 또는 유니크 제한조건을 가진 컬럼만 외래키의 대상이 돌 수 있음
부모테이블 자식테이블
create table trade_history(
trade_no number primary key,
buyer_id varchar(20) references members(id),
pname varchar(50) not null,
trade_date timestamp
);
insert into trade_history values(1, 'Tom', 'Notebook',sysdate);
timestamp : 날짜 자료형
외래키 설정이 들어가면 개발단계에서는 테스트를 하기 어려움
ex. 회원탈퇴 기능에서 'Tom'을 삭제하려한다면?
설계도에는 외래키 설정이 들어가도 외래키 설정은 테스트 후에 마지막에 적용
외래키의 확장 문법
on delete cascade : 지우려고 시도할때 연쇄적으로 삭제
create table trade_history(
trade_no number primary key,
buyer_id varchar(20) references members(id) on delete cascade,
pname varchar(50) not null,
trade_date timestamp
);
delete from members;
select * from members;
select * from trade_history;
on delete set null : 상위키를 지우면 하위키의 아이디값만 사라짐
create table trade_history(
trade_no number primary key,
buyer_id varchar(20) references members(id) on delete set null,
pname varchar(50) not null,
trade_date timestamp
);
delete from members;
select * from members;
select * from trade_history;