전체 글38 [Oracle] 다중 컬럼 PK 설정 방법 PK는 테이블당 하나만 존재 가능하다. 지금까지는 하나의 컬럼에 PK를 걸어줬는데 이전에 개발된 시스템을 뜯어보니 3개의 컬럼이 하나의 PK로 묶여있는 것을 보았다. 여러 컬럼을 하나의 PK로 설정하는 방법은 1. 테이블 생성 시 CREATE TABLE [TABLE 이름] ( [colum 1] varchar(100), [colum 2] number, CONSTRAINT [PK 이름] PRIMARY KEY ([colum 1], [colum 2]) ); 2. 만들어진 테이블 수정 시 ALTER TABLE [TABLE 이름] ( CONSTRAINT [PK 이름] PRIMARY KEY ([colum 1], [colum 2]) ); 2020. 5. 11. [PostgreSQL] 컬럼명(Alias)을 대문자로 출력하는 방법 (MyBatis) 현재 MyBatis에 Oracle로 개발되어 있는 부분을 PostgreSQL로 변경중이다. 아래와 같은 쿼리가 있었는데 select id as ID, pw as PW from tbl_member 그냥 컬럼을 읽어오거나 AS를 사용해도 컬럼명 결과값이 항상 소문자로 출력되었다. 이미 대문자로 사용중인 로직들을 변경하기에는 너무 일이 커지기에 방법을 찾아보았는데 1. MyBatis의 resultMap을 사용한다. 2. Alias를 쌍따음표로 작성한다. select id as "ID", pw as "PW" from tbl_member 간단히 작성하기에는 쌍따음표가 괜찮아 보인다. 2020. 4. 29. [PostgreSQL] 트랜잭션 사용하기 PostgreSQL에서 트랜잭션 작업 시 해당 작업 앞뒤로 BEGIN과 COMMIT을 사용하면 된다. ex) BEGIN; SELECT * FROM TBL_MEMBER; DELETE FROM TBL_MEMBER WHERE 1=1; COMMIT; BEGIN과 COMMIT 사이의 영역을 트랜잭션 블록이라 부름. 필요시 ROLLBACK TO [원하는 지점] 으로 ROLLBACK도 가능하다. ex) MEMBER 테이블의 id가 user123인 컬럼을 지우려고한다. 실수로 전부 다 지워서 다시 세이브포인트로 롤백한 후 이후 남은 작업을 진행한다. BEGIN; SELECT * FROM TBL_MEMBER; SAVEPOINT my_savepoint; ----------------------- 3번 DELETE FROM.. 2020. 4. 29. [MSSQL] 테이블변수와 임시테이블 장단점 1. 임시테이블 임시테이블은 로그아웃 시 삭제되며 현재 DB가 아닌 시스템 DB인 tesmpdb에 저장된다. 만약 크기가 작다면 메모리에만 존재하기도 한다. (29Kbyte 기준) 전역 임시테이블은 모든 곳에서 이 테이블에 대한 참조를 중지하기 전까지 삭제할수 없으며 모든 작업이 참조를 중지 할 때 삭제된다. 장점 - 인덱스 사용 가능 - FK 제외한 모든 제약조건 사용 가능 - ALTER를 이용하여 테이블 변경 가능 - 통계정보 및 Non Cluster Index의 사용으로 대용량 및 조인 쿼리 성능 높이기 가능 단점 - Transaction Overhead, Lock Overhead, Rollback Overhead 존재 - 저장 프로시저에서 사용 시 실행마다 재컴파일, CPU 부하 및 추가적인 확인.. 2020. 4. 27. [MSSQL] 임시테이블 존재여부 확인 임시테이블이 세션이 살아있는 동안 존재하다보니 프로시저 안에서 생성하는 경우 이미 존재한다는 에러가 종종 발생한다. 따라서 임시테이블이 존재할 경우 삭제하고 생성하는 쿼리가 필요하다 IF OBJECT_ID(;tempdb..[임시테이블명]') IS NOT NULL DROP TABLE [임시테이블명] 삭제 뿐만 아니라 임시테이블이 살아 있을 시 필요한 작업 등을 처리 할 수 있다. 2020. 4. 27. [MSSQL] SELECT INTO - 테이블 또는 임시테이블 복사 테이블을 복사하기 위해 주로 아래 방법을 사용하였다. CREATE TABLE TEMP_테이블명( ) INSERT TEMP_테이블 SELECT * FROM 원본테이블 복사할 테이블이 많아지고 컬럼이 수십개가 되니 너무 번거로운 작업이였고 찾아보니 select into를 이용하여 간단하게 복사가 가능하였다. 위 쿼리를 select into로 변경하면 select * into TEMP_테이블 from 원본테이블 [조건문] 만약 임시테이블을 생성하여 복사하고 싶다면 select * into #TEMP_테이블 from 원본테이블 [조건문] #을 붙여주면된다. ##을 붙이면 전역 임시테이블로 생성되면 #은 해당 세션에서만 사용가능하며 ##은 전역으로써 모든 세션에서 사용 가능하다. 임시테이블은 로그아웃 전까지 존재.. 2020. 4. 27. 이전 1 2 3 4 5 ··· 7 다음