MySQL에서 클라이언트 사용자 변수는 영구적으로 유지될 수 없습니다MySQL에서는 클라이언트가 사용자 정의 변수(user-defined variable)를 영구적으로 보유하는 것이 불가능합니다. 그 이유는 MySQL의 사용자 변수가 세션(session) 범위로 동작하기 때문입니다.사용자 변수가 사라지는 이유MySQL에서 사용자 변수는 다음과 같이 특정 클라이언트 연결(세션)에 종속됩니다.SET @my_var = 100;이렇게 선언한 변수는 해당 연결이 살아 있는 동안에만 유효하며, 클라이언트가 연결을 종료하는 순간 그 세션에 할당
MySQL에서 예약어(reserved word)를 테이블 이름이나 컬럼 이름처럼 식별자(identifier)로 사용하려면 반드시 따옴표로 감싸야 합니다. 이때 사용할 수 있는 따옴표의 종류는 ANSI_QUOTES SQL 모드의 설정 여부에 따라 달라집니다.1. ANSI_QUOTES 모드가 비활성화된 경우기본적으로 ANSI_QUOTES 모드가 비활성화되어 있으면 식별자 감쌀 때 사용하는 따옴표 문자는 백틱(`)뿐입니다. 아래는 select라는 예약어를 테이블 이름으로 사용하는 예제입니다.mysql> create table `se
MySQL에는 데이터베이스, 테이블, 인덱스, 컬럼, 별칭(alias), 뷰(view), 저장 프로시저(stored procedure), 파티션(partition), 테이블스페이스(tablespace) 등 다양한 객체가 있으며, 이러한 객체들을 통칭하여 식별자(identifier)라고 부릅니다. MySQL의 모든 식별자는 유니코드(UTF-8) 방식으로 저장되며, 한글과 같은 멀티바이트 문자도 하나의 문자로 계산됩니다.식별자 유형별 최대 길이식별자의 종류에 따라 허용되는 최대 길이는 다음 표와 같습니다. 대부분의 식별자는 최대 64자
LOCATE() 함수의 인수로 전달된 문자열에 부분 문자열이 두 번 이상 포함되어 있는 경우, MySQL은 해당 부분 문자열이 처음 등장하는 위치를 반환합니다. 예시 mysql> Select LOCATE(good,Ram is a good boy. Is Ram a good boy?) As Result; +--------+ | Result | +--------+ | 10 | +--------+ 1 row in set (0.00 sec) 위 예시를 보면 부분 문자열 good은 문자열 안에 총 두 번 등장합니다. 첫 번째 위치
MySQL 열거형(ENUM) 값과 표현식MySQL에서 ENUM(열거형) 컬럼에 저장된 각 값은 내부적으로 인덱스 번호와 연결되어 있습니다. 이때 인덱스는 1부터 시작하며, 빈 문자열()은 0, NULL은 NULL로 처리됩니다.따라서 ENUM 값을 산술 표현식이나 집계 함수에 사용하면, MySQL은 문자열 자체가 아니라 연결된 인덱스 숫자를 기준으로 모든 계산을 수행합니다. 아래 예제를 통해 이 동작 방식을 확인해 보겠습니다.예제 테이블 준비mysql> Select * from Result; +-----+--------+----
MySQL ELT() 함수에서 인덱스 번호가 1보다 작을 때의 반환값MySQL의 ELT() 함수는 첫 번째 인수로 전달된 인덱스 번호가 1보다 작은 경우 NULL을 반환합니다.ELT() 함수는 문자열 목록에서 지정된 인덱스 위치에 해당하는 문자열을 반환하는 함수입니다. 예를 들어 인덱스가 1이면 첫 번째 문자열을, 2이면 두 번째 문자열을 반환합니다. 그러나 인덱스가 0이나 음수처럼 유효 범위를 벗어나면 함수는 NULL을 돌려줍니다.예제다음은 인덱스 번호가 1보다 작은 경우의 동작을 보여주는 예제입니다.mysql> Select
ELT() 함수의 첫 번째 인수는 반드시 정수 값이어야 합니다. 그러나 정수가 아닌 인덱스 번호를 전달하면 MySQL ELT() 함수는 경고(Warning)와 함께 NULL을 반환합니다.예제mysql> select ELT('one','Ram,is,good,boy')As Result;+--------+| Result |+--------+| NULL |+--------+1 row in set, 1 warning (0.00 sec)mysql> Show Warnings;+---------
EXPORT_SET() 함수는 MySQL에서 검색 및 데이터 변환에 활용되는 문자열 함수 중 하나입니다. 아래의 기본 문법을 통해 이 함수가 어떻게 동작하는지 쉽게 이해할 수 있습니다.문법EXPORT_SET(bits, on, off, separator, number of bits)각 인수의 의미는 다음과 같습니다.bits: 정수를 비트로 변환한 값으로, 각 비트가 1인지 0인지 판별하는 대상이 됩니다.on: 함수의 두 번째 인수로, 따옴표 안에 임의의 값을 지정할 수 있으며 첫 번째 인수의 비트 값이 1일 때 반환됩니다.off: 함
MySQL의 EXPORT_SET() 함수는 인수로 전달된 값 중 하나라도 NULL이면 결과로 NULL을 반환합니다. 즉, 다섯 개의 인수 중 어느 하나가 NULL이라면 함수는 정상적인 비트 문자열 대신 NULL을 돌려줍니다.EXPORT_SET() 함수란?본격적으로 살펴보기 전에 함수의 기본 구조를 간단히 짚어보겠습니다.EXPORT_SET(bits, on, off[, separator[, number_of_bits]])bits: 비트 단위로 검사할 숫자 값on: 해당 비트가 1(설정됨)일 때 표시되는 문자열off: 해당 비트가 0(해
MySQL은 ENUM 값을 내부적으로 정수 키(인덱스 번호)로 저장하여 각 ENUM 멤버를 참조합니다. 즉, ENUM으로 선언한 문자열 목록의 첫 번째 항목은 1, 두 번째 항목은 2처럼 내부적으로 번호가 매겨집니다.ENUM 컬럼에 숫자를 저장하면 안 되는 이유ENUM 컬럼에 정수 값을 직접 저장하지 말아야 하는 가장 큰 이유는, MySQL이 입력된 숫자를 값(value)이 아니라 인덱스(index)로 해석하기 때문입니다. 개발자가 특정 값을 저장하려는 의도였더라도 MySQL은 이를 멤버 목록의 위치 참조로 처리해 버리기 때문에,
MySQL에서 ENUM 데이터 타입에 기본값을 지정하려면 DEFAULT 속성을 활용하면 됩니다. DEFAULT 속성을 사용하면 해당 ENUM 컬럼에 값이 명시적으로 지정되지 않았을 때 자동으로 기본값이 적용됩니다.쉽게 말해, INSERT 문에서 해당 필드의 값을 생략하더라도 DEFAULT 뒤에 지정된 값이 자동으로 삽입됩니다. 다만 주의할 점은 DEFAULT 표현식에는 함수를 사용할 수 없다는 것이며, ENUM 데이터 타입의 기본값으로는 NULL과 빈 문자열()도 허용됩니다.기본값 설정 예제아래 예제는 학생 정보를 저장하는 테이블을
MySQL EXPORT_SET() 함수의 다섯 번째 인수인 비트 수(number of bits)의 기본값은 64입니다. 따라서 다섯 번째 인수에 별도의 값을 지정하지 않으면, MySQL은 최대 64비트까지 자동으로 검사한 후 그 결과를 반환합니다.아래 예시를 통해 이 동작 방식을 쉽게 이해할 수 있습니다.예시mysql> SELECT EXPORT_SET(5, 'Y','N',' ')\G*************************** 1. row ***********************
MySQL의 ENUM 타입은 특정 값 목록 중 하나만 저장할 수 있어 편리하지만, 사용 시 반드시 알아두어야 할 몇 가지 중요한 제약 사항이 있습니다. 이 글에서는 MySQL ENUM의 대표적인 한계 두 가지를 예제와 함께 살펴보겠습니다.1. 열거형 값으로 표현식(Expression)을 사용할 수 없음ENUM의 멤버 값에는 문자열 리터럴만 직접 지정할 수 있습니다. 결과가 문자열로 평가되는 표현식이라 하더라도 열거형 멤버로 사용하는 것은 허용되지 않습니다.예제예를 들어, 문자열을 반환하는 CONCAT() 함수를 사용하면 쿼리 실행이
MySQL의 EXPORT_SET() 함수에서 다섯 번째 인수인 비트 수(number of bits)의 기본값은 64입니다. 따라서 다섯 번째 인수에 별도의 값을 지정하지 않으면 MySQL은 최대 64비트까지 비트를 검사한 후 그에 해당하는 결과를 생성합니다.반면, 네 번째 인수인 구분 기호(separator)를 생략하면 MySQL은 결과를 출력할 때 기본적으로 쉼표(,)를 구분 기호로 사용합니다.예시mysql> SELECT EXPORT_SET(8,Y,N)\G *************************** 1. row ***
MySQL에서 ENUM(열거형) 컬럼에 빈 값을 삽입할 수 있는지 여부는 SQL 모드 설정에 따라 달라집니다. SQL 모드가 TRADITIONAL, STRICT_TRANS_TABLES 또는 STRICT_ALL_TABLES로 설정되어 있지 않은 경우에만 빈 값이 허용됩니다. 반대로 이러한 엄격 모드가 활성화되어 있으면 MySQL은 빈 값을 거부하고 오류를 발생시킵니다.참고로 각 ENUM 값에는 내부적으로 인덱스 값이 할당되는데, 빈 값()의 인덱스 값은 0입니다.빈 값 처리 예제먼저 SQL 모드를 Traditional로 설정한 상태에
ENUM에 잘못된 값 삽입 시 MySQL의 동작 방식 MySQL에서 ENUM 열에 허용된 목록에 없는 잘못된 값을 삽입할 때의 결과는 SQL 엄격 모드(Strict Mode) 설정 여부에 따라 크게 달라집니다. 엄격 모드가 비활성화된 경우: 오류를 발생시키지 않고 대신 빈 문자열()을 삽입하며, 경고(warning)만 표시됩니다. 엄격 모드가 활성화된 경우: 잘못된 값이 삽입되면 오류를 발생시키고 INSERT 작업 자체가 실패합니다. 예제 1: 엄격 모드가 비활성화된 경우 엄격 모드를 비활성화한 상태에서 ENUM에 유효하지 않은
FIELD() 함수의 인수로 전달되는 문자열 목록에 NULL과 다른 값들이 함께 조합되어 있으면 출력 결과에 상당한 변화가 발생합니다. 다음 예제를 통해 이를 자세히 살펴보겠습니다.예제 mysql> Select FIELD(good,Ram,is,good,boy); +---------------------------------------+ | FIELD(good,Ram,is,good,boy) | +---------------------------------------+ |
FIND_IN_SET() 함수는 이름 그대로 문자열 목록에서 지정한 문자열을 검색하는 MySQL 내장 함수입니다. 쉼표로 구분된 여러 개의 부분 문자열로 이루어진 문자열 목록 안에서 특정 문자열이 존재하는지 확인하고, 존재한다면 해당 문자열의 위치(인덱스)를 숫자로 반환합니다.기본 문법FIND_IN_SET(검색할_문자열, 문자열_목록)첫 번째 인수인 검색할_문자열은 찾고자 하는 문자열이며, 두 번째 인수인 문자열_목록은 쉼표(,)로 구분된 부분 문자열들을 포함하는 문자열입니다.사용 예제mysql> Select FIND_IN_S
WHERE 절에서 FIND_IN_SET() 함수를 사용하면, 인수로 지정된 문자열 목록 안에서 검색 문자열을 찾아 조건에 일치하는 행의 모든 컬럼 값을 조회할 수 있습니다. 이 함수는 주로 쉼표(,)로 구분된 문자열 목록에서 특정 값이 포함되어 있는지 확인할 때 유용하게 사용됩니다. 검색 문자열이 발견되면 해당 위치의 인덱스를 반환하고, 찾지 못하면 0을 반환합니다.예제다음 예제에서는 Student 테이블에서 Name 컬럼의 값이 Gaurav인 행들의 컬럼 정보를 조회합니다. 이때 FIND_IN_SET() 함수는 Name 컬럼의 값
MySQL의 FIND_IN_SET() 함수는 인자 중 하나라도 NULL이면 결과로 NULL을 반환합니다. 즉, 검색 문자열(search string) 또는 문자열 목록(string list) 중 어느 하나가 NULL인 경우뿐만 아니라, 두 인자가 모두 NULL일 때에도 역시 NULL이 반환됩니다.FIND_IN_SET()이 NULL을 반환하는 경우FIND_IN_SET() 함수는 기본적으로 첫 번째 인자(검색할 문자열)가 두 번째 인자(쉼표로 구분된 문자열 목록) 내에서 몇 번째 위치에 있는지를 반환하는 함수입니다. 하지만 다음과 같은