Database 76

[MySQL] NOT NULL 날짜 데이터 조회 시 NULL로 보이는 경우

현상 다음과 같이 정의된 테이블이 있다고 하자. CREATE TABLE test ( id int NOT NULL, diagnosis_date datetime NOT NULL DEFAULT current_timestamp, PRIMARY KEY (id, diagnosis_date) ); 스키마에 의하면 diagnosis_date가 NOT NULL인데 데이터를 조회하면 아래와 같이 NULL로 세팅된 데이터가 존재했다. SELECT diagnosis_date FROM test WHERE diagnosis_date IS NULL; 원인 사용하고 있는 Tool이 유효하지 않은 날짜 데이터를 처리하는 방식에 의한 결과일 수 있다. 이런 경우 mysql client를 이용하면 좀더 명확하게 확인할 수 있다. mysq..

Database 2023.07.31

[MySQL] 일반 사용자 비밀번호 변경

개요 DBA로부터 애플리케이션 서비스용 MySQL 계정을 발급받았는데 초기 비밀번호가 임의로 생성한 비밀번호인지 기억하기 힘든 조합으로 되어있다. 비밀번호를 변경해서 사용해도 된다고 하니 직접 변경을 해보려고 한다. MySQL 버전은 8.0.32이다. SET PASSWORD SET PASSWORD문은 MySQL 사용자 계정에 암호를 할당한다. 암호는 명시적으로 지정하거나 MySQL에 의해 임의로 생성할 수 있다. 비밀번호를 변경할 때 REPLACE절을 사용해 현재 암호를 확인하거나 RETAIN절로 보조 암호를 관리할 수 도 있다. SET PASSWORD [FOR user] auth_option [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD] auth..

Database 2023.07.25

[Redis] 비밀번호 설정

개요 인터넷과 연결되어 있는 Ubuntu 서버에 Redis를 설치하고 모든 접속을 허용하게끔 설정해두었더니 기가 막히게도 해킹을 당했다. 저장해두었던 데이터가 사라지고 backup1, backup2…… 이라는 키에 crontab 규칙이 저장되어 있었다. 로그를 보니 타인에 의해 아래와 같은 명령어가 실행된 것 같았다. # 기본 로그 경로 view /var/log/redis/redis-server.log 일단 redis 포트를 변경해두었는데, 비밀번호까지 설정해두려고 한다. 방법을 적어둔다. redis 설정 편집 redis.conf 파일을 열고 SECURITY 항목을 확인하면 친절하게 관련 내용을 주석으로 설명하고 있다. /etc/redis/redis.conf requirepass 설정은 명령을 처리하기 ..

Database 2023.06.23

[redis] 서버 원격 접속 허용

개요 Redis도 MySQL과 비슷하게 기본적으로는 localhost의 접속만을 허용한다. 만약 다른 서버에서 redis를 접속해야 한다면 redis 서버에서 원격 접속을 허용해야 한다. 방법을 적어둔다. + redis는 Ubuntu 20.04 LTS에서 직접 설치했고, 방화벽 등의 네트워크 이슈는 없는 걸로 가정한다. Redis.conf 변경 Redis 서버의 설정 파일은 아래 경로에 위치하고 있다. /etc/redis/redis.conf 파일을 열고 NETWORK 관련 부분을 찾으면 친절하게 주석으로 네트워크 설정에 대한 내용이 포함되어 있다. Redis는 bind 설정이 지정되어 있지 않으면 모든 네트워크 인터페이스의 연결을 수신한다. 따라서 사진의 가장 아랫줄을 주석 처리하기만 하면 된다. 모든 ..

Database 2023.06.20

[Redis] redis-cli로 데이터 읽고 쓰기

