데이터베이스 foreign key / 복합키 / alter / 관계형 / ERD / 가상 테이블

준동이·2023년 3월 31일
0

SQL (Structured Query Lang) 구조화된 질의언어

DML
DDL
DCL
TCL



create

컬럼 규정 - 자료형
constraint -제약조건

  • 제약조건의 종류 (not null, primary key 중요)
    not null - 필수 의미
    unique - 중복 의미
    primary key - not null + primary key(pk) / 테이블당 1개 줄수있음 / auto_increment(자동 증가)랑 같이 쓸 수 있다.
    foreign key - 외래키 / 참조키, 참조대상 : uk,pk를 많이 참조함 mariadb는 pk 중심으로
    check (mariadb에서 지원 x)

두 개의 컬럼을 집합으로 생각해서 한번에 => 복합키
unique, primary key 를 복합키로 잡을 수 있다.



contraint 주는 방법

  • 컬럼 단위 제약조건
    table 단위 조건
    기술하는 순서의 차이만있고 활용면에서는 차이가 없다.

  • 확인 방법
    desc 테이블명으로 확인
    information_schema >> table_constraints

  • heidi에서 확인해보기
    제약 조건 확인에 나오는데 인덱스에 나왔음.



foreign key - 무엇인가를 참조를해서 만들어

외래키 제약조건은 두 테이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할을 한다.

외래키 관계를 설정하면 하나의 테이블이 다른 테이블에 의존하게 된다.

외래 키 테이블이 참조하는 테이블의 열은 반드시 primary key 이거나 unique 제약조건이 설정되어 있어야한다.



참조할걸 만들면 에러가 안난다.



foreingn key 잡힘



데이터 넣기
참조될수있는곳에 데이터가 있어야 사용 가능하다는 에러가 뜬다



데이터를 넣는 순서 : 먼저 참조값에 넣고 후에 넣어야 에러가 안남



update 해보기
deptno 20 만들고 update 함 없으면 에러가 난다



delete
나를 참조한것은 함부로 지울 수 없다 / 나를 참조한 것을 먼저 지우고 해야한다.



drop
drop도 안된다. 나를 참조한 것을 먼저 지우고 해야한다.



복합키 - 두 개의 컬럼을 집합으로 생각해서 한번에

unique, primary key 를 복합키로 잡을 수 있다.

유니크를 두 개를 통해서 잡을래
MUL = 멀티로 출력됨



primary key로 잡기



데이터도 넣어보기
두 개를 하나로 했기때문에 하나씩 다른건 에러가 나지않지만 두 개 다 다르면 primary key에 의해 중복때문에 에러가 난다.



alter

null , not null 주기
아무것도 없는 테이블 생성 후 deptno에 not null 넣어줌

null로 넣어주면 다시 돌아옴



unique 주기 / 추가



unique 지우기 / 삭제



primary key 주기 / 추가



primary key 지우기 / 삭제
이름이 아닌 primary key로 삭제한다.
null은 그대로 보관된다.



foreign key 걸기
foreign key를 걸기 위해 다시 primary key 걸고 참조테이블 생성 후 참조



foreign key 지우기 / 삭제
이름값으로 지운다.
스크립트 창에서는 지워지지만 테이블에서는 mul이 지워지지 않는다. (

테이블에서도 지우기



관계형 데이터베이스

관계형 데이터베이스 관련 시스템(RDBMS)

이클립스 기반 erd 다이어그램 만들 수 있는 툴
https://ko.exerd.com/

그리는 툴
https://www.erdcloud.com

ERwin 전세계적 표현 툴 (비쌈)

문제

varchar2 -> varchar
number -> int

sql 구문으로 변경

  1. 테이블 생성

  2. pk

  3. fk

  4. 출력



erd 그리기



가상 테이블(가상윈도우)

테이블을 통하여 데이터를 조회할때
테이블 데이터를 주는것이 아닌 테이블에 접근할 수 있는 가상 윈도우(view, 창)을 만들어서 데이터를 조회할 수 있게 필터링 장치를 만들기

table - 데이터 조회
table - 가상 윈도우(view : select) - 데이터조회

emp_vu1이 select를 조회하며 테이블 형식으로 보여준다.



필요 부분만 보기도 가능



테이블처럼 보인다 (show tables로 확인하면 나옴)



show full tables로 뷰 이름 확인



조회구문
view만 보기



스크립트로 테이블 보기



뷰 자체의 내용 보기
뷰의 이름과 정의, 뷰에 대한 여러가지 내용



원하는 부분만 처리하는 뷰
한번 필더링 돼서 보인다??



alias로 별칭을 걸어서
smith만 보기



기존에 없던 것 생성
annsal을 새로 생성해서 출력하였음



사원번호, 사원이름, 부서번호, 부서이름, 부서위치의 정보를 조회할 수 있는 emp_dept 이라는 view 생성



사원번호, 사원이름, 관리자이름에 대한 정보를 조회할 수 있는 emp_mrg이라는 view 생성



select
from 뒤에 테이블 / 뷰 / query(inline view) 쿼리 자체는 뷰처럼 사용

처음 에러는 별칭을 안해줘서 발생한 에러
뷰처럼 활용 / 뒤에 별칭이 꼭 필요 e



query문으로 join도 가능
테이블이 아니여도 상관이 없다.



데이터 수정 / 구조 변경



삭제



index

B-Tree
색인(목차)
구성 / 재구성

테이블 내의 데이터를 읽어올때 사전의 목차처럼 목차 페이지를 만들어서 접근했을때 정렬된채로 가져온다.

B-Tree - 중간부터 읽어서 어느 데이터나 읽어와서 꺼내오는 속도가 균등한 속도를 가질 수 있게함


인덱스 보기



자동적으로 만들기
primary key, unique, foreign key면 자동 / 나머지는 수동
프라이머리 넣어줘서 자동적으로 인덱스 생성됨

primary key를 지우면?
다시 사라짐



수동으로 만들기

profile
개발자 꿈나무

0개의 댓글