반응형
반응형

📝H2DB

H2 데이터베이스는 자바 기반의 경량화된 관계형 데이터베이스 관리 시스템(RDBMS)입니다 그래서 자바가 설치가 되어있어야 실행이 가능합니다

매우 가볍기 때문에 테스트나 간단한 개발 정도에 사용하면 좋을 것 같습니다

 

 

📝설치

https://h2database.com/html/main.html

 

H2 Database Engine

H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Supp

h2database.com

링크에 접속한다

 

 

Download에서 All Platforms 클릭하여 다운로드 후 압축 해제

 

📝 서버 실행

${설치경로}/bin/h2w.bat 실행

 

실행하면 웹 콘솔에 들어갈 수 있습니다 비밀번호는 1234입니다

반응형
반응형

SQLite 설치하기 위해 하기 사이트로 접근합니다.

 

https://sqlitebrowser.org/

 

DB Browser for SQLite

DB Browser for SQLite The Official home of the DB Browser for SQLite Screenshot What it is DB Browser for SQLite (DB4S) is a high quality, visual, open source tool to create, design, and edit database files compatible with SQLite. DB4S is for users and dev

sqlitebrowser.org

 


 

저 같은 경우 MacOS에 M2이기 때문에 해당 버전에 맞게 설치를 했습니다.

반응형
반응형

📝실행계획

옵티마이저가 SQL문을 가장 효율적으로 처리하기 위해 실행하는 계획을 선택하는 것을 의미한다.

 

📝FULL TABLE SCAN

테이블 전체 데이터를 읽어 조건에 맞는 데이터를 추출하는 방식

 

📝ROWID SCAN

ROWID기준으로 데이터를 추출하는 방식으로 단일행 접근시 가장 빠르다

 

📝INDEX SCAN

원하는 데이터 추출을 위해 인덱스를 사용하여 검색하는 방식

 

 

📝INDEX SCAN이 무조건 좋은가?

FULL TABLE SCAN이 무조건 성능에 좋지 않고 INDEX SCAN이 성능에 좋다는 것이라는 생각은 잘못 된 것이다.

데이터가 많은 테이블로부터 일부의 데이터를 추출야하는 INDEX SCAN이 유용한 건 사실이지만 반대로 테이블에 있는 대부분의 데이터를 추출해야하면 FULL TABLE SCAN이 더 효과적일 수 있다.

 

📝INDEX SCAN 종류

INDEX UNIQUE SCAN

  1. UNIQUE INDEX를 이용하여 필요한 데이터 블록을 접근하는 방식
  2. 한건 이하의 ROWID를 반환하는 INDEX SCAN 방식으로 모든 컬럼의 조건절에 '='로 명시된 경우를 의미한다.

 

INDEX RANGE SCAN

  1. 인덱스를 이용하여 필요한 데이터 블록을 접근하는 방식 중 가장 일반적인 형태
  2. 한건 이상의 필요한 데이터가 포함된 일정 범위의 인덱스 블록을 오름차순으로 접근하는 방식
  3. 동일 INDEX KEY 값에 대해서는 ROWID 기준으로 오름차순 정렬
  4. INDEX UNIQUE SCAN을 제외한 모든 INDEX SCAN에 사용, 대소비교(<.>)가 하나라도 들어간 경우 ) menu_price > 2000
  5. 와일드 카드 문자(%)조건 값 뒤에 존재하는 경우 ) like 'abc%'

INDEX RANGE SCAN DESCENDING

  1. INDEX RANGE SCAN과 기본적인 접근 방식은 동일
  2. 오름차순이 아닌 내림차순으로 인덱스 블록을 접근하는 방식
  3. INDEX RANGE SCAN을 수행함과 동시ORDER BY DESC을 만족하는 경우

INDEX SKIP SCAN

  1. 결합 인덱스선행 컬럼을 건너뛰는 형태인덱스 블록순차적으로 접근
  2. 선두 칼럼의 고유 값의 개수가 적고 후행 칼럼의 고유 값이 많을 때 효과적입니다 ) 부서A, B, C가 있고 급여가 500만원 ~ 700만원인 사람을 추려내야할 때 인덱스를 (부서, 급여)로 만들어서 A부서에서 500만원 ~ 700만원까지 [인덱스라서 정렬된 상태] 찾은 후 그 앞이나 뒤는 안 찾고 B부서로 넘어가는 방식

 

