데이터베이스가 나오기 이전에는 파일시스템이 존재함
데이터베이스는 여러명이 들어가서 동시에 사용 가능함
(데이터베이스가 나오기 전 )파일 시스템은 : 둘이상 접근 불가능
오라클 - 자바 배포하는 회사 , 오라클 회사에서 제일 잘 팔리는거 Oracle(DE), MySQL도 팜
ROB : 관계형데이터베이스
Documnet : 문서형데이터베이스
관계형이라는 이름을 가지고 있으면 다 고만고만하다 (Rleational)
오라클이랑 마이sql 배우는데 당장은 오라클만 배운대요
https://www.oracle.com/datavase/technologies/xe-prior-release-downloads.html
접속한 뒤 다운로드, 알집풀기
exe파일 실행
-계정이름은 정해져있고
비밀번호만 설정하는 창
오라클 run실행
conn 입력 (커넥션 약자)
system 입력
패스워드에서 숫자 1 4번 후 엔터(초기에 설정한 비밀번호)
connected 뜨면 성공
show user 명령어 입력
user is system 뜸
명령프롬프트 와서 sqlplus 입력 (sqlplus.exe를 실행하겠다는 명령어)
그럼 유저이름 물어봄
아이디 system
비번 1111
gdj파일에 sqlplus없는데 실행될 수 있는 이유 >> 환경변수를 설정해서(path)
자바는 환경변수 설정해줘야하는데 sql는 자동으로 설정됨
path설정의 뜻 : 요 폴더에 저장된 모든 파일들은 어디서든 실행할 수 있다
오라홈 : 오라클이 설치된 디렉터리 (C:\oraclexe\app\oracle\product\11.2.0\server)
(bin폴더로 path 설정 해주어야함)
자바홈 : 자바가 설치된 디렉터리
경로 확인
conn 아이디 하면 바로 비번 치고 연결 가능
conn 아이디/비번 --> 보안은 개나 준 방법(비번 보여서)
sql은 오늘만 한다
비번 모를 때 sys계정으로 접속하는 방법 ↓
"as SYSDBA" 그대로 쓰면 됨
명령어 입력 : conn sys /as sysdba
입력하면 패스워드 입력하라고 나옴
명령프롬프트 exit 하면 현재 실행중인 파일 종료(sqlplus)
종로된 상태에서
sqlplus / assysdba
입력
DB 사용할려면 접속을 먼저 해야함
system계정으로 접속하는건 dba들이라고 함. 데이터베이스관리자들.
개발자들은 system 계정으로 접속 X
dba들이 개발자들한테 사용자계정 하나 만들어줌
사용자계정을 만들 때 생성과 권한 작업을 수행해주어야함. (이 작업은 아무나 하는게 아니고 관리자만 할 수 있음)
DB는 쿼리문과의 싸움
사용자 쿼리문 만드는 명령어
CREATE USER USER1 IDENTIFIED BY 1111; (*정해진 구문)
(BY 뒤에는 비번설정)
(★관리자가 내릴 수 있는 쿼리문임)
끝에 ; 해주기
-> 성공티비~
Structured
Query
Language
-> SQL 약어
생성자 만든 후 user1에 접속해보기
실패. 권한이 없어서
권한 종류 - 읽어볼 숭 ㅣㅅ는 사람, 데이터객체를 만ㄴ들수잇는사람, 다할 수 있는 사람.
현재 user1 계정은 어떠한 권한도 없음
그래서 권한 설정해주어야함
접속실패하면 로그인이 풀림
그래서 다시 system 으로 접속해주어야함
권한 부여하는 쿼리문
GRANT CONNECT TO USER1;
(*쿼리 끝나면 세미콜론(;)해주기)
성공.
커넥트 권한 안주면 접속 안됨
접속권한만 준 경우 - 뭘 못 만들음
crate table a_tbl (NO NUMVER); -- (모두 대문자, 언더스코어 사용가능)
TABLE이라는 객체를 만드는 초간단 쿼리임
현재 접속 권한만 가지고 있는 상태. 만드는 능력이 없어서 엔터를 누르면 오류남(실패)
RESOURCE 권한이 있는 상태에서 사용할 수 있는 쿼리문
권한 회수하는 법 (시스템만 할 수 있음-시스템으로 접속하기)
REVOKE CONNECT FROM USER1
: USER1으로부터 권한 회수하겠다는 뜻
현재 USER1, 2
권한주는 쿼리문
GRANT RESOURCETO USER1;
(커넥 권한이 있어야 이 권한을 줄 수 있음)
GRANT CONNECT, RESOURCE TO USER1;
:한꺼번에 해결하는 쿼리문
성공
접속도 할 수 있고 , 데이터베이스 자원을 맘대로 사용가능
일반적인 개발자는 보통 이 권한들을 가지고 있음
CREATE반댓말이 DROP임
DROP USER - 유저 삭제
DROP TABLE - 테이블 삭제
USER1에서 접속한 상태에서 USER1 삭제 불가능
DROP을위해서 SYSTEM 접속해야함
SYSTME 접속 후 삭제 시도. 오류남.
USER1에는 테이블이 있는데 이것도 함께 제거할거면 CASCADE 명령어 추가!
DROP USER USER1 CASCADE;
테이블이랑 유저 같이 삭제함
테이블 드랍은 해당 유저로 접속해서 삭제해야함
-시스템에서 접속한 상태로 드랍테이블하니까 오류남
접속배움
사용자 생성, 삭제 배움 (테이블여부에따라서 삭제)
사용자 권한 부여 / 회수
권한
관리자가 또 다른 관리자를 만드는 방법
GRANT DBA TO USER1
관리자 권한 부여
관리자 계정권한(DBA)을 받으면
접속 그냥 되고 테이블도 그냥 만들 수 있고 유저도 만들 수 있음
SYSTEM 계정에는 테이블 만들면 안됨
SELECT TABLE_NAME FROM DBA_TABLES;
테이블의 이름을 확인하고 갯수를 확인하는 명령어
오후 SQL의 디벨롭더 다운로드 할거임
https://www.oracle.com/tools/downloads/sqldev-downloads-2041.html
첫번째는 자바 1.8 포함
현재 컴은 자바 11이라 2번째꺼 다운
SQL의 디벨롭더는 자바 설치 안해놓으면 안돌아감
DB 누구에게 무슨 권한 무슨 권한 줄 수 있음
오라클 관리자 계정 1. sys 2. system (sys안에 system있음)
as sysdba 관리자
as stsoper 사용자
데이터베이스에선 카멜페이스 네이밍이 없음-내부에서 대소문자 구분이 안됨. 밑줄로 단어 연결하기
conn scott/TIGER
conn SCOTT/TIGER
Data가 있으면 그 데이터를 설명하기 위한 데이터를 meta라고 함
1. 데이터딕션어리 System Catalog = Data Dictionary
2. 데이터 사전의 종류
-DBA : 데이터베이스 전체에 포함된 모든 객체에 대한 정보
-USER : 자신이 생성한 모든 객체에 대한 정보
-ALL_ : 자신이 생성한 모든 객체+다른 사용자가 생성한 객체 정보 중 볼 수 있는
dba_users
DESC dba_users (DESC : 디스크라이브 줄임말)
-> dba_users의 데이터 컬럼을 조회
표에서 열을 '칼럼'이라고 함
SELECT USERNAME FROM DBA_USERS; : DBA의 테이블로부터 USERNAME을 보여달라는 명령어
→응답 확인
수업에서 사용할 계정 : 활성화
SCOTT, HR
RDB 기본용어 - 이론
RDB 키(KEY) - 이론
RDB 모델링 - 이론
RDB 오브젝트 생성 - 이론/실습
DDL 데이터 정의어
정규화 - 이론
쿼리문 실습
-오라클데이터베이스를 배포할 때 미리 만들어 둔 계정
경로 : C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin
에서 scott.sql 메모장 찾기 -쿼리문 적혀있는거임
경로 복사한 후
Run sqlcommad 들어가서
@경로\파일명(scott.sql)입력
show user(현재사용자) 명령어 입력
user가 soctt으로 된거 확인하기
왜 soctt이나면 쿼리문에 유저를 scott으로 바꾸는게 있었기 때문임 ~
-단점 : 구조가 복잡해질수록 성능 최적화가 반드시 필요함
우리가 작성하는 쿼리문 - 어떻게든 돌아가는 쿼리문,
테이블(=릴레이션=R) 구성(★외우기)
테이블 용어 (★외우기)
제약 조건 5개
NOT NULL,
UNIQUE,
CHECK,
PK,
FK
(NOT NULL빼고 이름 주기 가능, 일반적으로 PK, FK에 이름 붙임)
밑줄표시 되어있음
슈퍼키 : 테이블의 각 로우들을 식별할 수 있는 칼럽 또는 칼럽의 집합
판단 기준 :
-최소한의 칼럼(가장 적은 수의 칼럼)으로 구성된 슈퍼키만 선정한 것
후보키는 유일성+최소성의 특징을 가짐
-후보키 중에서 dba가 선택한 키를 의미
-기본키는 유일성+최소성의 특징을 가짐
-기본키는 ★개체 무결성★의 특징을 가짐
★NOT NULL : 널(NULL)값을 가질 수 있음
★UNIQUE : 중복된 값을 가질 수 없음
기본키의 종류 2가지
1. 자연키 - 원래있는 데이터 이름, 성별, 나이. 등
2. 인공키(Artifical key) - 원래 없는데 만들어서 주는거 (너는 1번해라)
auto increment값 - 자동으로 증가되는 데이터
고객 테이블의 기본키 선정사유
*고객번호 - 고객이 추가될 때마다 번호를 하나씩 증가
*아이디 - 아이디를 이메일로 변환시켜서 쓸 예정이면 아이디를 기본키로 써도 되는데 아이디자체가 의미가 달라질 수 있어서 기본키로 부적절함
*휴대폰 번호 - 휴대폰번호가 없는 사람이 있음. 식별 불가능함
*주민번호 - 모든 고객이 서로 다른 값을 가지고 있으므로 not null+uniqie 모두 만족/근데 주민번호가 필수 수집이 아니라서 null이 될 수 있음, null값이 될 수 있으므로 기본키로 부적절함
대체키(Alternate Key)
-기본키로 선정되지 못한 애들
참조무결성 : 내가 참조하는 pk
pk가 먼지 fk(외래키-다른테이블 참조하는 키-unipue하지않음)가 먼지 이해하기??
테이블을 드랍하고자 할 때,
다른 테이블에서 PK를 참조하고 있는 FK가 있을 경우,
PK을 먼저 삭제해야 FK가 있는 테이블을 삭제할 수 있다.
ALTER TAVLE 테이블 이름
DROP CONSTRAINT 제약조건이름
OR
ALTER TAVLE 테이블 이름
DROP PRIMARY KEY;
.
참고. 외래키 제약조건을 무시하고 테이블 삭제
순서에 상관없이 삭제할 수 있음
DROP TABLE STUDENT CASCADE CONSTRAINTS;
DROP TABLE SUBJECT CASCADE CONSTRAINTS;
DROP TABLE ENROLL CASCADE CONSTRAINTS;
다른 테이블과 관계를 맺기 위해서 설정하는 키(key)
외래키는 참조무결성의 특징을 가짐. pk의 도메인의 값만 가진다는 뜻
기본키와 연결됨.
만약 회원이 탈퇴하면 회원목록에서 사라짐
이 회원을 참조하고 있던 게시글목록은 참조무결성에 위배됨
이럴때는 1. 회원이 쓴 글 삭제. 2. null값을 채움.
1,2를 실행하는 쿼리문 작성
외래키와 기본키의 관계는 부모-자식 과 같다.
슈퍼키(후보키(대체키(기본키)))
외래키 제거
-- DEPARTMENT 테이블의 DEPT_NO 칼럼을 참조하는 외래키 제약조건을 제거해야
-- DEPARTMENT 테이블의 DEPT_NO 칼럼에 추가된 기본키 제약조건을 제거할 수 있음
-한 쪽의 엔티티가 관계를 맺은 다른 엔티티 쪽의 여러 객체를 가질 수 있다.
-현실 세계에서 가장 흔한 관계이다.
-삼발이 있는 쪽이 M임
-실선, 점선 가능
점선이면 null값 가능
실선은
일대다 관계의 테이블 만들 때 고려해야될 것들
1. 명청
- 부모테이블 : 일(1), PK를 가진 테이블
- 자식 테이블 : 다(M), PK를 가진 테이블
2. 생성 - 순서가 있음
- 부모 테이블을 먼저 만들어야함. 자식테이블을 나중에 생성!
3. 삭제
- 생성의 역순으로.
양쪽에 삼발이 표시 있음
데이터베이스 논리적구현에서는 다대다관계는 불가능함!!
기억하기 다대다관계안됨 실제로 1:M관계밖에 안됨
그래서 1:M N:1로 해줘야함
↓ 데이터베이스 요구 분석
↓ 개념적 설계 (그림그리기, 다이어그램 만듦)
↓ 논리적 설계 (한글로 테이블 뽑아봄)
↓ 물리적 설계
↓ 보안 설계(사용자의 권한 설정) -- 안함
↓ 데이터베이스 생성 계획 및 생성
-사원번호 pk 임 밑줄있어서
-사원과 프로젝트는 다대다 관계. 그림으로 표현가능하지만 실제로는 안됨. 1:n임
데이터베이스 오브젝트 설계
[not null]primary key -- not null 생략가능...?
기본키와 기본키를 참조하는 외래키는 타입이 똑같이야 한다 . 크기까지 !
칼럼의 이름은 달라고 상관없음.
★암기하기
DDL -데이터 정의어 1. 데이터베이스 추가,수저으삭제
-데이터베이스 객채 추가, 수정, 삭제
-작업취소가 불가느임
DDL - Create, Alter, Drop, Rename
데이버 테이스 객체 (사용자, 테이블등 )
추가 : CREATE USER, CREATE TATBLE'
수정 : ALTER USER, LATIER TABLE
삭제 : DROP USER, USER, TABLE
SQL DEVELOP어쩌고 사용하기
맨 왼쪽 아래에 성공 나와야함.
비번 TIGER
NULL가능하다는 뜻
SOCTT계정이 가지고 있는 EMP테이블
CREATE TABLE -> MODELING
MODELING -> CREATE TABLE
둘 다 가능
constraint : 제약 조건
무결성 제약조건
1. not null - null값을 허용하지 않음
2. unique 중복 값을 허용하지 않음
3. primary key - 각 레코드를 구별하는 칼럼 (not null, unique)
4. foreing key - 다른 테이블
3,4가 많이 쓰임
글자길이에 변동이 많으면 varchar를 사용하고 (var:길이가 변하는 문자열)
일정하면 CHAR(SIZE)
주인이 테이블 이름 앞에 붙을 수 있음 (오너)
접속을 하고 실행을 해야함 접속 안하고 실행하면 접속할거냐는 창이 뜸