Database 88

[MySQL] GROUP BY

GROUP BY 특정 컬럼을 그룹화한 데이터를 조회할 때 사용한다. 예시 ) SELECT ANIMAL_TYPE FROM ANIMAL_INS GROUP BY ANIMAL_TYPE; HAVING GROUP BY로 그룹화한 데이터는 HAVING 키워드를 사용하여 조건을 걸 수 있다. 💡 WHERE VS HAVING WHERE : 그룹화하기 전의 데이터에 대한 조건문 HAVING : 그룹화한 데이터에 대한 조건문 예시 ) SELECT NAME, count(NAME) FROM ANIMAL_INS WHERE NAME IS NOT NULL GROUP BY NAME HAVING count(NAME) > 1; 이 SQL는 FROM -> WHERE -> SELECT -> GROUP BY -> HAVING 순서로 실행된다...

Database 2022.06.11

[MySQL] MAX, MIN, COUNT, DISTINCT

집계함수 MySQL의 대표적인 집계함수 몇 가지를 간단히 정리한다. MAX 지정한 컬럼 데이터의 최댓값을 가져온다. 문자나 숫자가 대상이며 해당하는 값이 없으면 NULL을 반환한다. SELECT MAX(DATETIME) FROM ANIMAL_INS; MIN 지정한 컬럼 데이터의 최솟값을 가져온다. 문자나 숫자가 대상이며 해당하는 값이 없으면 NULL을 반환한다. SELECT MIN(DATETIME) FROM ANIMAL_INS; count 지정한 컬럼 데이터의 수를 가져온다. SELECT count(*) FROM ANIMAL_INS DISTINCT 지정한 컬럼 데이터에서 중복된 값을 제거한다. SELECT count(DISTINCT NAME) FROM ANIMAL_INS; 참고 문서 https://pro..

Database 2022.06.10

[MySQL] 명령줄에서 쿼리 실행하기

mysql-client를 사용하면 보통 접속할 서버와 사용자 정보를 지정하여, mysql 서버에 접속한 뒤 SQL Query 를 실행한다. 하지만 스크립트 등에서 활용하기 위해 MySQL 서버 접속 후에 쿼리를 실행하는 것이 아니라, 명령 실행 시 쿼리를 전달하여 그 결과를 받고 싶다면 -e, --execute 옵션을 사용하여 실행할 쿼리를 전달할 수 있다. mysql-cli는 옵션으로 전달된 쿼리를 실행하고 종료된다. mysql -e "QUERY" mysql -u -p -e "QUERY" # 예시 mysql -e 'SELECT VERSION();' mysql -u root -p PASSWD test_db -e "SELECT VERSION();" 실행할 쿼리는 따옴표나 큰따옴표로 묶어주어야 한다. 실행할..

Database 2022.04.08

[MySQL] mysql-client local-infile 활성화

2022.04.06 - [MySQL] ERROR 2068 (HY000) : LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 글에서 구글링을 통해 조치한 내용과 공식 문서에서 안내한 내용이 조금 달랐다. 차이점은 다음과 같다. 구글링 공식문서 Group mysql, mysqld client Variables name local-infile loose-local-infile 이전 글에서는 운영 서버에 조치하느라 테스트하지 못했기 때문에, 이 글에서 공식 문서대로 조치했을 때도 mysql-client가 local-infile을 활성화하는지 확인해보려고 한다. 테스트한 서버 OS와 MySQL 클라이언트 버전은 아래와 같다. ..

Database 2022.04.07

[MySQL] ERROR 2068 (HY000) : LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.

리눅스에서 mysql-client를 사용해 LOAD DATA LOCAL INFILE 문을 실행했더니, 아래와 같은 에러가 발생하면서 정상 동작하지 않았다. 실행한 명령어 mysql -u -p -P -h < /path/use.sql 에러 메세지 ERROR 2068 (HY000) at line 2: LOAD DATA LOCAL INFILE file request rejected due to restrictions on access. 공식 문서를 확인해보니 LOAD DATA LOCAL에 잠재적인 보안 문제가 있어 서버와 클라이언트 측에 보안 요구사항이 존재하며, 관련하여 MySQL 서버와 클라이언트 양측에서 local-infile을 활성화하지 않은 게 원인이었다. 관련하여 확인하고 조치해본다. 참고로 버전은 ..

