[DB] 기초

:)·2024년 4월 8일
0

DB

목록 보기
1/8
post-thumbnail
  • DB
    • 데이터가 모여있는 기지, 추상적인 용어
    • 파일에도 데이터를 저장할 수 있지만 파일에는 없는 기능(조회, 성능)들을 데이터베이스가 제공
  • DBMS(Database Management System)
    데이터를 관리할 수 있는 구체적인 시스템.
    오라클, 마리아 DB, MYSQL, Mongo, PostgreSQL,IBM DB2
    - 오라클 DBMS 버전
        i : internet
        g : grid     (데이터를 표(행렬)로 관리)
        c : cloud    (가상 데이터 서비스)
        
        - 11 홀수: 안정적/ 12 짝수: 상대적...불안정.. ->회사에 따라서 사용
        
  • 계정
    sys : 총괄, 모든 권한
    system : 계정 관리
    일반계정 : 해당 스키마 관리(hr, op, he, scott..)
  • 스키마: 정리가 잘 된 표들의 묶음, 상태
  • RDBMS(relation:관계형 데이터 베이스 시스템): 테이블끼리 서로 관계를 맺음
  • SQL: Structured Query Language (인터프리터 언어, 쿼리문) - 특수 목적의 프로그래밍 언어 (인터프리터: 파이선, html../ 쿼리(Query): 데이터베이스에 정보를 요청하는 것/ 쿼리문: 데이터베이스에 정보를 요청하는 명령문)
    1. 한줄씩 번역되고 빈번한 수정이 있을 때 효율적
    2. 전체가 아닌 부분만 실행하고 싶을때에도 편리
    3. 일괄처리시 컴파일 언어보다 효율이 떨어짐

  • 참고: 오라클에서는 테이블, 컬럼명 등 식별자 이름에 쓸 수 있는 기호: _ # $ 세가지
  • 문자열 형식 테스트
    • CHAR(길이) : 고정길이 , 단위는 바이트

    • VARCHAR(길이) : 오라클에서 존재하지만 사용하지 않는 예비자료형.

    • VARCHAR2(길이) : 가변형길이 단위 바이트, 길이는 최대길이이고 실제로 메모리는 데이터크기만큼 사용

    • CLOB : 장문 작성 타입

    • 고정길이는 지정된 만큼 기억공간을 차지합니다. 가변길이는 데이터크기만큼 기억공간 사용하고 최대 크기로 제한.

    • 최대 2000바이트입니다. UTF-8 인코딩에서 한글은 3바이트, 영문/숫자/기호는 1바이트

      CREATE TABLE  tbl_string(
      acol char(10),			-- 10 바이트 고정길이 : 데이터를 꼭 10바이트에 저장.
      bcol varchar2(10),		-- 10 바이트 가변길이 : 데이터 크기에 따라 정해진다.(최대 10바이트)
      ccol nchar(10),			-- 10개 문자 고정길이
      dcol nvarchar2(10)		-- 10개 문자 가변길이);

- DBeaver

https://dbeaver.io/download/

  • 스크립트 -> 컨트롤+ ] => 새로운 창생성
  • 폰트크기-> 컨트롤+ 쉬프트+ + (혹은 환경-font-제일 마지막에서 수정)
  • 주석: —
  • 커서가 있는 부분에서 컨트롤+엔터 - > 해당 코드만 실행..
    • DROP의 경우 해당 줄에서 실행할 때만... 연달아 실행 x
  • 명령어를 이름으로 사용하고 싶을 경우 "" 와 함께 ("TYPE")
  • CTRL+ALT+방향키: 복사
  • CTRL+SHIFT+방향키: 이동

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

  • 테이블(표)에 데이터를 저장. SQL 데이터 관리 명령을 사용

  • Table A => 스키마(해당 담당 계정이 관리)
  • A 테이블에 있는 번호를 통해 B 테이블에 이름, 나이 정보를 입력하지 않아도 됨
  • 구조: Table, Relation(오라클), class
  • COLUMN: 열(세로), 속성, 필드 공통된 값들의 주체
    ROW: 행(가로) 레코드, 튜플, 하나의 정보
  • 테이블 내에 null과 중복이 없도록 주의, 제한을 걸기
    • PK(primary Key): 테이블 내 고유한 값 (각 행의 구분점으로 사용) 중복과 null 허용X
      • 기본키는 하나만, 복합키는 가능
      • 자동으로 인덱스(색인) 생성. 인덱스는검색(조회)속도 향상시키는 방법
      • 제약조건 걸기: CONSTRAINT - 테이블 수준
        EX) CONSTRAINT CAR_PK PRIMARY KEY(ID)
            ID NUMBER PRIMARY KEY   - (생성시)
        
        ALTER TABLE tbl# MODIFY COL1 varchar2(30) PRIMARY KEY;
        ALTER TABLE tbl# ADD CONSTRAINT TBL#_PK PRIMARY KEY(COL1);
                             CONSTRAINT 제약조건이름(선택) 제약조건내용
        --테이블의 제약조건 이름 확인하기 : 오라클의 시스템 테이블
        SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS;
    • FK(Foreign Key): 다른 테이블의 PK, 테이블끼리 관계를 맺을때 사용, 여러개의 테이블 참조 가능..
      • ㄴ Table A에 없는 PK를 Table B의 FK로 사용할 수 없음
        CONSTRAINT POT_KF FOREIGN KEY(NAME) REFERENCES FLOWER(FLOWER_NAME)
  • Unique Key : (PK까지는 아니지만) Null O, 중복 X

