본문 바로가기

DataBase20

MySQL에서 문자 결합하는 방법: 다양한 함수와 사용 예시(feat. CONCAT, CONCAT_WS, GROUP_CONCAT) MySQL에서는 데이터베이스 내에서 문자열을 결합해야 하는 경우가 많습니다. 특히 여러 열의 데이터를 하나로 합치거나 특정 형식의 문자열을 만들어야 할 때 이러한 기능이 필요합니다. 이 글에서는 MySQL에서 문자열을 결합하는 다양한 방법을 다루고, 각각의 특징과 사용 방법을 상세히 소개하겠습니다.1. CONCAT 함수1.1. 기본 사용법CONCAT 함수는 가장 일반적으로 사용되는 문자열 결합 함수입니다. 여러 개의 문자열을 결합하여 하나의 문자열로 반환합니다.SELECT CONCAT('Hello', ' ', 'World') AS result;-- 결과: 'Hello World'위 예제에서는 CONCAT 함수를 사용하여 'Hello', ' ', 'World'를 결합했습니다.1.2. NULL 값 처리CON.. 2024. 10. 2.
Index Scan과 Index Seek 데이터베이스 성능 최적화에 있어서 인덱스는 매우 중요한 역할을 합니다. 하지만 인덱스를 사용해도 그 방식에 따라 성능에 큰 차이가 있을 수 있습니다. 여기서는 데이터베이스 쿼리에서 자주 나오는 두 가지 인덱스 접근 방식인 Index Scan과 Index Seek의 차이를 설명하고, 각 방식이 언제 발생하는지, 그리고 어떤 상황에서 사용되는지에 대해 실제 테이블과 인덱스 예제를 통해 자세히 알아보겠습니다.Index Scan vs Index Seek의 차이Index Scan과 Index Seek은 데이터베이스 인덱스를 활용하는 방식에서 큰 차이를 보입니다.Index Scan: 인덱스를 처음부터 끝까지 순차적으로 읽습니다. 이는 일반적으로 쿼리의 조건에 해당하는 인덱스가 없거나, 조건이 너무 범위가 넓을 때 .. 2024. 9. 17.
MongoDB와 MySQL에서의 트랜잭션과 동시성 관리: NestJS와 함께 살펴보는 실전 가이드 목차트랜잭션이란 무엇인가?MongoDB에서 트랜잭션과 동시성 관리MySQL에서 트랜잭션과 동시성 관리MongoDB와 MySQL의 트랜잭션 비교장점과 단점결론1. 트랜잭션이란 무엇인가?1.1 트랜잭션의 개념**트랜잭션(Transaction)**이란 데이터베이스에서 한 번에 수행되는 작업의 단위를 의미합니다. 이는 여러 작업이 하나의 논리적 단위로 묶여 한꺼번에 처리되며, 모든 작업이 성공하거나 모두 실패하는 **원자성(Atomicity)**을 보장합니다.트랜잭션의 주요 속성은 다음과 같습니다:Atomicity(원자성): 트랜잭션 내의 모든 작업은 성공하거나 모두 실패합니다.Consistency(일관성): 트랜잭션이 완료되면 데이터베이스는 일관된 상태를 유지해야 합니다.Isolation(격리성): 각 트랜잭.. 2024. 9. 16.
MySQL에서의 잠금 메커니즘과 격리 수준: 공유 잠금(S LOCK)과 배타 잠금(EXCLUSIVE LOCK)의 동작 및 문제 발생 시나리오 데이터베이스 관리 시스템(DBMS)에서 트랜잭션의 무결성과 일관성을 보장하기 위해 다양한 잠금 메커니즘과 트랜잭션 격리 수준이 사용됩니다. MySQL은 이러한 잠금 메커니즘과 격리 수준을 통해 다중 사용자 환경에서 발생할 수 있는 데이터 충돌과 무결성 문제를 방지합니다. 이 글에서는 MySQL의 공유 잠금과 배타 잠금이 어떻게 작동하는지, 그리고 격리 수준에 따라 어떤 문제가 발생할 수 있는지에 대해 깊이 있게 살펴보겠습니다. 이를 위해 각 격리 수준에서 발생할 수 있는 문제를 예제와 함께 설명하고, 이를 테스트하기 위한 TypeScript 코드를 제공하겠습니다.잠금 메커니즘의 기본 개념잠금(lock)은 트랜잭션이 특정 데이터에 접근할 때, 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 하는 메커니즘입.. 2024. 8. 19.
SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점 데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server)MySQL에서 B-Tree 인덱스란 무엇인가요?SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점 SQL Server에서 인덱스는 데이터 검색 성능을 최적화하는 데 중요한 역할을 합니다. 클러스터드 인덱스와 비클러스터드 인덱스는 각각의 특성과 용도가 다르며, 이를 이해하는 것이 데이터베이스 성능 향상에 도움이 됩니다. 이번 글에서는 SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점과 작동 원리를 자세히 살펴보겠습니다. Clustered Index란?클러스터드 인덱스는 테이블의 데이터 자체가 인덱스 구조에 맞게 정렬되어 저장됩니다. 클러스터.. 2024. 8. 12.
데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server) 데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server)MySQL에서 B-Tree 인덱스란 무엇인가요?SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점데이터베이스 인덱스란 무엇인가요?데이터베이스에서 인덱스는 테이블의 데이터에 대한 검색 속도를 높이기 위해 사용하는 데이터 구조입니다. 인덱스를 사용하면 전체 테이블을 스캔하지 않고도 빠르게 데이터를 찾을 수 있습니다. 인덱스는 책의 목차와 비슷한 역할을 합니다. 목차를 통해 특정 주제를 빠르게 찾을 수 있듯이, 인덱스를 통해 데이터베이스에서 원하는 데이터를 효율적으로 검색할 수 있습니다.MySQL과 SQL Server에서의 인덱스데이터베이스 관리 시스템(DBMS)마다 인덱스의 구현 방식과 지.. 2024. 8. 12.
MySQL에서 B-Tree 인덱스란 무엇인가요? 데이터베이스 인덱스란 무엇인가요? (MySQL vs. SQL Server)MySQL에서 B-Tree 인덱스란 무엇인가요?SQL Server에서 Clustered Index와 Non-Clustered Index의 차이점MySQL에서 B-Tree 인덱스란 무엇인가요?MySQL에서 가장 일반적으로 사용되는 인덱스 유형은 B-Tree 인덱스입니다. B-Tree 인덱스는 다양한 쿼리 유형에 대해 효율적인 성능을 제공하기 때문에 널리 사용됩니다. B-Tree 인덱스의 구조와 작동 원리에 대해 자세히 알아보겠습니다.B-Tree 인덱스의 개념B-Tree(균형 트리)는 데이터베이스 인덱싱에서 가장 일반적으로 사용되는 데이터 구조 중 하나입니다. B-Tree 인덱스는 데이터를 정렬된 순서로 유지하며, 검색, 삽입, 삭제가.. 2024. 8. 12.
Redis를 이용한 트랜잭션 처리와 분산 락 구현 Redis는 뛰어난 성능과 간단한 사용법으로 많이 사랑받는 인메모리 데이터 구조 저장소입니다. Redis의 다양한 기능 중에서도 트랜잭션과 분산 락은 분산 시스템에서 중요한 역할을 합니다. 이번 포스트에서는 SETNX 명령어를 중심으로 Redis에서 트랜잭션을 처리하고 분산 락을 구현하는 방법을 설명하겠습니다.Redis 트랜잭션 처리Redis에서 트랜잭션을 처리하기 위해 MULTI, EXEC, DISCARD, WATCH와 같은 명령어들을 사용할 수 있습니다. 하지만 간단한 경우에는 SETNX 명령어를 사용하여 트랜잭션 없이도 원자적으로 값을 설정할 수 있습니다.SETNX 명령어SETNX는 "SET if Not Exists"의 약자로, 주어진 키가 존재하지 않을 때만 값을 설정합니다. 이는 경쟁 상태를 방.. 2024. 7. 16.
MySQL 현재 시각 조회(NOW, SYSDATE) 두 함수 모두 현재의 시간을 반환하는 함수로서 같은 기능을 수행한다. 하지만 NOW()와 SYSDATE() 함수는 작동 방식에서 큰 차이가 있다. 하나의 SQL에서 모든 NOW() 함수는 같은 값을 가지지만 SYSDATE() 함수는 하나의 SQL 내에서 호출되는 시점에 따라 결괏값이 달라진다. CASE 1. NOW() CASE 2. SYSDATE() NOW() 함수를 사용한 첫 번째 예제에서는 두 번의 NOW() 함수 결과가 같은 값을 반환했다. 하지만 두 번째 예제에서 사용된 SYSDATE() 함수는 SLEEP() 함수의 대기 시간인 2초 동안의 차이가 있음을 알 수 있다. SYSDATE() 함수는 이러한 특성 탓에 두 가지 큰 잠재적인 문제가 있다. 첫 번째로는 SYSDATE() 함수가 사용된 SQL.. 2022. 7. 5.
MYSQL 사용자 계정 추가 (비밀번호관리) 1. MySQL 사용자 계정 추가 (인증플러그인) 2. MYSQL 사용자 계정 추가 (비밀번호관리/잠금) 기본 예 1 2 3 4 5 6 7 8 9 CREATE USER 'user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'password' REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFUALT PASSWORD REQUIRE CURRENT DEFUALT; cs 3. PASSWORD EXPIRE 비밀번호의 유효 기간을 서정하는 옵션이며, 별도로 명시하지 않으면 default_password_lifetime 시스템.. 2022. 6. 28.
MySQL 사용자 계정 추가 (인증플러그인) 1. MySQL 사용자 계정 추가 (인증플러그인) 2. MYSQL 사용자 계정 추가 (비밀번호관리/잠금) 기본 예 1 2 3 4 5 6 7 8 CREATE USER 'user'@'%' IDENTIFIED WITH 'mysql_native_password' BY 'password' REQUIRE NONE PASSWORD EXPIRE INTERVAL 30 DAY ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFUALT PASSWORD REQUIRE CURRENT DEFUALT; cs 1. IDENTIFIED WITH (인증플러그인) MySQL 서버의 기본 인증 방식을 사용하고자 한다면 IDENTIFIED BY 'password' 형식으로.. 2022. 6. 27.
MySQL 인덱스 스캔(Index Scan) Index Range Scan 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. 이 과정을 인덱스 탐색(Index Seek)이라고 한다. 탐색된 위치부터 필요한 만큼 인덱스를 차례대로 쭉 읽는다. 이 과정을 인덱스 스캔(Index Scan)이라고 한다 읽어 들인 인덱스 키와 레코드 주소를 이용해 레코드가 저장된 페이지를 가져오고, 최종 레코드를 읽어온다. Index Full Scan 인덱스의 처음부터 끝까지 모두 읽는 방식을 인덱스 풀 스캔이라고 한다. 대표적으로 쿼리의 조건절에 사용된 컬럼이 인덱스의 첫 번째 카럼이 아닌 경우 인덱스 풀 스캔 방식이 사용된다. 인덱스의 크기는 테이블의 크기보다 작으므로 직접 테이블을 처음부터 끝까지 읽는 것보다는 인덱스만 읽는 것이 효율적이다. 인덱스뿐만 아니라 .. 2022. 5. 11.
[MS-SQL] Comment 수정 컬럼 수정 EXEC sp_updateextendedproperty @name = N'MS_Description', @value = '내용 입력', @level0type = N'Schema', @level0name = dbo, @level1type = N'Table', @level1name = '테이블명', @level2type = N'Column', @level2name = '컬럼명'; 테이블 수정 EXEC sp_updateextendedproperty @name = N'MS_Description', @value = '내용', @level0type = N'Schema', @level0name = dbo, @level1type = N'Table', @level1name = '테이블명'; 2022. 2. 25.
[MS-SQL] UNION 연산자 집합 이론에서 두 집합(A와 B라고 가정) 간의 UNION은 A와 B에 있는 모든 요소들을 포함하는 집합니다. 다시 말해, 입력 집합들 중 어디라도 속해있는 요소들은 결과 집합에 속한다는 것이다. T-SQL에서 UNION 연산자는 두 입력 쿼리의 결과를 하나로 결합한다. 행이 어떤 집합에 있는지는 상관없이 UNION 연산자의 결과에는 보여지게 된다. T-SQL은 두가지 형태의 UNION 연산자를 지원하는데, UNION ALL과 UNION(암시적으로 DISTINCT 처리)이 이에 해당한다.UNION ALL 멀티셋 연산자UNION ALL 멀티넷 연산자는 두 입력 쿼리로부터 만들어지는 입력 멀티넷에 잇는 어떠한 행이라도 모두 결과에 포함시켜서 반환한다. 이때 행을 비교하거나 중복을 제거하는 등의 작업을 수행하.. 2016. 2. 16.
[MS-SQL]공통 테이블 식(CTE) 공통 테이블 식(CTEs)은 파생 테이블과 비슷한 또 다른 형태의 기본 테이블 표현ㅅ기이다. 파생 테이블과 유사하지만, 파생 테이블보다는 더 많은 장점을 제공한다. CTE는 WITH 절을 이용해서 정의되며 다음과 같은 일반적인 형태를 따른다. 12345WITH [()]AS ( );cs참고 : T-SQL에서 WITH 절은 다양한 방식으로 사용된다. 따라서 WITH 절이 CTE를 정의하기 위해서 사용된다고 명확하게 명시할 필요가 있다. 즉 WITH 절이 CTE를 정의할 때 사용되는 경우에는, 동일한 배치 내에서 WITH 절앞에 또는 다른 구문이 있다면 반드시 세미콜론을 표기해줘야 한다. 겉으로 보기에는 파생 테이블과 CTE 간에는 차이가 거의 없어 보일 수도 있다. 그러나 파생테이블과 비교했을 때, CTE를.. 2016. 2. 12.