본문 바로가기

plming/DB

MySQL - Select한 값으로 Update 단순한게는 테이블과 테이블을 Join해서 특정 컬럼의 값으로 Update 시킬 수 있다. UPDATE TABLE1, TABLE2 SET TABLE1.COLUMN1 = TABLE2.COLUMN3 WHERE TABLE1.COLUMN2 = TABLE2.COLUMN4 ; UPDATE TABLE1 INNER JOIN TABLE2 ON TABLE1.COLUMN2 = TABLE2.COLUMN4 SET TABLE1.COLUMN1 = TABLE2.COLUMN3 ; UPDATE TABLE1 SET COLUMN1 = ( SELECT COLUMN2 FROM TABLE2 WHERE ... LIMIT 1 ) ; 복잡하게는 Matching되는 특정 값이 존재하지 않을 경우 ROW_NUM을 만들어서 Join 시킬 수 있다. UPDA.. 더보기
MySQL - 임의의 날짜값 생성 임의의 날짜를 설정해서 TEST 해야할 때 유용할 듯... 오늘에서 임의의 날짜를 빼고 시간, 분, 초를 임의의 난수로 채워서 날짜를 만들어낸다. STR_TO_DATE( CONCAT( DATE_FORMAT( DATE_SUB(CURDATE(), INTERVAL CAST(RAND() * 100 AS UNSIGNED) DAY), '%Y%m%d' ) , LPAD( CAST( CAST(RAND() * 23 AS UNSIGNED) AS CHAR ), 2, '00' ) , LPAD( CAST( CAST(RAND() * 59 AS UNSIGNED) AS CHAR ), 2, '00' ) , LPAD( CAST( CAST(RAND() * 59 AS UNSIGNED) AS CHAR ), 2, '00' ) ), '%Y%m%d.. 더보기
[MySQL] millisecond, microsecond 표시하기 Timestamp Type Column에 NOW() 든 CURRENT_TIMESTAMP() 든 값을 줘서 Insert/Update를 했지만... 기본적으로 DATE_FORMAT( NOW(), '%Y-%m-%d %H:%i:%s.%f' )를 사용했더라도 millisecond, microsecond 가 표시되지 않는다. 1. Column Type이 Timestamp(6) 으로 만들어져야 하고 2. 날짜값을 만들 때 NOW( 6 ) CURRENT_TIMESTAMP( 6 ) 이런 식으로 몇자리까지(0~6까지)의 소수 시간(fractional seconds precision)을 표시할 것인지 인자를 전달해야 한다. 기본값은 생략해도 되는지라... 더보기
ERD - 테이블 관계(식별,비식별) 간혹 헛갈리는 경우가 있지만 내용은 간단하다. 1. 부모 테이블의 PK가 자식 테이블에서도 PK로 쓰였느냐 그렇지 않느냐. 2. 부모 테이블과 자식 테이블이 1:1 이냐 1:N 이냐. ☞ 부모 테이블에 DATA가 1개 있는 경우 자식 테이블에 DATA가 몇 개 있느냐를 따지는 것. 부모 테이블의 PK가 자식 테이블에서도 PK로 쓰였다면? 식별관계 → 직선으로 표시 부모 테이블의 PK가 자식 테이블에 있기는 하지만 PK로 쓰이지 않았다면? 비식별관계 → 점선으로 표시 테이블의 관계가 1인 경우 테이블의 관계가 1~N개인 경우 여기에 0개일 경우가 존재한다면 위의 선 모양들에 동그라미(O)만 쳐주면 끝. 테이블의 관계가 0이거나 1인 경우 테이블의 관계가 0~N개인 경우 뭔가 많이 복잡스러워 보이는 것 같지.. 더보기
eXERD 30일의 평가판 라이센스를 사용 후 (그 이전에라도) 개인사용자는 비영리 목적으로는 무료로 정품등록을 할 수 있다. (Link) 그런데도 기능은 괜찮은 듯 처음부터 그릴 수도 이미 만들어 놓은 DB에서 ERD를 만들수도(리버스 엔지니어링) (Link) 도움말도 있고 eclipse plugin도 있고 좋넹~ ^^ http://ko.exerd.com/ 더보기
[Oracle] SQLException: 소켓에서 읽을 데이터가 없습니다 처리의 편의상 존재여부에 따라 Insert와 Update를 할 수 있는 Merge를 사용하게 되는데... Oracle은 JDBC Driver의 문제도 자주 생기지만 (최신 버전을 사용하면 거의 해결되는...) 그렇지 않은 경우도 존재한다. 이런 경우를 잘못 만나면 시간만 엄청 날릴 수 있다...;;; Varchar, CLOB Type을 사용하는 컬럼이 1,000 여자일 경우에는 Merge도 무난하다. 하지만, 그 이상의 경우에는 Check the statement (update failed). ← merge를 통한 insert의 경우에도 update로 인식;;; Cause: java.sql.SQLException: 소켓에서 읽을 데이터가 없습니다 번거롭지만 Insert / Update로 분리하면 상황 종.. 더보기
[Oracle] WITH(Temp Table) 2개 사용하기? Temp Table A를 만들고 그 Temp Table 에 항목 B를 추가해서 Temp Table C를 만들어야 한다면 어렵게 생각하지 않아도 된다. 이미 Temp Table A를 만들었다면 이미 99%는 해 놓은 거나 마찬가지다. WITH TB_MAIN AS ( SELECT LEVEL AS LV_NO FROM DUAL CONNECT BY LEVEL 더보기
[Oracle] 조회 결과 Row를 하나의 Column으로 표시하는 방법 [Oracle] 조회 결과 Row를 하나의 Column으로 표시하는 방법 종[縱]으로 된 결과를 횡[橫]으로 표시 세로로 된 결과를 가로로 표시 SELECT 'A' AS COL_NAME , LEVEL AS LV_NO FROM DUAL CONNECT BY LEVEL 더보기
Oracle - 월 달력 SQL 기본 명령들만 사용해서 년,월 (예:201512) 을 입력받고 해당 년월의 달력 형태로 조회하는 SQL SELECT WEEK_NUM , MAX(DECODE(DAY_NUM, 1, MONTH_DAY)) AS DAY1 , MAX(DECODE(DAY_NUM, 2, MONTH_DAY)) AS DAY2 , MAX(DECODE(DAY_NUM, 3, MONTH_DAY)) AS DAY3 , MAX(DECODE(DAY_NUM, 4, MONTH_DAY)) AS DAY4 , MAX(DECODE(DAY_NUM, 5, MONTH_DAY)) AS DAY5 , MAX(DECODE(DAY_NUM, 6, MONTH_DAY)) AS DAY6 , MAX(DECODE(DAY_NUM, 7, MONTH_DAY)) AS DAY7 FROM ( SE.. 더보기
MySQL - 한글사용 한글 깨짐 현상 발생 시 문자셋 변경해야... default : latin1 현재 설정값을 아래 명령으로 확인해보면... mysql> show variables like 'c%'; character_set_xxx, collation_xxx 등의 값이 latin1 으로 표시된다. utf8로 변경하기 위해서는 아래 파일에 내용을 추가해야 한다. /etc/my.cnf [mysqld] ... init_connect = SET collation_connection = utf8_general_ci init_connect = SET NAMES utf8 character-set-server = utf8 collation-server = utf8_general_ci default-character-set = utf8 [.. 더보기