본문 바로가기

IT 지식/데이터베이스6

[DB] 두 개 컬럼을 인덱스로 묶고 그 중 하나로만 쿼리를 하면? 옛날부터 궁금한게 한 가지 있었다. 예를 들어, 한 테이블의 col1, col2 칼럼에 동시에 인덱스를 걸어놓았다. 이 떄 인덱스는 따로따로가 아니라 동시에 걸어놓는다. 무슨 말이냐 하면, 위 사진처럼 하나의 인덱스당 하나의 컬럼을 거는 것이 아니라, 아래의 사진처럼 하나의 인덱스에 두 개의 컬럼을 묶어놓는 식이다. 그리고 col2 칼럼을 기준으로 CRUD 쿼리를 실행시키면 과연 "Index가 정상적으로 작동할까?" 궁금한 건 못참으니, 한 번 테스트를 해볼까 한다. 참고로 MariaDB 11.2.2 를 사용했다. 테이블, 프로시저 생성 및 초기 데이터 입력 우선 테이블을 생성한다. 각 테이블은 동일하게 9개의 INT 컬럼으로 구성되어 있으며, 서로 다른 인덱스를 설정해 다섯 개의 테이블을 생성했다. 인.. 2024. 1. 16.
ON DELETE(UPDATE) 옵션 프로젝트 진행 전 프로젝트 세팅 과정에서 초기 테이블 생성용 schema.sql 을 작성하고 있었다. 테이블 CREATE 쿼리를 작성하며 외래키를 설정하고 요구사항에 따라 ON DELETE, ON UPDATE 옵션을 설정하는데 문득 의문이 들었다. "나 이게 뭔지 제대로 알고는 쓰나?" 물론 얼추 알기는 안다. 하지만 누군가 "이 옵션이 무슨 옵션이야" 라고 물었을 때 아무 고민 없이 나올 정도로 확실하게 알지는 못한다. 그래서 잠시 반성의 시간을 가졌고, 개념을 확실하게 공부해볼까 한다. 외래 키 (FK, Foreign Key) 외래 키는 데이터베이스 관리 시스템에서 두 테이블 간의 관계를 정의하는 데 사용되는 키이다. 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는 것을 의미한다. 주로 참조 무.. 2024. 1. 10.
[PostgreSQL] 컬럼의 Length를 지정해야 하는 이유 이번 프로젝트에서 데이터 코어 구축 후 데이터 마트까지의 구축을 담당했다. 원래대로라면 데이터 마트 내 테이블의 컬럼들 각각에 length를 부여해줬을 것이다. 하지만 이번에는 구체적인 데이터의 양식이 주어지지 않았고, 그저 협력업체로부터 각 테이블에 들어갈 샘플 데이터 몇 개만 전달받았다. 그래서 데이터의 구체적인 도메인과 Length를 파악할 수 없었다. *협력업체에 문의했는데 자기들도 모른단다. 그래서 어떻게 해야하나 생각을 하던 중 때마침 데이터 마트 구축으로 사용한 DB가 PostgreSQL라는 사실이 생각났다. PostgreSQL은 VARCHAR 등의 칼럼에 굳이 Length를 지정해주지 않아도 됐고, 그래서 컬럼에 length를 지정해주지 않았다. 그러다 감리 진행 중 length를 지정하지.. 2023. 7. 5.
[DB] 격리수준 격리수준 (고립수준, Isolation Level) 트랜잭션의 네 가지 주요 성질 중 하나인 고립성에 관한 내용이다. 트랜잭션들의 직렬성이 보장된다면 서로간의 간섭은 없을 것이다. 하지만 병렬로 수행되는 트랜잭션에는 분명 간섭이 존재하고, 이를 격리수준으로 통제하여 얼마만큼의 간섭을 허용할 것인지를 결정하는 것이다. 고립 수준은 병렬적인 트랜잭션을 어느정도 직렬성을 띄게 만들어준다. 그렇기에 당연히 고립 수준이 낮아지면 동시성은 높아지지만 데이터의 정확성은 떨어지게 되고, 고립 수준이 높아지면 데이터 정확성은 높아지지만 동시성은 저하된다. 4가지 격리 수준 격리 수준에는 네 가지가 있다. 1) Read Uncommited 2) Read Commited 3) Repeatable Read 4) Seriali.. 2021. 5. 30.
[DB & BOOT] 트랜잭션 트랜잭션이란? 데이터베이스의 작업 수행 단위이다. 조금 더 상세하게 말하면, 데이터베이스의 상태를 변경시킬 수 있는 모든 연산들을 의미한다. 트랜잭션은 4개의 성질을 가지고 있다. 독립성 (Isolation) : 동시에 실행되어도 서로 영향을 미치지 말아야 한다. 일관성 (Consistency) : 늘 일관성 있는 상태를 유지해야 한다. 영속성 (Durability) : 트랜잭션이 성공적으로 수행되면 그 상태가 영구적으로 반영되어야 한다. 원자성 (Atomicity) : 한 트랜잭션 내의 작업은 하나의 단위로 처리한다. 즉, 일부만 반영되지 않는다. *독일영원으로 암기 트랜잭션은 위의 4가지 성질을 지키며, DB의 상태를 잘 유지해주어야 한다. 그렇다면 Spring Boot에서는 이 트랜잭션을 어떻게 사.. 2021. 5. 30.
[데이터베이스] JSON과 XML XML (Extensible Markup Language) HTML과 유사한 마크업 언어이다. 기계는 물론 사람도 읽기 편한 구조로 되어있다. HTML이 데이터를 보여주기 위해 개발되었다면, XML은 데이터의 저장과 전달을 위해 만들어졌다. HTML과 달리 XML의 태그는 미리 정의되어 있지 않고, 개발자가 임의로 정의할 수 있다. JSON (JavaScript Object Notation) 데이터를 쉽게 저장하고 전달하기 위해 만들어진 데이터 교환 표준. 자바 스크립트를 기반으로 확장하여 만들어졌다. 그래서 자바스크립트의 객체 표기법을 따른다. XML의 대안으로서 더 쉽게 데이터를 저장하고 전달하기 위해 개발되었다. 텍스트 기반 언어이기에 모든 프로그래밍 언어에서 읽고 사용할 수 있다. 즉, 프로그래밍.. 2021. 4. 6.