INDEX FULL SCAN

  1. 인덱스 리프 블록 전체를 SCAN하는 방식
  2. 단일 블록 순차 접근으로 병렬 처리는 불가능하나 인덱스 키순 정렬이 보장된다.
  3. 모든 데이터를 가져오는데 조건절은 없이 정렬이 있는 경우에 해당한다 ) SELECT * FROM MEMBER ORDER BY MEMBER_ID

 

INDEX FAST FULL SCAN

  1. 인덱스 리프 블록 전체를 SCAN하는 방식
  2. 병렬 처리가 가능해 빠르나 인덱스 키 순으로 정렬은 보장 불가능
  3. INDEX FAST FULL SCANTABLE FULL SCANINDEX VERSION이라고 생각하면 좋다.
  4. HINT를 이용해 유도해야하는 걸로 알고 있음

 

 

📝옵티마이저가 FULL TABLE SCAN을 선택하게되는 이유

  1. 조건절에서 비교한 컬럼에 인덱스가 없는 경우
  2. 인덱스는 있으나 데이터가 테이블의 많은 양을 차지해 FULL TABLE SCAN의 비용이 INDEX SCAN보다 적다고 판단하는 경우
  3. 최적한 인덱스는 있으나 테이블 데이터 자체가 적어 FULL TABLE SCAN 비용이 INDEX SCAN보다 적다고 판단하는 경우

 

📝실행 계획 테이블 (PLAN_TABLE)

ORACLE에서 실행 계획을 테이블에 저장하게 되는데 해당 테이블 이름은 PLAN_TABLE이다.

 

EXPLAIN PLAN -- EXPLAIN PLAN 선언부
SET STATMENT_ID = 'EP_TEST' -- SQL에 임의 ID 부여
FOR
SELECT E.empno, E.ename, D.deptname
FROM emp E, dept D
WHERE E.deptno=D.deptno;

해당 SQLSQL실행 계획을 저장하는 것일 뿐 실제로 SQL이 실행되는 것이 아니다.

이거는 옵션에 따라 직접 실행시키면서 SQL 실행 계획을 저장할 수도 있다.

 

PLAN_TABLE에서 DBMS_XPLAN 패키지를 이용해 조회가 가능하다

 

실행 계획 순서는 위에서 아래로 진행되며 가장 들여쓰기가 많이 된 곳에서 부터 시작되며 실행 순서는 위에서 아래로 진행된다. 같은 수준에서 위에서 아래로 실행된 게 그 이후에 없으면 상위로 올라가며 반복된다.

 

 

해당 실행 계획의 순서는 5 → 3 → 4 → 2 → 1 → 0 이다

 

📝실행계획 요소 (PLAN_TABLE)

STARTS 실행 계획 정보중 기본적인 최소한의 정보를 출력
A-ROWS 실제 SQL이 실행된 후 수집되는 행 수
A-TIME 실제 SQL 수행에 소요된 시간
E-ROWS SQL에 대한 예측되는 행의 수
E-BYTES SQL 실행 시 접근하는 데이터 바이트 수의 예측값
USED_MEM 최근 실행 시 실제 메모리 사용한 양

 

그외 더 다양한 정보가 있습니다.

 

📝SQL TRACE

실행 계획은 물론 여러 세션에서 수행한 SQL 통계 정보 수행 시간, 결과 등TRACE기록하여 파일 형태로 저장하는 방법이다. 이걸 이용해 필요한 부분의 SQL문의 실행 정보를 수집할 수도 있다.

 

 

🔗 참고 및 출처

https://harris91.vercel.app/query-plan
https://myjamong.tistory.com/237

 

 

발췌 : 실전 사례로 살펴보는 SQL 튜닝 비법

 

반응형
반응형

📝SQL 튜닝

최소한의 CPU I/O 메모리를 사용해 최대한 빠른 시간내 원하는 데이터 작업을 수행시키는 것
아무리 쿼리의 성능을 튜닝해도 근본적인 스키마 구조가 문제라면 밑빠진 독에 물 붓기이기 때문에 이런 경우 아예 근본적인 스키마 구조부터 뜯어고쳐야할 수 있다.
데이터 모델링을 할 때는 일반적으로 사용자의 이용 빈도(자주 사용하는 화면)를 고려하며 설계 하는 게 좋다

📝옵티마이저

DBMS의 두뇌라고 표현할 수 있다. SQL이 들어오면 문법 에러 및SQL문을 처리하는 최적의 방법을 도출해서 실행하게 한다.

