규모가 큰 서비스의 DB구조를 파악하려면 ERD랑 관련 산출물로는 부족할 때가 많다.주로 오라클에서 자주 사용하던 코드조각을 변환해보았다. 1. 컬럼명 or 컬럼 코멘트로 테이블 찾기/*[검색] 컬럼명 , 컬럼 코멘트*/select isc.table_schema, isc.table_name, isc.column_name, col_description(a.attrelid, a.attnum) as column_comment, case when character_maximum_length is null then data_type else data_type || '(' || isc.character_maximum_length || ')' end as data_ty..
SQL
mysql 데이터타입으로 enum이 있는 것을 발견했다.자바에서 유용하게 쓰던 enum 타입이 있어서 코드테이블을 따로 만들지 않고,해당 타입을 사용해볼 요량으로 좀 더 찾아봤는데 단점을 몇가지 발견해서 기록용으로 관련 글들을 스크랩한다. 🙏레퍼런스[번역] MySQL의 ENUM 타입을 사용하지 말아야 할 8가지 이유Java Enum 타입 데이터베이스 저장 형식은 뭐가 좋을까?
▶ 원인PK가 2개인 테이블의 UPDATE문에 WHERE절을 1개만 지정했다문제는 이걸 커밋하고 1시간 후에나 알게 된 것..... 내가 의도했던 것보다 많은 데이터가 바뀌었다.검색해보니 대부분 UPDATE 복구는 10분 이내에 하는 방법이라 나와는 맞지않았다.해서 다음을 위해 특정 시간대로 복구하는 쿼리를 기록한다. -- 복구할 데이터 확인 ( 오늘 오전 8시 기준 )SELECT *FROM 테이블명 AS OF TIMESTAMP(TO_DATE('2022-09-14 08:00', 'YYYY-MM-DD HH24:MI:SS'))ORDER BY 컬럼명;-- 현재 테이터 확인SELECT *FROM 테이블명ORDER BY 컬럼명;ORDER BY는 없어도 되지만 데이터 확인을 위해 넣었다. -- 복구할 데이터로 ..
/*테이블 백업(복사)*/CREATE TABLE 백업테이블명(신규) AS SELECT * FROM 기존테이블명;/*백업본 제약조건 추가 --> 복사하면 제약조건 + 인덱스 유실 */ALTER TABLE 자식테이블ADD CONSTRAINT 제약조건명 PRIMARY KEY (컬럼명, 컬럼명...)ADD CONSTRAINT 제약조건명 FOREIGN KEY (자식컬럼명) REFERENCES 부모테이블 (부모컬럼명);/*제약조건 검색*/SELECT TABLE_NAME ,CONSTRAINT_NAME ,INDEX_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME LIKE '%제약조건명%';/*제약조건 삭제*/ALTER TABLE 테이블명 DROP CONSTRAINT 제약..
설계에 참여한 DB구조는 잘 알고 있었지만,취업 후 이미 서비스 되고 있는 DB의 구조를 파악하는 것이 쉽지 않았다. 특히 규모가 큰 프로젝트일수록 ERD와 테이블정의서로 파악하기 어려웠기 때문에 도움이 되었던 쿼리문을 정리해보았다. 1. 특정 컬럼이 존재하는 테이블, 뷰 검색--컬럼 검색SELECT DISTINCT TABLE_NAME--FROM ALL_TAB_COLUMNS /*전체 테이블*/FROM USER_TAB_COLUMNS /*접속한 계정의 전체 테이블*/WHERE COLUMN_NAME LIKE '%컬럼명%'ORDER BY TABLE_NAME;>> 컬럼명 MEM_ID 검색 결과.>> MEM_ID가 포함된 컬럼을 가진 테이블을 알고 싶었기 때문에 LIKE 문을 사용했지만, 컬럼명을 정확하..
▶ 시퀀스(Sequence)시퀀스 생성CREATE SEQUENCE 시퀀스명시퀀스 다음값 (+1 증가)NEXTVAL('시퀀스명')시퀀스 현재값CURRVAL('시퀀스명')시퀀스 수정SETVAL('시퀀스명', 시퀀스값, [TRUE/FALSE])시퀀스 삭제DROP 시퀀스명SEQ_NAME오라클에서는 시퀀스명.nextval()로 사용했었는데 Postgres는 문법이 다르다.이걸 몰라서 한참 헤맸는데 다음에 참고할 수 있도록 기록해둬야겠다 ▶ 시퀀스 생성 예시CREATE SEQUENCE 스키마.시퀀스명MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE; ▶ 시퀀스 수정 예시SQLnextval() 사용 시 적용되는 값SETVAL('시퀀스명', 1, FALSE)1SE..