728x90

mariadb 26

[MariaDB] MariaDB 서버 타임존 변경하기

MariaDB에서 current_timestamp로 데이터 입력 당시 시간을 자동으로 찍을 때는 MariaDB 서버 시간에 따라 찍힌다. 그런데 만약 MariaDB 서버 시간이 UTC(협정 세계시, universal time coordinated)로 설정되어 있다면, DB에 들어가있는 시간은 우리가 기대한 시간과 다를 수 있다. 이런 경우에는 /etc/mysql/mariadb.conf.d 에 있는 50-server.cnf 파일을 수정해주면 된다. (참고로 개발환경에 따라 경로와 파일명은 차이가 있을 수 있습니다. 저는 우분투 18.04, MariaDB 10.01 기준으로 설명하고 있습니다.) default-time-zone = '+9:00' [mysqld] 아래에 위와 같은 한 줄을 추가해주면 Maria..

[MariaDB] Group by 로 그룹화된 그룹의 갯수

다음 테이블은 학생의 학점을 보여주고 있습니다. 먼저 Group by로 학점별로 그룹을 지어준 후 각 그룹에 속한 학생의 수를 카운트해보겠습니다. SELECT grade, COUNT(*) FROM student GROUP BY grade; 위와 같은 쿼리를 주면 A학점이 6명, B학점이 7명, ..., F학점 2명임을 한눈에 알 수 있습니다. 만약 Group by로 그룹화된 그룹의 갯수를 알고 싶다면 어떻게 해줘야할까요? 즉, 지금 총 6개의 그룹이 있는데 그 6을 알아내고 싶은 것입니다. 이때는 다음과 같이 쿼리를 주면 됩니다. SELECT COUNT(S.grade) FROM (SELECT grade, COUNT(*) FROM student GROUP BY grade) AS S; 우리가 알고 싶었던 그..

[MariaDB] Order by, 여러 개로 정렬하기 (더 중요한 것을 앞에)

결혼 정보업체에 등록되어 있는 남자회원의 정보가 다음과 같다고 가정하겠습니다. 이름(name), 연봉(salary), 키(height), 착함(goodness) 정도가 기록되어 있습니다. 만약 A라는 여성이 원하는 결혼 상대를 볼 때 연봉, 딱 하나만 본다면 연봉 순으로 정렬하면 됩니다. SELECT * FROM partner ORDER BY salary; 오름차순으로 잘 정렬된 것을 확인하실 수 있습니다. 만약 연봉이 높은 사람부터 보고 싶다면 뒤에 DESC를 붙여주면 됩니다. DESC는 descending을 줄인 것입니다. SELECT * FROM partner ORDER BY salary DESC; 여자 A는 심뚱뚱 씨를 선택할 것입니다. 여자 B는 남자를 볼 때 1순위로는 키를 보고, 2순위로는 ..

[MariaDB] SELECT 한 것을 INSERT 하기, INSERT INTO ... SELECT문

다음과 같은 테이블(test)이 있다고 가정하겠습니다. >> SELECT * FROM test; 또한 다음과 같은 테이블(test1)이 있습니다. col1 컬럼과 col2 컬럼으로 구성되어 있는데 현재 비어있습니다. >> SELECT * FROM test1; test 테이블에 있는 모든 행들을 test1 테이블에 그대로 넣어주고 싶다면 어떻게 해야할까요? 이럴 때는 INSERT INTO ... SELECT문을 활용하면 됩니다. >> INSERT INTO test1 SELECT * FROM test; >> SELECT * FROM test1; test의 모든 행들이 test1에 모두 잘 들어간 것을 확인하실 수 있습니다.

[MariaDB] 스토어드 프로시저 사용법