📝SQL 실행 순서

  1. 문법 오류 검사
  2. 실행한 적이 있는 SQL문인지 메모리(SHARED POOL)에서 체크 후 실행
    1. 실행한 적 있으면 기존 방식으로 실행(SOFT PARSING) → 
    2. 실행한 적 없으면 처리 방식에 대한 실행 계획 수립(HARD PARSING) 그 이후 SHARED POOL에 실행 계획 저장

 

📝옵티마이저 종류

규칙 기반 옵티마이저

  • 특정 규칙을 기반으로 실행 계획 수립하고 우선순위가 높은 걸 우선시한다.
  1. ROWID에 의한 단일행 실행
  2. 클러스터 조인에 의한 단일행 실행
  3. AHSH CLUSTER KEY에 의한 단일행 실행
  4. UNIQUE KEY 또는 PRIMARY KEY에 의한 단일행 실행
  5. 클러스터 조인
  6. HASH CLUSTER KEY
  7. INDEXED CLUSTER KEY
  8. 결합 인덱스
  9. 단일 컬럼 인덱스
  10. 인덱스에 의한 컬럼 BOUNDED RANGE
  11. 인덱스에 의한 컬럼의 UNBOUNDED RANGE
  12. SORT MERGE JOIN
  13. 인덱스로 구성된 컬럼의 MAX 또는 MIN 처리
  14. 인덱스로 구성된 컬럼의 ORDER BY
  15. FULL TABLE SCAN

예를 들어 아래와 같은 쿼리문이 존재할 때 emp_no가 PRIMARY KEY 설정(인덱스)가 안 되어있는 경우 15번의 FULL TABLE SCAN 방식으로 실행될 것이고 있는 경우4번의 방식으로 실행되게 된다.

SELET E.e_name
FROM emp E
WHERE E.emp_no = '12345';


우선 순위가 정해져있기 때문에 미리 예측을 할 수 있다는 장점이 있다. 그렇기 때문에 SQL을 통제하는 것이 가능하다

하지만 이러한 규칙이 항상 유리하지 않다
성별인 남자이고 입사일이 2013년 1월 1일 ~ 2013년 1월 3일인 사람을 검색하는 SQL을 작성하고자할 때 아래 SQL과 같이 작성하는 경우 성별인 남자인 직원을 걸러내는 인덱스를 사용하는 것보다 3일 사이에 입사한 직원을 걸러내는게 더 효율적이다. 
→ 남자인 사람에서 입사일을 걸러내는 것보다 입사일에서 남자인 사람을 걸러내는게 불필요한 데이터를 많이 읽게 되는 걸 줄일 수 있다

SELECT E.e_name
FROM emp E
WHERE E.gender = '남자'
AND E.hiredate BETWEEN '20130101' AND '20130103'


위와 같은 쿼리를 좀더 효율적으로 하기 위해 인덱스를 안 타게끔 아래와 같이 조정이 가능하긴 하다.

SELECT E.e_name
FROM emp E
WHERE E.gender || '' = '남자'
AND E.hiredate BETWEEN '20130101' AND '20130103'

 

또한 규칙기반 옵티마이저에서는 이러한 단점들이 존재한다.

  1. 힌트를 사용할 수 없다
  2. HASH JOIN을 사용 할 수 없다
  3. 거의 사용하지 않는 추세이며 ORACLE의 경우 10g 이후 공식적으로 지원하지 않는다.

비용  기반 옵티마이저

  • 최소 비용으로 처리할 수 있는 실행 계획 수립, 가장 많이 쓰이는 형식의 옵티마이저
  • 하나의 SQL을 받으면 최대 2,000개의 실행 계획을 만들고 가장 적은 비용이 드는 실행계획을 사용자에게 제시한다.


📝동작방식 (SQL → Parsing → Query Transformer → Estimator → Plan Generator)

 

 

Query Transformer

PARSING 과정을 거친 SQL은 PARSING 트리 형태로 변형되어 Query Transformer는 넘겨 받은 SQL을 보고 같은 결과를 도출하되 좀 더 나은 실행 계획을 갖는 SQL로 변형이 가능한지 판단해 변환 작업을 수행
예를 들면 복잡한 서브쿼리나 뷰를 사용한 SQL을 일반적인 조인 형태의 SQL로 변환해 실행 계획을 도출하기 좋은 상태로 만든다.

Estimator

Query Transformer를 통해 변환 작업을 마치고난 SQL은 Estimator로 넘겨지게 되는데 이때 수행하는데 드는 총 비용을 계산한다.

Plan Generator

