면접 단골 문제..!DDL DML DCL를 간단히 설명해볼 수 있나요?DDL , DML , DCL에 해당하는 명령어를 말해줄 수 있나요?데이터베이스에서는 데이터를 다루기 위한 모든 작업을 SQL을 이용해 작업한다.SQL은 다루는 객체나 용도에 따라서 그룹핑할 수 있다.DDL, DML, DCL, TCL로 나누어서 부른다. 1. DDL (데이터 정의어) - 데이터베이스의 구조 정의에 사용하는 언어- create : 테이블을 생성- truncate : 테이블 내용을 삭제 (초기화) > drop과는 다른 개념임- alter : 테이블의 구조 변경 (컬럼 추가 등등)- drop : 테이블 삭제 (truncate는 내용만 삭제, drop은 아예 테이블 삭제) 2. DML(데이터 조작어) - 데이터 조작에 사용하는..
DB
MySQL 서버로 요청된 쿼리는 결과는 동일하지만, 내부적으로 그 결과를 만들어내는 방법은 매우 다양하다. 이런 다양한 방법 중에서 어떤 방법이 최적이고 최소의 비용이 소모될지 결정해야한다. MySQL에서도 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. MySQL 서버를 포함한 대부분의 DBMS에서는 옵티마이저가 이러한 기능을 담당한다. MySQL에서는 EXPLAIN이라는 명령으로 쿼리의 실행 계획을 확인할 수 있는데, EXPLAIN 명령의 결과에는 상당히 많은 정보가 출력된다, 이러한 내용들을 제대로 이해하려면 옵티마이저에 대해 지식을 갖추고 있어야 한다. 스트리밍 방식 -..
클러스터링 인덱스 - 클러스터링 : 클러스터링이란 여러개를 하나로 묶는다는 의미로 주로 사용됨 , 클러스터링 인덱스도 비슷하다 MySQL에서 클러스터링 인덱스는 InnoDV스토리지 엔진에서만 지원하며, 나머지 스토리지 엔진에서는 지원되지 않는다 - 클러스터링 인덱스는 테이블의 프라이머리 키에 대해서만 적용된다 - 즉, 프라이머리 키 값이 비슷한 레코드끼리 묶어서 저장하는 것을 클러스터링 인덱스라고 ㅍ ㅛ현한다. - 프라이머리 키 값에 의해 레코드의 저장 위치가 결정된다 - 프라이머리 키 값으로 클러스터링 된 테이블은, 프라이머리 키 값 자체에 대한 의존도가 상당히 크기 때문에 신중히 프라이머리 키를 결정해야 한다. - 프라이 머리 키 값에 의해 레코드의 저장위치가 결정되므로 클러스터링 인덱스와 클러스터링..
find db.c.find() - 여러개를 추가하면 AND 조건으로 해석된다 db.c.find({"user" : "Joe", "age" : 23}) 반환받을 키 지정 db.c.find({},{"user" : 1, "age" : 1}) - find를 통해 특정한 값만 select하고 싶은 경우 {} 뒤에 매개변수에 원하는 키를 지정하면 된다 - _id는 지정하지 않아도 항상 반환되는데 db.c.find({},{"user" : 1, "_id" : 0}) 위에 처럼 0 으로 설정해서 뽑으면 제외할 수 있다 제약 사항 - 쿼리에는 몇가지 제약이 있는데, 그 중 하나는 데이터베이스에서 쿼리 도큐먼트 값은 반드시 상수(변하지 않는 수)여야 한다 - 아래 예시는 작동하지 않는다 db.c.find({"user" : "..
도큐먼트 삽입 - insertOne : 한 개 삽입할 때 db.movies.insertOne({"title" : "Stand By me"}) => 도큐먼트에 "_id" 키가 추가되고(제공하지 않는 경우) 도큐먼트가 몽고DB에 저장된다. - insertMany : 값을 대량 삽입할 때 db.movies.insertOne( {"title" : "Stand By me1"}, {"title" : "Stand By me2"}, {"title" : "Stand By me3"} ) => insertMany를 사용해서 대량 삽입할 때 배열 중간에 있는 도큐먼트에서 특정 유형의 오류가 발생하는 경우, 정렬 연산을 선택했는지 혹은 비정렬 연산을 건택했는지에 따라 발생하는 상황이 달라진다. => 순서가 정해지지 않았다면 정..
트랜잭션이란? 작업의 완전성을 보장해 주는 것 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상(paritial upadte)이 발생하지 않게 만들어주는 기능이다. 잠금과 트랜잭션의 차이 잠금 : 동시성을 제어하기 위한 기능 트랜잭션 : 데이터의 정합성을 보장하기 위한 기능 * 격리수준 : 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. MySQL에서의 트랜잭션 - 트랜잭션은 꼭 여러개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념이 아니라, 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두개의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적..
본 글은 1회독을 겨우한 자의 정리본으로 도움이 되지 않을 수 있습니다 4-1-1. MySQL 전체 구조 mysql은 크게 mysql 엔진 / 스토리지 엔진으로 나뉘어져 있음 1) mysql 엔진 : 커넥션 핸들러 / SQL 파서 / 전처리기 / 옵티마이저 2) 스토리지 엔진 : mysql엔진은 dbms의 두뇌에 해당하는 처리를 수행, 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담함. mysql 엔진과 스토리지 엔진 사이에 데이터를 주고받는 것이 핸들러 API 4-1-2. mysql 스레딩 구조 - mysql 서버는 프로세스 기반이 아니라 스레드 기반으로 작동함 - 이는 포그라운드 스레드와 백그라운드 스레드로 구분할 수 있음 1) 포그라운..
MongoDB는 우리가 알고있는 MySQL과 다르게 관계형 데이터베이스가 아닌 도큐먼트 지향 데이터베이스다. 아래에서 부턴 편하게 말하기 위해서 MongoDB를 몽고디비라고 부르겠다 1. 손 쉬운 사용 몽고디비는 도큐먼트의 키와 값을 미리 정의하지 않는다. 따라서 고정된 스키마가 없기 때문에 필요할때마다 필드를 추가하거나 제거할 수 있다 -> 개발속도를 향상 시킬 수 있다 2. 확장 가능한 설계 오늘날 저장할 데이터가 증가함에 따라 개발자는 '데이터베이스를 어떻게 확장할 것인가?' 하는 문제에 부딪히는데, 데이터베이스를 결국 확장한다는 것은 더 큰 장비로 성능확장을 할지, 아니면 데이터를 나눠서 분산확장할 지 결정해야하는데, 성능확장이 더 편한길이지만 가격이 비싸고 결국 더는 확장할 수 없는 물리적 한계..