본문 바로가기
관리자

Programming-[Backend]/Database

(18)
[TIL] 😎 MYSQL 필드 최대 길이 정의 varchar 255 vs 191 varchar 255 이유 MYSQL에서 필드의 최대 길이를 정의할 때 varchar(255)로 지정하는게 일반적이였다. 이것은 참조 링크에 따르면 MYSQL에서 메모리 용량을 8비트(256)에 맞추고 오래된 database와 호환하기 위해서 등이였다고 한다. 그리고 MYSQL에서 varchar로 된 필드를 indexing하기 위한 최대 용량을 767 byte로 잡아놨었다. 이것은 utf-8 기준이였고 767/3 = 255.666...이 되기 때문에 varchar 255로 정의하는게 관례였다. 3으로 나누는 이유는 utf-8 기준으로 모든 글자들이 3바이트에 포함되었기 때문이었다. varchar 191 이유 그러다가 이모지 🚀까지 포함하는 utf8mb4 collation 규칙이 적용되면서 한 글자에 4바..
[TIL] 여러 where 조건 한번에 조회하기. multi column related id query join 상황 base_table에 a, b컬럼이 FK로 잡혀있고, 중복된 항을 count로 구한 결과가 아래와 같을 때 다시 base_table에서 a_id, b_id를 갖는 id 값을 조회할려면 어떻게 해야할까? 다시 말해 (a_id, b_id) = (9002, 3145), ...인 Row들의 각 id 값을 구하고 싶은 경우 어떻게 해야할까 해결 방법 with 구문(또는 서브쿼리)로 원래 SQL문을 감싸고, 기존 테이블과 join을 하되 on절에 원하는 조건을 기입하면 된다. with tmp as (select count(id), a_id, b_id from base_table bt where 1 = 1 and deleted is null group by a_id, b_id having count(id) > ..
[Oracle] Oracle Xe 다운로드 및 설치, 기본 계정 설정, sql plus, IntelliJ 연결하기(IO Error : The Network Adaptor ...) 1. Oracle 데이터베이스 Oracle은 여러 종류의 관계형 데이터베이스 관리 시스템(RDBMS) 중 하나이다. 구매 및 유지 보수 비용이 크지만 그만큼 확실한 안정성과 유지보수를 보장받을 수 있기 때문에 대기업이나 공공기관에서 많이 사용한다. 데이터베이스 관리 시스템(DBMS)들은 SQL 표준을 준수하기 때문에 어떤 DBMS 사용하더라도 큰 문제는 없으나, DBMS 별로 기능이나 문법이 조금씩 달라서 가장 널리 쓰이는 Oracle DBMS를 사용하는 것이 처음 학습에 좋다. Oracle XE 버전 개요 Oracle XE(Oracle Express Edition) 버전은 공개 소프트웨어로 4GB의 메모리와 4GB의 데이터 파일까지 무료로 사용할 수 있다. 2. 다운로드 및 설치 아래 링크에 들어가서 ..
[TIL][링크] yyyyMMddhh24miss, MSSQL CONVERT 변환 코드 표 yyyyMMddhh24miss 은 Oracle에서 사용하는 날짜/시간 타입이다. 20220216175803 (2022-02-16 17:58:03) 형식으로 저장된다. 사외 시스템과 api를 연동하는 문서에 해당 단어가 적혀있어서 찾아보게 되었다. SQL dialect별 해당 포맷으로 날짜값을 추출하는 식은 아래와 같다. (참조1) MSSQL SELECT CONVERT(CHAR(8), GETDATE(), 112) + REPLACE(CONVERT(CHAR(8), GETDATE(), 108), ':', '') Oracle SELECT TO_CHAR(SYSDATE, 'yyyymmddhh24miss') FROM DUAL MSSQL 날짜 변환표 - 참조 2 번호 쿼리 결과 코드 0 CONVERT(CHAR(19), ..
[TIL][PostgreSQL][에러] : connection to server at "localhost" (127.0.0.1), port 5432 failed: Connection refused (0x0000274D/10061) Is the server running on that host and accepting TCP/IP connections? 에러 해결 -참조1 윈도우의 경우, 작업 관리자에서 postgreSQL service가 실행되고 있는지 확인한다. 실행되지 않고 있다면 우클릭 해서 "시작" 하면 된다. 해결2 postgreSQL 설치 파일 내부에 postmanager.pid 파일이 postgreSQL을 종료했음에도 남아있다면, 삭제하면 된다. 참조1 https://stackoverflow.com/questions/40532399/unable-to-connect-to-server-for-postgres
[TIL] MSSQL like 구문 한글 검색 MSSQL에서 like 구문으로 한글을 조회할 때, 조회가 안되면 검색어 앞에 N을 붙여주면 된다. 이렇게 하면 UNICODE로 ENCODING을 해준다고 한다. 참조 https://stackoverflow.com/questions/4251765/how-to-use-like-statement-with-unicode-strings
[TIL] MSSQL 날짜값 지정, CONVERT, DATEPART(DATE_FORMAT), GROUP BY alias 1. SQL 구문 날짜값이 포함된 MSSQL 쿼리문을 작성한다. 1 2 3 4 5 6 7 SELECT A1, CONVERT(varchar(10), a.updated_at, 20) AS date, CONVERT(varchar(10), DATEPART(dw, a.updated_at)) AS dayOfWeek FROM absolute AS a JOIN .... ON .... WHERE ..... GROUP BY CONVERT(varchar(10), a.updated_at, 20), DATEPART(dw, a.updated_at) ORDER BY CONVERT(varchar(10), a.updated_at, 20); Colored by Color Scripter cs 2. CONVERT(포맷(길이), 날짜값, ..
트랜잭션이란 2. 트랜잭션의 성질 1. 트랜잭션의 범위는 커넥션을 기준으로 한다. 트랜잭션은 클라이언트(app)과 DB간의 연결을 의미하는 커넥션을 기준으로 정의된다. 만약 아래의 그림과 같이 각 커넥션 1, 2를 따라 트랜잭션이 발생하는 과정을 생각해보자. 트랜잭션1 내부의 method에 의해서 커넥션2, 트랜잭션2가 실행되고 commit된 상황이라면 마지막에 트랜잭션1을 롤백하더라도 트랜잭션2의 commit 사항은 롤백되지 않는다. 이것은 트랜잭션의 범위가 커넥션을 기준으로 하기 때문이다. 트랜잭션 전파 : 스프링 자바에서의 Transactional 스프링 자바 코드에서 하나의 메서드 내부에서 다른 메서드를 호출하여 사용한다면, 프레임워크에서 지원하는 @Transactional 어노테이션을 이용하여 트랜잭션을 전파할 수 있다. 즉, ..