Estimator를 통해 계산된 값들을 토대로 후보군 실행계획 도출 Row Source Generator를 통해 출력이 가능한 코드 형태로 바꾼다.

📝FIRST_ROWS_n

비용기반 옵티마이저는 CHOOSE, FIRST_ROWS와 같은 모드도 존재하지만 현재는 사용하지 않고 DBMS에서도 FIRST_ROWS_n을 권장하며 실행 결과를 출력하는데 걸리는 응답 속도를 최적화 는게 목표이다.

📝ALL_ROWS

SQL 실행 결과 전체를 빠르게 처리하는데 최적화된 실행 계획을 세우는 것입니다. ORACLE의 경우 10g 이후에 이값이 기본적으로 설정되어있다.

 

📝옵티마이저 이용 통계정보

옵티마이저의 경우 통계 정보를 따라 자동적으로 최적의 실행계획을 세운다 이용하는 통계정보는 아래와 같다

테이블 테이블 전체 행의 수
테이블이 차지하고 있는 전체 블록 수
테이블의 행들이 갖는 평균 길이 등
컬럼 컬럼 값의 종류
컬럼 내 NULL 값의 분포도
컬럼 값의 평균 길이
컬럼 내 데이터 분포의 추정치 등
인덱스  LEAF BLOCK 수 : 데이터 보관하는 블록 수
LEVELS : 인덱스 트리의 LEVELS 정보
CLUSTERING FACTOR : 접근하고자 하는 데이터가 모여 있는 밀집도
시스템 I/O 성능 및 사용률
CPU 성능 및 사용률 등


시스템 운영중 DBMS 전체의 옵티마이저 모드를 변경하는 작업은 가급적 하지 않는 것이 좋다.

📝옵티마이저 한계

잘못된 비용 계산의 한계

복잡한 쿼리문때문에 정확하지 않은 통계자료 발생

동시성 배제한 비용 계산의 한계

비용 예측시 한 개의 SQL만 실행된다는 전제로 진행하게 되는데 실제 운영 환경에서 같은 블록을 접근하는 등 상황이 발생해 대기상태가 될 수 있다.

컬럼 타입에 대한 비용 에측의 한계

날짜 유형의 데이터를 날짜 데이터 타입이 아닌 문자 데이터 타입을 컬럼으로 사용할 경우 비용 계산 방식이 달라져 예측이 어려워질 수 있다
예를 들면 날짜 데이터를 DATE타입으로 선언하면 특정 월에는 1부터 최대 31까지의 날짜만 존재하지만 YYYYMMDD 형식을 갖는 VARCHAR 타입의 데이터를 선언하면
이는 연속된 문자열이기 때문에 31일 이후의 날짜가 존재할 수 있다고 판단한다. 그 결과 예측되는 최종비용 또한 정확성이 떨어지게 된다.

 

 

발췌 : 실전 사례로 살펴보는 SQL 튜닝 비법

반응형
반응형

SELECT

               A.ID              AS ADMIN_ID             -- 아이디

             , A.REG_DATE    AS REG_DATE     -- 수정일자

             , A.COMPANY     AS COMPANY      -- COMPANY
             , A.WRITER       AS WRITER            -- 작성자
  FROM  COVID_VIEW A
WHERE  A.ID = '1'
       OR   A.ID = '2'
     AND   A.REG_DATE > 20220104
GROUP BY A.COMPANY
ORDER BY A.REG_DATE DESC

 

  1. SELECT 문 끝나는 줄에 줄맞추기
  2. 대문자로 전부 작성하기 → 테이블명이 소문자인경우 대문자 사용 못할 경우 소문자로 다 통일
  3. 필드에 AS (Alias) 사용시 구분하기 쉽게 정렬해준다.
  4. GROUP, ORDER 도 또한 SELECT 끝나는 줄에 맞춘다
반응형
반응형

📝오라클DB 설치

다운로드 URL : https://www.oracle.com/kr/downloads/

 

Oracle 소프트웨어 다운로드

클라우드 무료 체험과 소프트웨어 다운로드에서 Oracle의 애플리케이션, 미들웨어, 데이터베이스, Java, 개발자 도구를 확인해 보세요.

www.oracle.com

 

📝설치

압축을 풀고 C드라이브에 Oracle을 폴더를 만들어주세요 (C드라이브 Oracle에 압축을 푸시면 안 됩니다.)

 

