반응형

데이터베이스(DB) 12

[SQL] 서브쿼리(Sub Query) - Scalar, Inline View

서브 쿼리 - 쿼리 안에 또 다른 쿼리 (Sub Query) SELET문에 있는 서브 쿼리 - 스칼라 서브쿼리(Scalar Sub Query): 하나의 컬럼처럼 사용 (표현 용도) Ex)SELECT col1, (SELECT ...) FROM절에 있는 서브 쿼리 - 인라인 뷰(Inline View): 하나의 테이블처럼 사용 (테이블 대체 용도) Ex) FROM (SELECT ...) WHERE절에 있는 서브 쿼리 - 일반 서브쿼리: 하나의 변수(상수)처럼 사용 (서브쿼리의 결과에 따라 달라지는 조건절) Ex) WHERE col = (SELECT ...) 1. 스칼라 서브쿼리 (Scalar Subquery) - select 절에서 사용하는 서브쿼리 - scalar는 '한번에 한가지만 처리하는' 이라는 뜻, ..

[MYSQL] 일반적인 오류를 해결하는 유용한 정보

[참고 사이트] - MySQL 일반적인 오류를 해결하는 유용한 정보들 - [MySQL || MariaDB] System,SQL ERROR 모음 원인 및 해결 총 정리 - mysql DB 복원시 경고 메시지 해결 방법 1. 일반적인 오류를 해결하는 유용한 정보들 (1) mysql.sock 관련 에러 mysql.sock 관련 에러가 뜨는 원인은 굉장히 다양하므로 명확한 해결책을 제시하기 어렵습니다. ERROR 2002 (HY000) : Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2) [원인] - MySQL 데몬이 기동이 되어 있지 않은 경우 (MySQL 서버가 실행되지 않은 것) - my.cnf 파일 자체..

[MySQL] Lock wait timeout exceeded

기존에 정상적으로 동작하던 API에서 간헐적으로 Timeout Error가 발생하기 시작했다. Cloudwatch Log에서 다음과 같은 에러 메시지를 확인하였고, 외부 연동 포인트가 아닌 DB에서 발생한 문제 임을 알게 되었다. Lock wait timeout exceeded; try restarting transaction Lock Timeout이 발생하는 원인 1. Transaction 수행 시간이 긴 경우 Lock Timeout이 발생하는 것은 하나의 Transaction이 처리되는 데에 시간이 오래 소요되는 경우이다. 실제로 에러가 간헐적으로 발생하는 API는 Bulk 요청이 주로 이뤄지는 API들이다. Bulk 요청이기 때문에 Transaction 관리를 보다 철저하게 처리해주었는데, Tran..

MySQL Lock 상황 문제 해결

최근 중국어 공부에 집중하느라 개발 관련해서는 느슨하게 지내고 있었는데 장애 처리 상황이 발생하여 해결했던 내용을 공유합니다. 장애 상황 외부에서 받은 데이터를 DB로 업로드 하는 프로그램이 있는데 평소에 잘 실행되던 프로그램이 특정 파일에 대해서만 저장이 되지 않는 문제가 발생하였습니다. 이 프로그램은 Spring Boot로 만들어진 프로그램으로 에러 메시지는 다음과 같은 에러 메시지가 나타납니다. Lock wait timeout exceeded; try restarting transaction 이런 상황이 되면 많은 개발자의 반응은 "조금 전까지 잘 돌아가던 프로그램이었어요! 왜 안돌아가는지 모르겠어요?" 일 것입니다. 그리고 timeout이 발생했으니 DB 서버 성능에 문제가 있는 것이 아닌가 하는..

[MySQL] isolation level 종류 및 특징

※ isolation level (Transaction 격리 수준) - 동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정 하는 레벨 - 격리 수준 : Read Uncommitted, Read Committed, Repeatable Read, Serializable - 격리 수준이 높아질수록 동시성도 떨어지는 것이 일반적 Read Uncommitted (Dirty Read) Read Committed ※ Repeatable Read : 하나의 트랜잭션 내에서 동일 select 쿼리를 실행했을 때는 항상 같은 결과를 가져와야 한다는 정합성 정의 (select를 한 후 재차 하는 사이에 데이터 변경이 있어서 동일 select ..

MariaDB - 암호화, 복호화

MariaDB - 암호화, 복호화 AES 대칭키 알고리즘의 암호화 기능 단방향과 달리 양방향은 평문을 암호문으로 바꾼 후() 다시 암호문을 암호화 키를 이용해 평문으로 바꿀 수 있다. 암호화와 복호화 같은 키 사용 = 대칭키(비공개키) 알고리즘 암호화와 복호화 다른 키 사용 = 비대칭키(공개키) 알고리즘 양방향 암호화 문법 EX) '01234567'이라는 비밀번호를 'abc'라는 키값으로 암호화 (키값은 대소문자 구분하여 사용) HEX(AES_ENCRYPT('평문 암호', '암호화 키 값')) SELECT HEX(AES_ENCRYPT('01234567','abc')) AS 암호화 FROM DUAL; 실제 DB 테이블 삽입시에는 INSERT 구문 사용 결과 복호화 문법 AES_DECRYPT(UNHEX('암..

MariaDB- sql 쿼리문 (일간/주간/월간/연간) 게시글 출력

sql 쿼리문 (일간/주간/월간/연간) 게시글 출력 Ex) (추천수 + 조회수) 베스트 글 출력시 각 sql 쿼리문 뒤에 ORDER BY 구문에 (추천수컬럼+조회수컬럼) 추가 후 Limit 구문을 넣어 베스트 게시글 출력 Ex) 베스트 게시글 5개 출력 SELECT 날짜컬럼 FROM 테이블명 WHERE 날짜컬럼 BETWEEN DATE_ADD(NOW(), INTERVAL -1 DAY) AND NOW() ORDER BY (추천수컬럼+조회수컬럼) Limit 0, 5 일간 게시글 출력 SELECT 날짜컬럼 FROM 테이블명 WHERE 날짜컬럼 BETWEEN DATE_ADD(NOW(), INTERVAL -1 DAY) AND NOW() ORDER BY `정렬 컬럼` Ex) SELECT bdate FROM board..

DB 데이터 출력 시간 설정하기 DATE_FORMAT()

DB 데이터 출력 시간 설정하기 DATE_FORMAT() SELECT NOW() FROM DUAL; SELECT NOW() FROM DUAL; 년-월-일 시:분:초 출력 SELECT DATE_FORMAT(NOW(), '%Y-%M-%D') FROM DUAL; SELECT DATE_FORMAT(NOW(), '%y-%m-%d') FROM DUAL; SELECT DATE_FORMAT(NOW(), '%Y-%M-%D') FROM DUAL; SELECT DATE_FORMAT(NOW(), '%y-%m-%d') FROM DUAL; 출력시 대소문자 구별 년-월-일 출력 SELECT DATE_FORMAT(NOW(), '%H:%I:%S') FROM DUAL; SELECT DATE_FORMAT(NOW(), '%h:%i:%s')..

반응형