- SQL문 - DDL

  • SQL문 DDL, DMS, DCL
    1. DDL Definition (정의하다)
      데이터베이스 객체를 대상으로 합니다. (사용자, 테이블, 뷰,시퀀스....)
      create 생성하다
      alter 변경하다
      drop 제거하다
    2. DML Manipulation (조작하다)
      CRUD(create/insert , read/select, update, delete)
      테이블에 저장된 데이터가 대상입니다.
      insert : 새로운 데이터의 추가(삽입)
      select : 저장된 데이터의 조회
      update : 저장된 데이터의 수정
      delete : 저장된 데이터의 삭제
    3. DCL Control (제어하다)
      데이터베이스의 객체 또는 데이터와 관련된 제어 명령
      grant : 지정된 사용자 계정에 권한(역할) 을 허용하다. 권한(역할) : resource, connect 등등....
      revoke : 허용된 권한을 철회(취소)한다.
      commit : insert/update/delete 는 저장된 데이터의 변경 작업은 신중해야 합니다. → 최종 변경을 확인(승인)!!!
      rollback : insert/update/delete 실행한 명령을 이전 상태로 되돌립니다.
  • DDL(Data Definition Language): 데이터 정의어, 테이블 조작, 제어 관련 쿼리문
    1. CREATE: 테이블 생성

    2. DROP: 삭제

    3. ALTER: 수정

      • alter table [변경내용키워드]
        1) 컬럼 이름 변경 : rename column 
        2) 테이블 이름 변경 : rename to 
        3) 새로운 컬럼 추가 : add
        4) 컬럼 데이터 형식 변경 : modify
        5) 제약 조건 추가 : add constraint  
        6) 기존 컬럼 삭제 : drop
        7) 기존 제약 조건 삭제 : drop constraint 제약조건이름
        • 1, 2) 컬럼 및테이블 이름 변경
          alter table   테이블명 [변경내용키워드]  (변경내용)  
          
          1)컬럼 이름 변경                 현재이름 to 새로운 이름
           ALTER TABLE tbl# RENAME COLUMN coL2 TO col22;  
           ALTER TABLE tbl# RENAME COLUMN coL22 TO col2;
        • 3) 추가
          -컬럼의 기본설정 추가(기존 row()들도 값이 추가)된 컬럼5 의 값 100
          ALTER TABLE tbl# ADD (column5 NUMBER(5) DEFAULT 100); -- 예 : 기본값 100
          - 변경후에 데이터 추가
          INSERT INTO tbl#(col1,col2) VALUES ('테스트11','테스트');
          - 컬럼추가 : column6 가변문자열(20) 기본값 'guest' 로 변경
          ALTER TABLE tbl# ADD (column6 VARCHAR(20) DEFAULT 'guest');
          - 아래 데이터 추가 후 확인
          INSERT INTO tbl#(col1,col2) VALUES ('게스트1','게스트2');
        • 4) 컬럼 데이터 형식 변경
          ALTER TABLE tbl# MODIFY (col2 varchar2(50));
        • 5) 제약 조건 추가
          -NOTNULL
          ALTER TABLE tbl# MODIFY COL3 VARCHAR2(50) NOT NULL;
          -유니크 넣기
          ALTER TABLE Persons ADD UNIQUE (ID);
          -유니크 여러개 넣기
          ALTER TABLE Persons ADD CONSTRAINT UC_Person UNIQUE (ID,LastName)
          -ALTER TABLE로 COL1을 PRIMARY KEY로 변경해보기, 후에는 FK도 설정할 수 있어야함
          ALTER TABLE tbl# MODIFY COL1 varchar2(30) PRIMARY KEY;
          -기본키가 복합컬러명이라면 제약조건 추가 키워드(ADD CONSTRAINT) 써야 함
          ALTER TABLE tbl# ADD CONSTRAINT TBL#_PK PRIMARY KEY(COL1);
          ALTER TABLE tbl# ADD CONSTRAINT PRIMARY KEY(COLUMN5);
        • 7) 제약조건 제거
          -ADDDROP만 있음
          ALTER TABLE tbl# DROP CONSTRAINT tbl#_notnull3;
          - 제약조건 키워드없는 not nullnull로 변경할 때
          ALTER TABLE tbl# MODIFY COL2 VARCHAR2(50) NULL;
    4. TRUNCATE: 테이블 내용 전체 삭제

      --테이블 생성
      CREATE TABLE TBL_ANIMAR(
      	ID NUMBER PRIMARY KEY,
      	"TYPE" VARCHAR(100),
      	AGE NUMBER(3),
      	FEED VARCHAR2(100)
      );
      
      --제약조건 삭제
      ALTER TABLE TBL_ANIMAR DROP CONSTRAINT SYS_C007006;
      --제약조건 추가
      ALTER TABLE TBL_ANIMAR ADD CONSTRAINT ANIMAR_PK PRIMARY KEY(ID);
      --테이블 삭제
      DROP TABLE TBL_ANIMAR;
      --조회
      SELECT*FROM TBL_ANIMAR;
  • 타입
    • 숫자
      • NUMBER(precision): 정수
      • NUMBER(precision, 소숫점): 실수
      • NUMBER: 22byte까지 입력가능(38자리 정수)
    • 문자열
      • CHAR(길이) : 고정형
      • CHAR(4)에 'A'를 넣으면 A^^^ 빈자리가 공백으로 채워짐. 형식을 정한 날짜, 주민번호처럼 글자 수가 절대 변하지 않는 값 삽입
      • VARCHAR(길이), VARCHAR2(길이): 가변형
        값의 길이만큼 공간 배정, 글자 수에 변화가 있는 값 삽입 (2를 사용)
      • DATE: FORMAT에 맞춰서 날짜를 저장