계속 진행하다보면 기본 설치 부분에 패스워드 설정 및 여러가지 행위를 하는데 OracleBase를 C:/Oracle로 잡아주세요환경변수가 설치시 바로 실행파일 경로로 잡힙니다

 

 

Oracle Developer (IDE)

설치 URL : https://www.oracle.com/kr/database/sqldeveloper/

 

SQL Developer

Oracle SQL Developer is a free, development environment that simplifies the management of Oracle Database in both traditional and Cloud deployments. It offers development of your PL/SQL applications, query tools, a DBA console, a reports interface, and mor

www.oracle.com

오라클 DB에 접근할 수 있게 해주는 툴입니다.

 

 

📝계정생성 및 권한 부여

  1. cmd 접속
  2. sqlplus 입력 (오라클 DB 접근)
  3. 사용자명 : sys AS SYSDBA  → 패스워드 없이 접근 가능한 슈퍼 계정
  4. 계정 생성
    • CREATE USER 유저이름 IDENTIFIED BY 비밀번호;
    • 예) CREATE USER c##root IDENTIFIED BY 1234;
    • id 앞에는 c## 필수적으로 들어가야한다.
  5. 권한부여
    • GRANT 권한 to 유저이름;
    • 예) GRANT RESOURCE, CONNECT, DBA to c##root;
    • RESOURCE
      • 개체를 생성, 변경, 제거 할 수 있는 권한(DDL,DML 사용가능)
    • CONNECT
      • 데이터베이스에 연결할 수 있는 권한
    • DBA
      • 데이터베이스 관리자 권한

 

 

 

📝Oracle 접속

 

 

SID는 인스턴스의 이름입니다. 필요한 이유는 한 서버에 여러개의 인스턴스가 기동 될 수 있기 때문입니다.

밑에서 보이는 구조가 오라클 DB 구조인데 여러개의 PDB를 가진 거 처럼 구분할 수 있는게 필요합니다.

 

 

📝CDB 

하나의 DB를 컨테이너로 보고 그 컨테이너를 담을 수 있는 DB를 의미한다

 

📝PDB 

CDB에 끼워넣을 수 있는(Pluggable) DB 즉, CDB안에 있는 DB를 의미한다

 

  1. 오라클 데이타베이스명을 확인하는 방법
    • SELECT NAME, DB_UNIQUE_NAME FROM v$database;
  2. 오라클 SID를 확인하는 방법
    • SELECT instance FROM v$thread;

 

 

📝SID

DB 하나의 인스턴스 

 

📝Service Name

여러개의 인스턴스를 모아 하나의 서버 혹은 시스템을 구성한것

 

서버에서 여러개의 인스턴스를 가질 수 있으며 만약 두개의 인스턴스를 묶어 사용해 동기화시켜서 같은 서버인 것 처럼 활용할 경우 두개의 인스턴스는 SID는 다르지만 같은 Service Name을 가질 수 있게 된다. 

 

 

Oracle DB구조

 

 

🔗 참고 및 출처

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dibidibijp&logNo=150180040069 

 

 

 

반응형
반응형

우분투 20.04을 기준으로 작성했습니다.

 

📝기존 마리아DB 삭제 

1. 설치된 마리아디비 조회

  • sudo dpkg -l | grep mariadb

2. 삭제

  • apt-get purge ${package_name}

 

[ 삭제 처리가 잘 안 될시 해당 명령어 순차 입력 ]

  • sudo apt-get purge mariadb*
  • sudo apt-get purge mysql*
  • sudo apt-get autoremove
  • sudo apt-get autoclean
  • sudo apt-get remove dbconfig-mariadb
  • sudo apt-get update -y
  • sudo apt-get dist-upgrade -y

 

 

🔗참고 자료

https://leannet.tistory.com/49 

 

ubuntu 서버 MariaDB 삭제

서버 설정한다고 미쳐 블로그 관리를 못하였다 그래서 MariaDB를 삭제를 하고 다시 설치를 해볼려고 한다. 삭제 sudo apt-get remove --purge mariadb 다시 한번 설정 파일까지 싹 삭제 혹시 몰라 mysql도... sud

leannet.tistory.com

 

📝마리아DB 설치

1. apt 설치 (없을 시)

  • sudo apt get install


2. apt 외부 repository 주소 설정

  •  sudo vi /etc/apt/sources.list
  • :%s/kr.archive.ubuntu.com/mirror.kakao.com/g

 

 

🔗참고 자료 : https://qucdas.tistory.com/95

 