오늘은 스토어드 프로시저(stored procedure)에 대해서 알아보도록 하겠습니다. 스토어드 프로시저는 일련의 SQL문들을 하나로 묶어서 한 번에 수행할 수 있도록 도와주는 기능입니다. 스토어드 프로시저는 다음과 같이 만듭니다. DELIMITER // CREATE PROCEDURE 프로시저명() BEGIN SQL문 ... SQL문 END // DELIMITER ; 호출할 때 사용할 이름을 만들어 주고, BEGIN과 END // 사이에 SQL 문들을 넣어주면 됩니다. 그리고 생성한 프로시저를 호출할 때는 다음과 같이 명령을 주면 됩니다. CALL 프로시저명(); 한 번 예시를 보여드리겠습니다. test 데이터베이스에 student라는 테이블이 있는 상황이라고 가정하겠습니다. 위와 같이 프로시저를 만들..

[MariaDB] enum 데이터 타입

enum이라는 데이터 타입은 조금 독특합니다. 어떤 컬럼의 데이터 타입이 만약 enum이라면 컬럼 정의시 열거된 값들만 입력이 가능해집니다. 예를 들기 위해 우선 다음과 같은 테이블을 생성했습니다. CREATE TABLE person ( id tinyint(1) NOT NULL AUTO_INCREMENT, name char(4) NOT NULL, favorite_color enum('파랑', '빨강', '초록') NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 여기서 favorite_color라는 이름의 컬럼의 데이터 타입은 enum으로 되어 있습니다. 그 안에는 '파랑', '빨강', '초록'이 담겨 있습니다. 이 뜻은 favorite_..

[MariaDB] LIKE를 사용하여 특정 문자열 검색하기

대부분의 웹사이트의 경우 검색기능을 제공하고 있습니다. 왜냐하면 수많은 데이터에서 내가 필요한 정보를 검색없이 찾아가는 것은 거의 불가능하기 때문입니다. 오늘은 테이블에서 특정 문자열이 포함된 행을 읽어서 보여주는 것에 대해 알아보도록 하겠습니다. 우선 다음과 같은 행들이 담겨져 있는 article이라는 이름의 테이블이 있다고 가정하겠습니다. 이 테이블에서 title 컬럼에 "코로나"라는 문자열이 담긴 행들을 읽으려면 다음과 같이 쿼리문을 작성해주면 됩니다. SELECT * FROM article WHERE title LIKE '%코로나%'; 이번에는 contents 컬럼에 "햄버거"라는 문자열이 포함된 행들을 읽어보겠습니다. 만약 title 컬럼 또는 contents 컬럼에 "코로나"가 포함된 행들을 ..

[MariaDB] GROUP BY 사용 예제(+ HAVING)

오늘은 group by와 having의 기능에 대해 알아보도록 하겠습니다. 다음은 예제를 위한 테이블입니다. 참고로 위 테이블을 만들고 행들을 쌓기 위해서 다음과 같은 쿼리들이 순차적으로 필요했습니다. 제가 만든 예제를 그대로 따라하고 싶은 분은 복사해서 붙여넣어주세요. CREATE TABLE student (id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(10) NOT NULL, grade VARCHAR(10) NOT NULL, PRIMARY KEY(id)); INSERT INTO student (name, grade) VALUES ('심교훈', 'C'); INSERT INTO student (name, grade) VALUES ('황병일', 'B'); INSER..

[MariaDB] 데이터베이스 백업 및 복구하기

어떠한 원인에 의해 잘 실행되던 DB 서버가 혹여나 날아가 버릴 수도 있기 때문에, 주기적으로 데이터베이스를 백업해주는 것은 중요합니다. 오늘은 MariaDB를 백업하고 복구하는 방법에 대해 정리해보도록 하겠습니다. 백업 1. 전체 데이터베이스 백업 우선 DB 서버내 존재하는 모든 데이터베이스를 백업하고자 하면 터미널에서 다음과 같이 명령해주면 됩니다. mysqldump -u[아이디] -p[패스워드] --all-databases > [백업파일명].sql ex) mysqldump -ukyohoonsim -p1234 --all-databases > backup_all_db.sql 2. 하나의 데이터베이스 백업 여러 데이터베이스 중에서 하나의 데이터베이스만 백업하고 싶다면 다음과 같이 명령해주면 됩니다. my..