- 제약조건 DEFAULT와 CHECK

GENDER CHAR(1) DEFAULT 'W'NOT NULL CONSTRAINT BAN_CHAR CHECK(GENDER = 'M' OR GENDER = 'W')
혹은
CHECK(GENDER IN('M','W'))

DEFAULT - 기본값으로 설정(생성시 생략 가능, 생략 시 지정된 값으로 생성)
NOT NULL - NULL은 될 수 없음
CONSTRAINT - 제약 조건 생성
CHECK- 조건 
BIRTH DATE CONSTRAINT BAN_DATE CHECK(BIRTH >= TO_DATE ('1980-01-01', 'YYYY-MM-DD'))
  • 정보 삽입

    INSERT INTO TBL_STUDENT
    (ID, NAME, MAJOR, GENDER, BIRTH)
    VALUES(0, '', '', 'W' , '');
    INSERT INTO TBL_STUDENT
    (ID, NAME, MAJOR, GENDER, BIRTH)
    VALUES(1, '한동석', '컴공', 'M' , TO_DATE ('2000-01-02','YYYY-MM-DD'));
    SELECT*FROM TBL_STUDENT;
    
    INSERT INTO TBL_STUDENT
    (ID, NAME, MAJOR, BIRTH)
    VALUES(2, '홍길동','전자공학과', TO_DATE ('1980-01-02','YYYY-MM-DD'));    ->성별이 디폴트 값으로 저장됨
  • 제약 조건 DEFAULT와 CHECK 코드

    --학생테이블 생성
    CREATE TABLE TBL_STUDENT(
    	ID NUMBER,
    	NAME VARCHAR2(100),
    	MAJOR VARCHAR2(100),
    	GENDER CHAR(1) DEFAULT 'W' NOT NULL CONSTRAINT BAN_CHAR CHECK(GENDER IN('M','W')),
    	BIRTH DATE CONSTRAINT BAN_DATE CHECK(BIRTH >= TO_DATE ('1980-01-01', 'YYYY-MM-DD')),
    	CONSTRAINT STD_PK PRIMARY KEY(ID)
    );
    
    INSERT INTO TBL_STUDENT
    (ID, NAME, MAJOR, GENDER, BIRTH)
    VALUES(1, '한동석', '컴공', 'M' , TO_DATE ('2000-01-02','YYYY-MM-DD'));
    SELECT*FROM TBL_STUDENT;
    
    INSERT INTO TBL_STUDENT
    (ID, NAME, MAJOR, BIRTH)
    VALUES(2, '홍길동','전자공학과', TO_DATE ('1980-01-02','YYYY-MM-DD'));
    
    TRUNCATE TABLE TBL_STUDENT;
  • check () 괄호 필수

    age number(3) CHECK (age BETWEEN 10 AND 30)

- 모델링

모델링: 추상적인 주제를 DB에 맞게 설계하는 것

  1. 요구사항 분석: 회원, 주문, 상품- 3가지를 관리하고자 함

  2. 개념적 설계(개념 모델링)

    필요한 정보 리스트 만들기

  1. 논리적 설계(논리 모델링) -

    PK, FK… 설계

  1. 물리적 설계(물리 모델링) -

    이름짓기 (크리에이트 전에 먼저 이름짓기)

    참조를 하면 자동으로 테이블끼리 연결됨

CONSTRAINT POT_KF FOREIGN KEY(NAME) 
REFERENCES FLOWER(FLOWER_NAME)

  1. 구현
profile
:) GITHUB: https://github.com/YJ2123412

0개의 댓글

관련 채용 정보