목록Database (17)
우노
들어가기 앞서, 테이블에 새로운 행이 추가될 때 다른 테이블에도 해당 내용을 자동으로 반영하고 싶다면 트리거(Trigger)를 사용해 해결할 수 있습니다. 데이터베이스의 트리거(Trigger)는 특정 이벤트(예: 삽입, 갱신, 삭제 등)가 발생할 때 자동으로 실행되는 데이터베이스 내의 저장 프로시저입니다. 존재하는 트리거 확인 SHOW TRIGGERS; Trigger_name : 트리거의 이름 Event : 트리거가 작동하는 이벤트 유형 (INSERT, UPDATE, DELETE) Table : 트리거가 연결된 테이블의 이름 Statement : 트리거의 실행 내용 (BEGIN과 END 사이의 SQL 문장) Timing : 트리거가 실행되는 시기 (BEFORE 또는 AFTER) Created : 트리거가..
에러 내용 logger=tsdb.mysql t=2023-09-13T04:45:43.605367314Z level=error msg="Query error" error="Error 1267: Illegal mix of collations (utf8mb4_0900_ai_ci,COERCIBLE) and (utf8mb4_unicode_ci,COERCIBLE) for operation '='” 에러 설명 MySQL에서 콜레이션(collation)은 데이터베이스에서 문자열을 저장하고 비교하는 방법을 정의하는 규칙 세트입니다. 즉, 문자열을 어떻게 비교할지, 정렬할지, 대소문자를 어떻게 다룰지와 같은 문자열 처리 규칙을 결정합니다. 간단한 예를 통해 설명해보겠습니다: 문자열 비교 콜레이션은 두 문자열을..
SQL(Structured Query Language)이란? SQL은 관계형 데이터베이스 유형을 지칭하는 용어입니다. SQL의 특징은 아래와 같습니다. 데이터는 테이블로 구성되며, 각 테이블은 행과 열로 이루어져 있습니다. 정해진 스키마를 사용하여 데이터베이스 테이블을 정의합니다. 데이터의 무결성과 일관성을 유지합니다. 복잡한 쿼리와 다양한 조인 연산에 중점을 둡니다. 행 기반으로 데이터를 저장합니다. 주요 SQL 데이터베이스는 아래와 같습니다. MySQL, PostgreSQL, Oracle, Microsoft SQL Server 행 기반 데이터베이스 데이터를 행 단위로 저장하는 데이터베이스 유형입니다. 행 기반 데이터베이스 저장 구조 예시 실제 테이블 데이터 파일은, 디스크 내부 페이지에 테이블의 ro..
데이터베이스 성능 관리가 필수적인 이유 효과적인 데이터베이스 성능 관리 전략은 사용자 만족도를 높이고 비용을 절감하며 모든 조직의 성공에 실질적으로 기여할 수 있습니다. 데이터베이스 성능 지표 종류 쿼리 성능 지표 데이터베이스 상태 지표 시스템 리소스 성능 지표 캐시 및 인덱스 성능 지표 연결 상태 지표 접근 경합 지표 쿼리 성능 지표 Query Response or Latency 데이터베이스가 쿼리나 요청에 대해 응답하는 데 걸리는 시간을 의미합니다. Slow Queries 실행 시간이 긴 쿼리들을 의미합니다. Most Frequent Queries 가장 빈번하게 실행되는 쿼리들을 의미합니다. 일반적인 쿼리 성능 저하의 원인 비효율적인 조회 종종 SELECT * 와 같이, 필요한 행, 열보다 더 많은 ..
행 기반 데이터베이스 실제 테이블 및 행 기반 데이터베이스 저장 구조 예시 실제 테이블 데이터 파일은, 디스크 내부 페이지에 테이블의 row를 나란히 이어서 저장하고 있습니다. 행 기반 데이터베이스에서 Insert, Update, Delete를 진행할 경우, row(record) 단위로 묶어서 처리할 수 있으므로 효율적입니다. 하지만, 특정 컬럼에 대한 집계는 모든 row(record) 묶음을 조회해야하므로 비효율적입니다. (필요없는 열까지 읽어야 함) ex) 모든 사람의 평균 연령 열 기반 데이터 베이스 실제 테이블 및 열 기반 데이터 베이스 저장 구조 예시 실제 테이블 데이터 파일은, 디스크 내부 페이지에 테이블의 column을 나란히 이어서 저장하고 있습니다. 열 기반 데이터베이스에서 Insert,..
Create/Read/Update/Delete Operations Insert db.collection.insertOne( { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ], status: "D" }, ) db.collection.insertMany([ { item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ], status: "D" }, { item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ], status: "A" }, { item: "planner", qty: 75, t..
Condition AND 조건 db.collection.find({ status : "A", item : "paper" }) pretty ( 데이터를 보기 쉽게 ) db.collection.find({ status : "A", item : "paper" }).pretty() $ pedicate (속성) $and, $or, $in, $lt, $gt.. 등 $and condition db.collection.find({ $and : [ {status : "A"}, {item : "paper"}] }) $or condition status가 A이거나 qty가 60 이하인 것 어떤 상태에 들어갈 땐 항상 중괄호 db.collection.find({$or : [{status:"A"},{qty : {$lt : 60..
Array 요소 접근 find Array안에 해당 value가 포함만 돼 있어도 출력해준다! db.collection.find({ tags : "red" }) $in 해당 value 들 중 하나라도 들어가 있는 애들 출력! db.collection.find({ status : {$in : ["A", "D"]}}) $all 해당 요소가 모두 포함 된 것들을 출력! db.collection.find({ tags : {$all : ["red", "blank"]}}) $nin 해당 요소가 포함 안 된 것들을 출력! db.collection.find({ status : {$nin : ["A", "D"]}}) 해당 요소가 정확히 일치하는 것만 출력! db.collection.find({ tags : ["red", ..
Projection parameter find로 쿼리를 날릴 때 find의 파리미터는 다음과 같다. db.$(collection).find( {filter condition} , {projection parameter}) 각 파라미터는 중괄호로 구분한다. filter condition으로 도큐먼트를 뽑아낸 뒤 projection parameter로 원하는 도큐먼트를 걸러낸다. filter condition 내부 { field : , field : } status가 A인 것을 출력하고 item 과 status를 보여준다! db.collection.find({ status : "A"}, {item : 1, status : 1}) status가 A인 것을 출력하고 _id, status, instock 를 없애..
Cursor 커서 안에서 지속적으로 iteration하면서 보는 것! var cursor = db.collection.find() cursor.hasNext() cursor.next() cursor.objsLeftInBatch() cursor.next() cursor.objsLeftInBatch() iterate a Cursor var cursor = db.collection.find() while(cursor.hasNext()){ print(tojson(cursor.next())); } 도큐먼트 하나씩 출력 var cursor = db.collection.find() cursor.foreach(printjson) 배열로 변환 var cursor = db.collection.find() var curso..