MySQL에서 VARCHAR 타입 컬럼에 저장된 문자열 안에 특정 문자열이 몇 번 등장하는지 확인해야 하는 경우가 있습니다. 이럴 때는 문자열 길이 차이를 활용한 뺄셈 로직을 사용하면 간단하게 해결할 수 있습니다. 핵심 원리는 다음과 같습니다. ① 전체 문자열의 길이에서, 찾고자 하는 문자열을 제거한 후의 길이를 뺍니다.② 그 차이를 찾고자 하는 문자열 자체의 길이로 나누면 등장 횟수가 됩니다. 1. 테스트 테이블 생성 먼저 CREATE 명령어를 이용해 테스트용 테이블을 만들어 보겠습니다. mysql> create table
MySQL 데이터베이스의 전체 레코드 수 확인하기MySQL에서 데이터베이스에 속한 모든 테이블의 레코드(행) 수를 한 번에 구하려면, INFORMATION_SCHEMA.TABLES 뷰의 TABLE_ROWS 컬럼과 집계 함수 SUM()을 함께 사용하면 됩니다. 각 테이블을 일일이 COUNT(*)로 조회하는 것보다 훨씬 간편합니다.전체 레코드 수를 구하는 기본 문법SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = yourDatabaseName
MySQL의 WHERE 절과 HAVING 절, 무엇이 다를까? MySQL에서 데이터를 조회할 때 조건에 맞는 결과만 걸러내기 위해 WHERE 절과 HAVING 절을 사용합니다. 두 절은 비슷해 보이지만 적용 시점과 용도가 명확하게 다릅니다. WHERE 절이란? WHERE 절은 개별 행(row) 단위로 선택 기준을 지정하여 테이블에서 필요한 레코드만 골라내는 필터 역할을 합니다. 즉, 그룹화가 이루어지기 전에 각 행을 대상으로 조건을 평가합니다. HAVING 절이란? HAVING 절은 GROUP BY로 묶인 행 그룹 또는 집계 결과(
MySQL에서 SHA256 해시의 길이 이해하기이름 그대로 SHA256은 256비트 길이의 해시 값을 생성하는 알고리즘입니다. 여기서 중요한 점은 MySQL에 이 값을 저장할 때 어떤 데이터 타입을 사용해야 하는지 아는 것입니다.왜 정확히 64자가 필요한가?SHA256 해시 값은 일반적으로 16진수(hexadecimal) 형태로 표현됩니다. 16진수에서 한 자릿수는 4비트를 나타냅니다. 따라서 256비트 전체를 표현하려면 다음과 같이 계산할 수 있습니다.256 ÷ 4 = 64자즉, SHA256 해시 값을 문자열로 저장하려면 VARC
MySQL에서 데이터베이스, 테이블, 컬럼(열)에 설정된 문자 집합(character set)을 확인하는 방법을 예제와 함께 살펴보겠습니다. 이 글에서는 business라는 데이터베이스와 그 안에 이미 생성되어 있는 student 테이블을 예시로 사용합니다. 1. 테이블의 문자 집합 확인하기 특정 테이블의 문자 집합을 조회하려면 information_schema의 TABLES와 COLLATION_CHARACTER_SET_APPLICABILITY 테이블을 조인하여 확인할 수 있습니다. SELECT CCSA.character_set_
ibdata1 파일이란? 왜 문제가 될까요? MySQL에서 InnoDB 스토리지 엔진을 사용하다 보면 시간이 지날수록 ibdata1 파일이 끝없이 커지는 현상을 겪게 됩니다. 더 큰 문제는, 이 파일은 한 번 커지면 자체적으로 줄어들지 않는다는 점입니다. 이는 MySQL의 오랜 특징 중 하나로, 많은 관리자를 곤란하게 만드는 요소입니다. 예를 들어 대용량 테이블을 삭제하거나 데이터베이스를 정리해도 디스크 공간은 회수되지 않고 ibdata1 파일 안에 그대로 남아 있게 됩니다. ibdata1 파일을 실제로 축소하는 방법 ibdata
MySQL에서 SELECT 문을 활용해 별도의 CREATE TABLE 문 없이 임시 테이블을 만들려면 TEMPORARY 키워드를 사용하면 됩니다.임시 테이블(Temporary Table)의 특징임시 테이블은 현재 세션(session)에서만 보이며, 세션이 종료되면 자동으로 삭제됩니다. 또한 서로 다른 두 세션이 같은 이름의 임시 테이블을 각각 사용할 수 있다는 점도 유용합니다.1. 원본 테이블 생성하기먼저 예제에 사용할 일반 테이블을 생성합니다. mysql> create table MyTableDemo -> (
MySQL에서는 now() 함수를 사용해 현재 시간을 손쉽게 확인할 수 있으며, 여기에 2시간을 더하려면 INTERVAL 값을 지정하면 됩니다. 먼저 시스템의 현재 날짜와 시간을 now() 함수로 조회해 보겠습니다. 1. 현재 날짜 및 시간 확인하기 아래 쿼리를 실행하면 현재 시스템의 날짜와 시간을 확인할 수 있습니다. mysql> select now(); 실행 결과는 다음과 같습니다. +---------------------+ | now() | +---------------------+ | 20
MySQL에서 문자열 데이터에서 숫자 추출하기MySQL 테이블에 저장된 문자열 데이터에서 숫자 부분만 추출하고 싶다면 CONVERT() 함수 또는 정규식(Regular Expression)을 활용할 수 있습니다. 특히 CONVERT() 함수는 하나의 데이터 타입을 다른 타입으로 변환해 주는 역할을 하며, 이를 통해 문자열 속 숫자를 손쉽게 가져올 수 있습니다.예제를 통해 자세히 살펴보겠습니다.1. 테이블 생성하기먼저 예제에 사용할 테이블을 생성합니다.mysql> create table textIntoNumberDemo->
MySQL에서 두 열의 값 교환하기MySQL에서 두 열의 값을 서로 맞바꾸려면 별도의 임시 변수 없이도 간단한 산술 연산 로직으로 처리할 수 있습니다. 핵심 원리는 다음과 같습니다.두 열의 값을 더한 결과를 첫 번째 열에 저장합니다.첫 번째 열(업데이트된 값)에서 두 번째 열의 값을 뺀 결과를 두 번째 열에 저장합니다.업데이트된 두 번째 열의 값에서 첫 번째 열의 값을 빼고 그 결과를 첫 번째 열에 저장합니다.이 규칙을 수식으로 표현하면 다음과 같습니다. 첫 번째 열을 a, 두 번째 열을 b라고 가정하겠습니다.1. a = a + b
MySQL에서 주어진 값이 정수인지 확인하려면 CAST() 함수를 활용할 수 있습니다. 값을 UNSIGNED 타입으로 변환했을 때 값이 숫자가 아니면 0을 반환하고, 숫자라면 해당 숫자 값을 그대로 반환합니다. 이러한 특성을 이용해 값이 정수인지 여부를 판별할 수 있습니다.사례 1 – 숫자가 섞인 문자열 검사문자와 숫자가 혼합된 값을 CAST 함수로 변환해 보겠습니다. mysql> select cast(John123456 AS UNSIGNED); 실행 결과는 다음과 같습니다. 값이 숫자가 아니므로 0이 반환되는 것을 확인할 수
DESC 명령어로 테이블 구조 확인하기MySQL에서 테이블의 스키마(구조)를 확인하는 가장 간단한 방법은 DESC 명령어를 사용하는 것입니다. 이 명령어는 필드 이름, 데이터 타입, NULL 허용 여부, 키 정보, 기본값 등 테이블 구조에 대한 상세 설명을 제공합니다.기본 문법은 다음과 같습니다.DESCRIBE yourDatabasename.yourTableName;실제 적용 예시위 문법을 실제로 적용해 보겠습니다.mysql> DESCRIBE business.student;실행 결과는 다음과 같습니다.+-------+-----
MySQL 서버에서 InnoDB 스토리지 엔진을 사용하는 모든 테이블의 이름을 한눈에 확인하고 싶다면, information_schema.TABLES 뷰를 조회하면 됩니다. 이 뷰에는 현재 MySQL 인스턴스에 존재하는 모든 데이터베이스와 테이블의 메타데이터가 저장되어 있어, 원하는 조건에 맞는 테이블을 손쉽게 필터링할 수 있습니다. InnoDB 테이블 조회 쿼리 아래 쿼리는 ENGINE 값이 InnoDB인 테이블만 골라서 데이터베이스 이름, 테이블 이름, 엔진 타입을 함께 출력합니다. 시스템 데이터베이스(mysql, infor
개요MySQL 데이터베이스에 새 레코드를 INSERT한 후, 자동으로 생성된 ID(AUTO_INCREMENT 값)를 바로 확인해야 하는 경우가 자주 있습니다. 이 글에서는 Python의 pymysql 라이브러리를 사용해 레코드 삽입 직후의 ID를 손쉽게 가져오는 방법을 단계별로 살펴봅니다.사전 준비 사항시작하기 전에 아래 환경이 갖춰져 있어야 합니다.MySQL 8.0.12 이상 설치Python 3.6.3(32비트) 이상 설치pip 명령어를 통해 pymysql 설치pymysql 설치하기터미널 또는 명령 프롬프트에서 다음 pip 명령어
mysql_* 함수들은 현재 폐기(deprecated)되었으며, 더 나은 보안성과 기능을 제공하는 다른 함수들을 사용하는 것이 좋습니다. 참고: 대안으로는 _assoc 또는 _row 계열의 함수를 사용하시기 바랍니다. mysql_fetch_assoc 이 함수는 가져온 행(row)에 해당하는 문자열로 구성된 연관 배열(associative array)을 반환하며, 더 이상 가져올 행이 없으면 FALSE를 반환합니다. 연관 배열은 키(key)와 값(value)의 쌍으로 이루어져 있는데, 여기서 키는 열(column) 이름을 의미하고 값
MySQL 오류 1452란 무엇인가? MySQL에서 두 테이블 간에 외래 키(Foreign Key) 제약 조건을 설정한 후, 자식 테이블(child table)에 레코드를 삽입하려고 할 때 다음과 같은 오류가 발생할 수 있습니다. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails 이 오류는 부모 테이블에 존재하지 않는 값을 자식 테이블에 넣으려고 할 때 발생합니다. 실제 예제를 통해 원인을 자세히 살펴보겠습니다. 오류 재현하기:
MySQL에서 SELECT 문으로 테이블 이름 가져오기MySQL에서 SELECT 문을 사용해 데이터베이스 내 테이블 이름을 조회하려면 information_schema.tables를 활용하면 됩니다. information_schema는 MySQL 서버가 관리하는 메타데이터(테이블 구조, 컬럼 정보 등)를 저장하는 시스템 스키마로, 별도의 권한 설정 없이도 자신의 데이터베이스 정보를 손쉽게 확인할 수 있습니다.기본 문법아래 쿼리는 특정 데이터베이스에 포함된 모든 테이블 이름을 조회하는 기본적인 형태입니다.SELECT Table_nam
MySQL에서 열 값 앞에 문자열을 추가하는 방법MySQL에서 특정 열(column)의 기존 값 앞에 문자열을 추가하려면 CONCAT 함수를 사용하면 됩니다. CONCAT 함수는 UPDATE 문과 함께 사용하여 테이블의 데이터를 손쉽게 수정할 수 있습니다.이번 글에서는 예제 테이블을 만들고, 실제로 열 값 앞에 문자열을 붙이는 과정을 단계별로 살펴보겠습니다.1. 예제 테이블 생성먼저 테스트용 테이블을 생성합니다.mysql> create table PrependStringOnCOlumnName -> ( ->
MySQL에서 LOAD DATA LOCAL INFILE이란?MySQL에서 LOAD DATA LOCAL INFILE 구문은 클라이언트 측의 CSV나 텍스트 파일을 데이터베이스 테이블로 빠르게 가져올 수 있게 해주는 매우 유용한 기능입니다. 하지만 보안상의 이유로 이 기능은 기본적으로 비활성화(OFF)되어 있습니다.서버 측에서는 SET 명령어에 GLOBAL 옵션을 사용하여 이 기능을 손쉽게 활성화할 수 있습니다.1. 현재 local_infile 상태 확인하기먼저 현재 local_infile 변수가 켜져 있는지 확인해 보겠습니다. 아래는
MySQL에서는 WHERE IN 절을 활용하면 하나의 쿼리에 여러 값을 배열처럼 전달할 수 있습니다. 이 방법은 특정 조건에 해당하는 여러 레코드를 한 번에 조회할 때 매우 유용합니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다. 1. 예제용 테이블 생성 먼저 예제에 사용할 새 테이블을 생성합니다. mysql> create table PassingAnArrayDemo -> ( -> id int,