개요 2023.06.16 - [Redis] 개념 및 설치/실행에서 redis를 설치해봤는데, 이 글에서는 redis-cli를 이용해 redis를 사용하는 방법을 간단히 정리해보려고 한다. 접속 redis-cli 명령어를 이용해 redis에 접근할 수 있다. 아무 옵션 없이 사용하면 localhost의 6379 port에서 동작하는 redis 서버 접속을 시도한다. redis-cli 접속 서버와 port를 지정하는 방법은 아래와 같다. redis-cli -h localhost -p 6379 기본적으로 대화형 모드로 사용할 수 있다. 데이터 쓰기 SET 명령어에 키와 값을 지정하여 데이터를 저장한다. SET key value [expiration EX seconds|PX milliseconds] [NX|XX..

Database 2023.06.19

[Redis] 개념 및 설치/실행

Redis '키-값' 구조의 비정형 데이터를 저장하고 관리하기 위한 비관계형 데이터베이스 관리 시스템(DBMS)으로, redis라는 이름은 REmote DIctionary Server의 약자이다. 살바토르 산필리포(Salvatore Sanfilippo)가 개발해 현재는 Redis Labs가 지원하는 오픈 소스 기반 데이터베이스다. 주로 데이터베이스, 캐시, 메시지 브로커, 스트리밍 엔진으로써 사용된다. 특징 - 인메모리 데이터베이스 Redis의 가장 큰 특징 중 하나는 데이터를 메모리로 불러와 처리하는 메모리 기반 DBMS, 즉 인 메모리 데이터베이스라는 점이다. 데이터를 디스크나 SSD에 저장하는 데이터베이스보다 빠른 성능을 기대할 수 있다. - 다양한 데이터 타입 strings, hashes, lis..

Database 2023.06.16

[SQL] 문자열 뒤집기 (REVERSE)

REVERSE SQL에서 문자열을 다룰 때 사용하는 함수 중 하나로, 전달받은 문자열의 시작과 끝을 반전시킨 문자열을 반환한다. 2023.06.07 - [SQL] 문자열을 split한 마지막 값 가져오기와 같은 작업을 할 때 사용할 수 있다. 사용법 REVERSE(string) -- 예시 SELECT REVERSE('SQL Tutorial'); 실행 결과 | REVERSE('SQL Tutorial') | | ----------------------- | | lairotuT LQS | 참고 문서 https://www.w3schools.com/sql/func_sqlserver_reverse.asp

Database 2023.06.15

[MySQL] DB 내 모든 테이블 ROW 수 확인하기

개요 단일 테이블에 대한 ROW 수는 특정 테이블에 count 함수를 실행하여 간단하게 구할 수 있다. SELECT COUNT(*) FROM table_name; 실행 결과 | count(1) | | -------- | | 2 | 그렇다면 데이터베이스 내 모든 테이블을 대상으로 행 수를 얻을 때는 어떻게 해야 할까? 방법을 적어둔다. 예시 DB 아래의 DDL로 생성한 예시 데이터베이스를 이용해 테스트해본다. CREATE TABLE test ( id INT ); INSERT INTO test (id) VALUES (1); INSERT INTO test (id) VALUES (2); CREATE TABLE IF NOT EXISTS `docs` ( `id` int(6) unsigned NOT NULL, `re..

Database 2023.06.08

[SQL] 문자열을 split한 마지막 값 가져오기

개요 SQL에서 split 함수를 이용해 구분자로 문자열을 잘랐다. 근데 프로그래밍 언어와 달리 자른 문자열 리스트에서 마지막 값을 가져오려고 -1을 사용하면 의도대로 동작하지 않았다. 어떤 방식으로 쿼리를 작성해야 하는지 적어둔다. 예시 테이블 예시로 어떤 파일들의 경로가 저장된 테이블이 있다고 하자. 이 데이터에서 경로를 제외한 파일의 이름만 가져오고 싶다. | uri | | ---------------------------------------------------- | | Articles/Search/ArtMID/2681/ArticleID/2218/Diet.aspx | | OurStory/MeettheFoodieandtheMD.aspx | | OurMenu.aspx | DDL 더보기 CREATE ..

Database 2023.06.07

[SQL] 정규식 관련 함수

개요 SQL을 이용해 문자열의 포함여부 등을 확인할 때는 LIKE 문을 사용한다. 조건에 해당하는 문자열이 여럿인 경우, OR절로 연결해서 사용하기 때문에 쿼리문이 길어질 수 있다. (LIKE 문은 IN과 함께 사용할 수 없다.) 이런 경우 정규식을 사용하면 보다 간결한 쿼리문을 작성할 수 있다. 이 글에서는 정규식 관련 함수를 정리한다. REGEXP_MATCH REGEXP_MATCH는 문자열과 패턴이 일치하는지 확인하고 일치한 문자열 배열을 반환한다. flags는 함수의 동작을 제어하는데 예로 들어 i가 들어가는 경우 대소문자 구분을 하지 않는다. REGEXP_MATCHES(source_string, pattern [, flags]) -- 예시 SELECT REGEXP_MATCHES('Learning ..

Database 2023.06.06
1 2 3 4 5 ··· 8