Database 2022.04.06

[MySQL] 테이블 용량 확인

데이터베이스의 스토리지 용량이 계속 문제가 돼서 모든 테이블 용량을 확인하려고 한다. 테이블 용량은 테이블의 상태 정보를 통해 확인할 수 있다. 모든 테이블 용량의 합 모든 데이터베이스, 모든 테이블 용량의 합을 계산한다. SELECT SUM(DATA_LENGTH), SUM(INDEX_LENGTH), SUM((DATA_LENGTH + INDEX_LENGTH)) FROM information_schema.TABLES; # GB 단위로 출력 SELECT ROUND(SUM(DATA_LENGTH /(1024 * 1024 * 1024)), 2) AS 'DATA_SIZE(GB)', ROUND(SUM(INDEX_LENGTH /(1024 * 1024 * 1024)), 2) AS 'INDEX_SIZE(GB)', ROUN..

Database 2022.03.12

[MySQL] Connection 수 확인

최근 MySQL DB에서 Too many connections 에러가 발생하면서 정상적으로 기능하지 않았던 적이 있었다. 데이터베이스와 연결된 클라이언트의 수, 즉 접속 수가 너무 많아서 발생한 에러인데, 최대 접속 가능 수와 현재 접속 수를 확인하는 쿼리를 적어둔다. 최대 접속 가능한 수(max_connections) 확인 SHOW VARIABLES LIKE '%max_connection%'; 이 데이터베이스는 최대 1000개의 접속을 허용한다. 현재 접속 수(Threads_connected) 확인 MySQL에 접속되어 있다는 것은 각각에 대해 Thread가 실행되고 있는 것이다. 따라서 연결된 스레드 수가 바로 접속 수에 해당한다. SHOW STATUS LIKE 'Threads_connected'; ..

Database 2022.03.10

[MySQL/MariaDB] 예약어가 포함된 컬럼/DB 사용

SQL는 다른 프로그래밍 언어와 마찬가지로 예약어가 존재하며, 버전이 업그레이드되면서 새로운 예약어가 추가되곤 한다. 때문에 MySQL/MariaDB 등을 업그레이드할 때에는 업그레이드되는 버전에 추가되는 예약어가 기존의 선언된 데이터베이스명, 테이블명, 컬럼명 등으로 사용되고 있지는 않은지 확인 및 조치해야 한다. 업그레이드 후 쿼리 수행 시 컬럼명이 아닌 예약어로 인식되어 아래와 같은 syntax 에러가 발생하기 때문이다. order는 데이터를 오름차순, 또는 내림차순으로 정렬하여 출력하기 위한 예약어이다. 해결 방법은 어렵지 않다. 방법 1. 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 수정한다. 방법 2. 쿼리 수행 시 문제가 되는 데이터베이스명, 테이블명, 컬럼명 등을 `(grave ac..

Database 2022.01.29

[MySQL/MariaDB] 테이블 목록 확인

이 글에서는 데이터베이스의 테이블 목록 확인 방법을 정리해둔다. 방법 1. 현재 데이터베이스의 테이블 목록 확인 SHOW TABLES; 2. 테이블 이름으로 현재 데이터베이스의 테이블 목록 필터링 SHOW TABLES LIKE 'KEYWORD'; # 예시 SHOW TABLES LIKE 'P%'; SHOW TABLES LIKE 'p%'; 3. 다른 데이터베이스의 테이블 목록 확인 SHOW TABLES FROM ; # 예시 SHOW TABLES FROM information_schema; # 테이블명 필터링 예시 SHOW TABLES FROM information_schema LIKE 'TABLE%'; 4. 데이터베이스의 테이블 상태 정보 확인 SHOW TABLE STATUS; # 특정 데이터베이스의 테이블..

Database 2022.01.09
1 ··· 5 6 7 8 9