Programming/MySQL 13

MySQL 중복 데이터 조회 및 삭제 방법(GROUP BY HAVING)

mysql 중복 데이터 조회(group by having) 및 삭제 방법 데이터를 관리하다 보면 중복된 데이터를 찾아야 하는 경우가 있는데요. 해당 포스팅은 MySQL에서 'GROUP BY HAVING'을 사용하여 중복 데이터를 조회하는 방법과 삭제하는 방법에 대해 정리한 내용입니다. CREATE TABLE `users` ( `idx` bigint NOT NULL AUTO_INCREMENT, `last_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `first_name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, `birth` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL, PRIMAR..

Programming/MySQL 2023.10.21

MySQL Workbench, ERD 생성 방법(+ zero or one 설정 방법)

MySQL Workbench, ERD 생성 방법 ERD란, Entity Relationship Diagram의 약자로 Entity 개체의 관계를 표시하는 다이어그램을 말합니다. (ER 다이어그램이라고도 부릅니다.) ERD는 데이터베이스의 구조를 한눈에 알아보기 위해 사용되는데요. 'Draw.io', 'DBDiagram.io' 등 웹 또는 프로그램을 통해 사용할 수 있는 ERD 툴이 존재하지만, RDBMS로 MySQL을 사용하는 경우 Workbench 자체적으로 ER 다이어그램 툴이 내장되어 있습니다. 해당 포스팅에서는 'MySQL의 Workbench를 통해 ERD를 생성하는 방법'에 대해 정리하였습니다. (작업 환경은 MySQL Workbench 8.0.30 Version입니다.) Workbench를 통..

Programming/MySQL 2023.08.27

mysql nextval 사용하는 방법 (oracle sequence 기능)

MySQL nextval 사용 방법 (Oracle Sequence) MySQL의 경우 AUTO INCREMENT를 사용하여 레코드에 대한 값이 중복되지 않고 1씩 증가하도록 할 수 있는데요. 때문에 AUTO INCREMENT는 기본 키(PRIMARY KEY)에 주로 사용됩니다. 하지만 Oracle의 경우 AUTO INCREMENT 기능이 없으며, 해당 역할을 Sequence가 하게 되는데요. 오라클에서 시퀀스(Sequence)는 '유일한 값을 생성해 주는 오라클 객체'이며, '값을 순차적으로 증가시켜 주기 위해서 사용되는 기능'입니다. 해당 포스팅은 mysql에서 필요에 의해 oracle의 sequence 기능을 사용해야 하는 경우 oracle의 sequence 기능인 'nextval를 사용하는 방법'에..

Programming/MySQL 2023.05.13

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경(DATE_ADD, DATE_SUB, CONVERT_TZ)

MySQL 날짜, 시간 더하고 빼기 및 타임존 변경 mysql에서 날짜 또는 시간을 더하고 빼는 함수인 'DATA_ADD', 'DATA_SUB'와 타임존을 변경할 때 사용되는 'CONVERT_TZ' 함수에 대한 사용법을 정리한 내용입니다. 0. time zone 확인 SELECT @@time_zone, @@system_time_zone; 먼저 위 쿼리를 통해 mysql에 설정된 time_zone 정보를 조회하였습니다. time_zone이 SYSTEM으로 설정되어 있다는 것은 별도의 타임존이 설정되어 있지 않다는 것이며, 시스템의 타임존을 사용하겠다는 것인데요. 해당 테스트 환경에 설정된 mysql의 time zone은 KST(Korea Standard Time)이라는 것을 알 수 있습니다. 1. DATA..

Programming/MySQL 2023.04.07

(mysql, mariadb) general_log를 통한 실행된 쿼리 확인 방법

MySQL, MariaDB general_log를 통해 실행된 쿼리 확인 방법 mysql이나 mariadb를 사용하다 보면 실행된 쿼리를 확인하고 추적해야 할 때가 있는데요. 그럴 때 'general_log'를 통해 클라이언트로부터 접속된 접속 내용 및 수행된 모든 쿼리를 확인할 수 있으며, 아래 내용을 통해 자세한 방법을 살펴보도록 하겠습니다. * general_log 외 log 종류에 대해서 간단하게 살펴보면 아래와 같습니다. General Query Log: 클라이언트의 접속 내용 및 수행된 모든 쿼리를 기록합니다. Error Log: MySQL 시작, 종료 과정, 비 정상적인 종료 시 발생하는 트랜잭션 메시지, 쿼리 실행 중 발생하는 에러 등을 기록합니다. Binary Log: 데이터 조작어(DM..

Programming/MySQL 2023.01.28

mysql 자동 백업 설정 방법 (ubuntu server)

데이터베이스를 착각해서 데이터를 한번 날리고 나서야(정말 다행히도 개발서버) 백업 설정을 잘해야겠구나를 느끼게 되었습니다. 이후 운영환경의 서버에서는 데이터베이스 생성 후 가장 먼저 백업부터 설정하게 되었는데요. 해당 포스팅은 ubuntu 서버에서 mysql, mariadb 자동 백업을 설정 방법에 대한 내용입니다. (백업 과정에서 mysqldump 기능이 사용되는데, 해당 기능에 대한 자세한 내용은 따로 정리한 포스팅이 있어서 맨 하단에 링크를 첨부해놓았습니다. 필요하신 경우 참고해주시면 좋을 것 같습니다.) 백업 방식은 크게 '백업을 수행할 스크립트 파일(.sh) 생성', '작업 스케줄러(crontab)를 통해 생성된 스크립트 파일을 스케줄링' 두 가지로 나뉘는데요. 이어지는 내용을 통해 구체적인 데..

Programming/MySQL 2022.12.01

MySQL EXPLAIN 실행 계획을 통한 쿼리 최적화

해당 포스팅은 MySQL의 EXPLAIN 명령어를 통해 쿼리의 실행 계획을 확인하고 이 계획을 바탕으로 쿼리 최적화를 진행해보며 정리한 내용입니다. 1. EXPLAIN을 통한 쿼리 최적화를 진행하게 된 이유 프로젝트가 어느 정도 마무리되고 솔루션화를 진행하는 과정에서 기존에 짜여진 테이블 구조 중 마음에 들지 않는 부분들을 리팩토링하기 위한 계획을 세우고 있었습니다. 결론적으로 리팩토링 계획에 대한 피드백은 '기능상 문제가 있는 거라면 수정하는 것이 당연하겠지만, 정상적으로 작동하고 있다면 테이블 구조를 변경했을 때 발생하는 사이드 이펙트도 충분히 고려되어야 한다.'였습니다. (구조가 바뀌면 해당 테이블을 사용하는 모든 쿼리에 영향을 주게 되고, 결국 해당 부분에 대한 테스트까지 다 다시 진행되어야 합니..

Programming/MySQL 2022.11.12

MySQL JSON 데이터 타입에 활용되는 함수 정리

MySQL 5.7부터 DBMS 차원에서 JSON 데이터 타입이 지원되기 시작했는데요. 아래 내용은 최근 데이터베이스 쿼리에 JSON 함수를 사용해보면서 정리한 내용입니다. - JSON 타입에 저장? TEXT 타입에 저장? DB에 JSON 형식의 데이터를 저장할 때는 고려되어야 할 부분이 있는데요. 바로 해당 데이터를 저장할 컬럼의 타입으로 'JSON Type'을 쓸 것이냐, 'TEXT Type'을 쓸 것이냐, 입니다. MySQL에서 JSON Type에 데이터를 넣는 경우 내부적으로 binary 형태로 저장되며, TEXT Type에 데이터를 넣는 경우에는 string 형태로 저장되는데요. TEXT 타입의 경우에는 Type Conversion 없이 string 형태의 데이터를 그대로 전송해주면 되지만, JS..

Programming/MySQL 2022.10.29

MySQL 계정 생성 및 권한 부여 방법 정리

MySQL을 설치하게 되면 가장 먼저 사용되는 계정이 바로 root 계정인데요. root 계정의 경우 관리자 계정이기 때문에 데이터베이스에 대한 모든 권한을 가지고 있습니다. 때문에 실제 서비스에 사용되는 DB의 경우 실질적인 관리자만 root 계정을 사용하고 이외의 DB 사용자들은 용도에 맞는 권한을 부여받은 계정을 이용하는 것이 데이터베이스를 관리하는 데 있어서 좋은 방식입니다. 그러면 아래 내용을 통해 MySQL에서 계정 생성 및 권한을 부여하는 방법에 대해서 살펴보겠습니다. 1. 접속 및 Database 변경 //mysql 접속 > mysql -u root -p Enter password: //database 변경 > use mysql; //계정 조회 > select host, user, plug..

Programming/MySQL 2022.10.27

MySQL, MariaDB 데이터베이스 백업 및 복구하는 방법

최근 개발 서버 테스트 중 DB 데이터가 손실되는 문제가 발생했습니다. 데이터의 중요성은 알고 있었지만 직접적인 담당 범위가 아니라고 생각했기 때문에 백업에 대해서는 신경을 쓴 적이 없는데요. 이번 기회를 통해 MySQL, MariaDB에서 데이터베이스 백업 및 복구하는 방법과 자동 백업을 설정하는 방법에 대해 살펴보면서 정리한 내용입니다. (해당 포스팅은 mysqldump를 사용한 DB 백업 및 복구 방법에 대한 포스팅이며, 자동 백업에 대한 포스팅은 따로 작성하여 하단에 링크로 추가할 예정입니다.) mysqldump 백업에서 사용되는 mysqldump는 MySQL에서 제공하는 대표적인 덤프 프로그램이며, 논리적 덤프를 수행할 수 있는 도구인데요. 데이터베이스 전체의 덤프부터, 각 데이터베이스 단위의 ..

Programming/MySQL 2022.10.24