3. 마리아 DB 설치

  • sudo apt install mariadb-server -y
  • * 우분투 설치시 기존 mysql이 깔려 있어 충돌이 날 수 있다 그럴 경우 mysql 삭제 필요

 

🔗참고자료 : https://leannet.tistory.com/49

 


4. 마리아DB 설치 확인

  • mariadb --version


5. 마리아DB 시작

  • sudo systemctl start mariadb


6. 마리아 DB root 패스워드 설정 (슈퍼계정)

  • sudo /usr/bin/mysqladmin -u root password


7. 접속 확인해보기 (root로 접속)

  • mysql -u root -p


8. 부팅 시 마리아DB 자동시작 설정

  • systemctl is-enabled mariadb


9. DB 및 table 덤프 import 하기 (존재할 시 사용)

  • mysql -u root -p --database=mysql < ${경로}/${덤프DB및테이블}.sql


10. 개발망에서 접근할 수 있게 포트 개방

  • sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT


11. 외부접근 허용

  • vi /etc/mysql/mariadb.conf.d/50-server.conf
  • #bind-address            = 127.0.0.1 주석처리 마리아 DB는 bind-address가 지정되어있어서 해당 아이피만 허용 가능하다 즉, 초기에는 로컬에서만 접근 가능하다.

 

📝마리아DB 기동

  • sudo systemctl start mariadb

 

📝마리아DB 중지 

  • sudo systemctl stop mariadb

 

📝마리아DB 재기동

  • sudo systemctl restart mariadb

 

📝계정 생성 

1. 계정 생성

  • CREATE USER '${id}'@'%' IDENTIFIED BY '${password}';
  • 예) CREATE USER 'sjk40'@'%' IDENTIFIED BY '1234';
  • # 여기에서 %란 모든 아이피대역에서 해당 아이디를 사용할 수 있다는 의미
  • # 192.168.% 인 경우 192.168.xxx.xxx 대역에 해당 아이디를 사용할 수 있다는 것
  • # 참고로 처음 마리아DB 설치시 root는 로컬에서만 접근 가능하다

 

2. 권한 부여

  • GRANT ALL PRIVILEGES ON *.* TO '${id}'@'%';
  • 예) GRANT ALL PRIVILEGES ON *.* TO 'sjk40'@'%'; 
  • # 여기에서 *.*란 DB.테이블명을 의미한다 *의 경우 모든이라는 의미로 모든 DB와 모든테이블의 접근 권한을 준다는 의미이다.
  • # 물론 위에 계정 생성에 아이피대역에 따라 접근할 수 있는 아이디들이 다 다르다
  • # 그래서 어떤 아이피 대역의 아이디에 권한을 줄지에 대한 것을 잘 명시해야한다

 

3. Commit

  • flush privileges;

 

📝계정조회

  1. use mysql;
  2. select user, host from user;

 

📝계정 삭제 

  • DROP USER '${id}'@'%';
  • 예) DROP USER 'rootuser'@'%';
  • # 여기에서 %는 아이피대역으로 삭제할 Host IP를 제대로 입력해야한다.

 

 

반응형

'[Database] > [MariaDB]' 카테고리의 다른 글

[MariaDB] 마리아 디비 설치  (0) 2021.06.20
반응형

-- 뷰 테이블 생성
CREATE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건

-- 뷰 테이블 삭제
DROP VIEW [table name]

-- 뷰 테이블 생성 및 수정
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건

 

반응형
반응형
LOAD DATA LOCAL INFILE '파일 경로' INTO TABLE [데이터를 넣을 테이블명] FIELDS TERMINATED BY "열구분자" LINES TERMINATED BY '행구분자';

예)
LOAD DATA LOCAL INFILE 'D:\covid.csv' INTO TABLE covid_org FIELDS TERMINATED BY "," ENCLOSED BY '\"' LINES TERMINATED BY '\r\n';

D:\covid.csv 파일을 covid_org 테이블에 insert 하는데 열 구분자는 , 이고 내용에 ,가 들어간 경우 ENCLOSE BY를 통해 내용에 ,를 예외처리해준다.
행 구분자는 \r\n이다. (내용에 , 가 없는 경우 ENCLOSED BY를 제외해도된다)

이 쿼리문으로 CSV 파일로 대량 데이터 넣을 수 있습니다.

 

  • CREAT TABLE [테이블명] ( SELECT * FROM [복사할 테이블명])
    • 쿼리문으로 기존 테이블의 내용을 카피하거나 특정 필드를 뽑아내거나 JOIN등으로 한번에 넣을 수 있습니다.
반응형