mysqlcheck와 --analyze 옵션으로 테이블 분석하기MySQL Server에서 특정 데이터베이스에 속한 모든 테이블을 명령줄에서 한 번에 분석하려면 mysqlcheck 클라이언트 프로그램에 --analyze 옵션을 함께 사용하면 됩니다. 이 명령은 데이터베이스 내부에서 ANALYZE TABLE 문을 실행하는 것과 동일한 효과를 가지며, 키 분포 통계를 생성·갱신하여 쿼리 옵티마이저가 더 나은 실행 계획을 세우도록 돕습니다.기본 문법mysqlcheck -u root --analyze db_name-u root : 분석 작업
MySQL에서 특정 데이터베이스에 포함된 테이블 목록을 확인하려면 mysqlshow 클라이언트 프로그램을 데이터베이스 이름과 함께 사용하면 됩니다. 별도로 MySQL 서버에 접속하지 않고도 명령줄에서 바로 결과를 확인할 수 있어 매우 편리합니다.기본 문법Mysqlshow -u root db_name [pat_matching]옵션 설명db_name: 테이블 목록을 조회하려는 데이터베이스의 이름입니다.pat_matching (선택 사항): 특정 패턴과 일치하는 테이블만 조회할 때 사용합니다. 패턴을 지정하지 않으면 해당 데이터베이스에
UPDATE 문을 이용해 MySQL 사용자 비밀번호를 변경하려면 mysql 데이터베이스의 user 테이블을 직접 수정해야 합니다. 기본적인 문법은 다음과 같습니다.문법(Syntax)USE mysql;UPDATE userSET authentication_string = PASSWORD(new_password)WHERE user = user_name AND host = host_name;앞부분의 두 구문(USE mysql;)은 항상 공통적으로 사용됩니다. MySQL 사용자 비밀번호를 변경하려면 먼저 mysql 데이터베이스를 선택한 뒤,
MySQL에서 계정 권한과 관련된 작업을 수행한 후에는 FLUSH PRIVILEGES 문을 사용해 서버에 권한 테이블(grant tables)을 다시 로드하도록 지시해야 하는 경우가 있습니다. 이는 메모리에 캐시된 권한 정보를 최신 상태로 갱신하여, 변경된 권한이 실제로 적용되도록 만드는 과정입니다.FLUSH PRIVILEGES 실행 방법권한 테이블을 다시 로드하는 방법은 크게 두 가지입니다.SQL 문 실행: MySQL 클라이언트에서 FLUSH PRIVILEGES; 문을 실행합니다.mysqladmin 유틸리티 사용: 셸(Shell)
MySQL의 SUBSTRING_INDEX() 함수는 count 인수로 음수 값을 받을 수 있습니다. 이 경우 함수는 구분자를 왼쪽부터 세지 않고, 마지막 구분자를 기준으로 오른쪽에 있는 부분 문자열을 반환합니다.즉, count 값이 양수일 때는 앞에서부터 해당 개수만큼의 구분자 앞까지의 문자열을 반환하지만, 음수일 때는 뒤에서부터 구분자를 세어 그 오른쪽 전체를 반환하게 됩니다.예제다음 예제는 www.google.com 문자열에서 .(점)을 구분자로 사용하고, count 값으로 각각 -2와 -1을 지정한 결과입니다.mysql>
MySQL의 STRCMP() 함수는 이름 그대로 두 개의 문자열을 서로 비교하는 데 사용됩니다. 이 함수를 호출할 때는 비교 대상이 되는 두 문자열을 반드시 인수로 모두 전달해야 합니다.STRCMP() 함수 기본 문법STRCMP(Str1, Str2)Str1: 비교에 사용되는 첫 번째 문자열입니다.Str2: 비교에 사용되는 두 번째 문자열입니다.기본 사용 예제mysql> Select STRCMP(MySQL, MySQL); +--------------------------+ | STRCMP(MySQL, MySQL) | +-----
개요MySQL에서 두 개 이상의 행이 같은 값을 가지고 있는지 확인하려면 SELF JOIN(자기 조인) 기법을 활용하면 됩니다. 이 글에서는 실제 예제를 통해 JOIN 쿼리로 특정 컬럼의 중복 값을 찾아내는 방법을 알아보겠습니다.예제 데이터 준비먼저 아래와 같은 stock_item 테이블이 있다고 가정해 보겠습니다. 이 테이블의 quantity 컬럼에는 중복 값이 존재합니다. 즉, Notebooks와 Pencil은 수량 40으로, 그리고 Shirts, Shoes, Trousers는 수량 29로 값이 겹쳐 있습니다.mysql>
MySQL에는 Oracle이나 SQL Server에서 제공하는 MINUS(또는 EXCEPT) 연산자가 기본적으로 지원되지 않습니다. 하지만 걱정할 필요가 없습니다. LEFT JOIN과 IS NULL 조건을 조합하면 MINUS 쿼리와 동일한 결과를 손쉽게 얻을 수 있습니다.MINUS 쿼리란?MINUS는 첫 번째 쿼리 결과 집합에서 두 번째 쿼리 결과 집합에 포함된 행들을 제거한 차집합을 반환하는 연산자입니다. MySQL에서는 이를 직접 사용할 수 없기 때문에 LEFT JOIN을 활용한 우회 방법이 널리 사용됩니다.예제 데이터 준비이해
MySQL의 STRCMP() 함수는 주로 문자열을 비교하는 데 사용되지만, 숫자 값도 인수로 전달하여 비교할 수 있습니다. 이때 숫자 값은 따옴표 없이 그대로 인수로 넘겨주면 됩니다.STRCMP() 함수의 반환 값STRCMP() 함수는 두 인수를 비교한 결과를 다음과 같이 반환합니다.0: 두 값이 같을 때1: 첫 번째 값이 두 번째 값보다 클 때-1: 첫 번째 값이 두 번째 값보다 작을 때NULL: 인수 중 하나라도 NULL일 때숫자 값을 사용한 예제아래 예제는 숫자 값을 인수로 사용하여 STRCMP() 함수를 호출하는 다양한 경우
테이블에 있는 두 개의 열 데이터 값을 서로 비교하려면 MySQL STRCMP() 함수의 인자로 비교할 열 이름들을 전달하면 됩니다. 예를 들어, 학생 이름과 과목별 취득 점수가 담긴 marks라는 테이블이 있다고 가정해 보겠습니다. 특정 학생이 두 과목에서 어느 과목의 점수가 더 높은지, 낮은지, 아니면 같은지 확인하고 싶다면 STRCMP() 함수를 다음과 같이 활용할 수 있습니다.사용 예제mysql> Select Name, STRCMP(Math,Hindi) from student marks WHERE Name = '
MySQL의 SUBSTRING_INDEX() 함수는 주어진 문자열에서 지정한 구분자(delimiter)가 N번째로 나타나기 전까지의 부분 문자열을 반환하는 함수입니다. 몇 번째 등장 위치를 기준으로 자를지는 인자를 통해 지정할 수 있으며, 이메일 도메인 추출, URL 파싱, CSV 형태 데이터 분리 등 다양한 상황에서 유용하게 활용됩니다.문법(Syntax)SUBSTRING_INDEX(Str, delim, count)각 인자의 의미는 다음과 같습니다.Str: 부분 문자열을 추출할 대상이 되는 원본 문자열입니다.delim: 문자열 내에
MySQL SUBSTRING_INDEX() 함수가 동일한 문자열을 출력으로 반환하는 경우MySQL의 SUBSTRING_INDEX() 함수는 count 인수의 값이 구분자(delimiter)가 문자열에 나타나는 총 횟수보다 클 경우, 입력된 문자열을 그대로 출력으로 반환합니다.다음 예시를 통해 이 동작을 확인할 수 있습니다:mysql> SELECT SUBSTRING_INDEX(www.google.co.in, ., 4); +---------------------------------------------+ | SUBSTRING_I
MySQL에서 문자열 길이를 측정하는 OCTET_LENGTH() 함수는 문자열의 길이를 바이트(byte) 단위로 반환하기 때문에 LENGTH() 함수의 동의어(synonym)입니다.OCTET_LENGTH() 함수의 기본 문법이 함수의 기본 문법은 다음과 같습니다.OCTET_LENGTH(Str)여기서 Str은 바이트 단위의 길이를 구하고자 하는 문자열을 의미합니다.멀티바이트(Multi-byte) 처리 특성OCTET_LENGTH() 함수는 LENGTH() 함수와 마찬가지로 멀티바이트 안전(multi-byte safe)하지 않습니다. 즉
MySQL 서버를 시작하는 방법은 크게 두 가지가 있습니다. 각각의 방법을 자세히 살펴보겠습니다.1. 명령줄(Command Line)을 이용한 시작MySQL 서버를 실행하려면 mysqld 프로그램을 구동해야 합니다. 명령줄에서 다음과 같이 입력하면 서버를 시작할 수 있습니다.C:\mysql\bin>mysqldmysqld 명령을 입력하면 명령 창에 별도의 메시지가 출력되지 않습니다. 이는 오류가 아니라 정상적인 동작으로, MySQL 서버가 백그라운드에서 조용히 실행되고 있다는 의미입니다. 따라서 화면에 아무 변화가 없더라도 서버
MySQL 서버가 활성 상태인지 확인하는 방법MySQL 서버가 정상적으로 작동 중인지(활성 상태인지) 확인하고 싶다면 mysqladmin 프로그램을 사용하면 됩니다. mysqladmin은 MySQL에서 기본으로 제공하는 관리 도구로, 서버의 상태 점검부터 각종 관리 작업까지 명령줄에서 손쉽게 수행할 수 있습니다.ping 옵션으로 서버 상태 확인하기서버가 살아 있는지 확인하는 가장 간단한 방법은 ping 옵션을 사용하는 것입니다. 명령 프롬프트(터미널)에서 다음과 같이 입력합니다.C:\mysql\bin> mysqladmin -u
SOUNDEX() 함수는 문자열에 대해 Soundex 코드를 반환하는 MySQL 함수입니다. Soundex는 영어 발음을 기준으로 이름을 색인화하기 위한 음성 알고리즘(phonetic algorithm)으로, 철자가 달라도 발음이 비슷한 단어나 이름을 검색할 때 매우 유용하게 활용됩니다.SOUNDEX() 함수의 기본 문법MySQL에서 SOUNDEX() 함수를 사용하여 검색하기 위한 적절한 구조는 다음과 같습니다.SOUNDEX(Str)여기서 Str은 Soundex 문자열을 얻고자 하는 대상 문자열을 의미합니다.사용 예제mysql>
MySQL의 RIGHT JOIN(오른쪽 조인)은 LEFT JOIN과 작동 방식이 매우 유사하지만, 두 테이블을 처리하는 순서가 반대라는 점이 핵심 차이입니다. RIGHT JOIN을 사용하면 오른쪽 테이블의 모든 행이 결과 집합에 반드시 포함됩니다. 만약 오른쪽 테이블의 특정 행이 왼쪽 테이블에서 일치하는 행을 찾지 못하면, 결과에서 왼쪽 테이블에 해당하는 컬럼들은 NULL 값으로 채워집니다. 예제용 샘플 데이터 준비 RIGHT JOIN의 동작 원리를 쉽게 이해하기 위해, 다음과 같은 데이터를 가진 두 개의 테이블 tbl_1과 t
키워드 없이 JOIN을 사용하면 어떻게 될까?MySQL에서 쿼리를 작성할 때 RIGHT 또는 LEFT 키워드를 생략하면, MySQL은 해당 쿼리를 INNER JOIN으로 간주하여 결과를 반환합니다. 그 이유는 RIGHT JOIN, LEFT JOIN, INNER JOIN 사이의 유일한 차이점이 바로 RIGHT 또는 LEFT 키워드의 유무이기 때문입니다.이를 쉽게 이해하기 위해 다음과 같은 데이터를 가진 두 개의 테이블 tbl_1과 tbl_2를 예로 들어 살펴보겠습니다.mysql> Select * from tbl_1; +----+
데이터 기반 테이블 관계와 조인의 필요성데이터베이스를 설계하다 보면 테이블 간의 관계가 명시적인 외래 키로 정의되지 않고, 데이터 값 자체에 의존하는 경우가 있습니다. 이런 상황에서는 일반적인 방식으로 테이블을 조인하기 어렵지만, SELECT 목록에서 CASE 문을 활용하면 다양한 조인 가능성을 손쉽게 처리할 수 있습니다.예제 테이블 소개먼저 학생 정보를 담고 있는 Student_Detail 테이블을 살펴보겠습니다.mysql> Select * from student_detail; +----+---------+ | Id | Na
LEFT JOIN으로 두 테이블 값 빼기MySQL에서 두 테이블에 저장된 값을 서로 빼야 할 때 LEFT JOIN을 활용하면 간단하게 해결할 수 있습니다. 이 글에서는 실제 예제를 통해 두 테이블의 값을 뺀 차이를 구하는 방법을 단계별로 살펴보겠습니다.예제 테이블 준비먼저 상품의 현재 가격과 이전 가격을 각각 저장한 두 개의 테이블을 준비합니다.mysql> Select * from value_curdate; +----+----------+-------+ | Id | Product | Price | +----+---------