두 개의 테이블 간에 필드 값 일괄 업데이트 하기 문제테이블 Table_A 와 Table_B 가 있다.Table_A 의 pk가 3이상인 행에서 필드 field_a 는 Table_B의 field_b 값으로 업데이트되어야 한다. 해결join 으로 해결 UPDATE Table_A as A left outer join Table_B as B ON A.pk = B.pk SET A.field_a = B.field_b WHERE A.pk >= 3 참고복잡한 구조인 경우 조인을 이용한 셀렉트문으로 각 필드가 정상적으로 조회 되는지 확인을 우선하고 시행한다. SELECT A.field_a, B.field_b FROM Table_A as A left outer join Table_B as B ON A.pk = B.pk W..
회사 ERP 모듈 중에 요청된 날짜를 기준 해당 연도의 모든 직원들의 연차 사용 이력을 조회 하는것이 있다.ERP 기본 프로시져인지 아님 커스터마이징한 프로시져인지는 모르겠지만.입사일을 varchar(8) "20180101" 로 입력을 받고 조회시는 문자열을 날짜형으로 형변환해서 조회를 한다.잘 사용하던 모듈이 문자열을 날짜형으로 변환할 수 없다는 오류를 내뱉는다.이래 저래 확인 해보니 입사일 데이터 중 하나가 "2018010" 으로 마지막 숫자가 빠진 7자리가 입력되었다.물론 인사팀은 모르쇠로 기억이 없다고 하지만 말이다.그리고 이런 생각이 들었다.약속된 형식의 데이터는 입력되어야 하지만, 과연, 저 상황에서 substr 으로 해결 가능한 것을 굳이 형변환을 해야하는지?그리고 왜 입사일 데이터형을 문자..
MySQL 백업시 특정 row(행 데이터)만 백업하는 쿼리문 mysqldump -u [유저명] -p [DB명] [테이블명] --default-character-set=utf8 --where=" pk in (1,2) " > [덤프파일경로] 옵션에 --where="[CONDITION]"을 추가하여 조건에 맞는 ROW만 백업이 가능하다. 다만 덤프파일에는 테이블 생성 쿼리문도 포함된다. charset 오류 발생시 --default-character-set=utf8 을 추가해서 백업한다.
상황 : MSSQL 데이터베이스에서 PHP로 select 쿼리를 날렸는데 다른 놈들은 다 잘 오는데 datetime 이 아이만 팔다리 짤려서 돌아왔다.SQL : SELECT NO, NAME, REG_DATE FROM TABLERETURN : 1, 홍길동, 11 해결 : 이에 불쌍히 여겨 팔다리 붙여 줄려고 찾아 본니..."CONVERT"를 이용하면 된다.DATETIME 자료형은 CONVERT(CHAR(19), REG_DATE, 120) 으로 형변환 해야 한다.SQL : SELECT NO, NAME, CONVERT(CHAR(19), REG_DATE, 120) AS REG_DATE FROM TABLERETURN : 1, 홍길동, 2017-01-12 13:12:20 배움 : CONVERT 에서 숫자 상수의 의..
데이터베이스 운영 테크닉 데이터베이스를 운영하다 보면, 파일이 깨져 데이터베이스에 접속할 수 없거나 운영하는 게시판에 다음과 같은 에러 메시지가 뜨면서 게시물을 볼 수 없는 경우가 있다. MySQL 서버가 불의의 사고로 비정상적으로 종료되거나 쓰기 작업을 제대로 끝내지 못하면 이러한 증상이 발생할 수 있다: ERROR 1016: Can't open file: 'XXXX.MYD'. (errno: 145) 이러한 사고를 대처하기 위해 가장 좋은 방법은 미연에 백업을 수시로 해 두고 데이터베이스 에러 체크를 통해 깨진 파일을 빠르게 복구해 두는 것이다. 미리 백업해 놓으면 깨진 파일들을 날려도 백업 파일로 복구할 수 있지만, 예상하지 못한 사고는 항상 발생하는 법. 이럴 경우 깨진 파일을 다시 복구하는 방법에..
Mysql 에서 HTML 태그 삭제 함수(strip_tags) delimiter || DROP FUNCTION IF EXISTS strip_tags|| CREATE FUNCTION strip_tags( x longtext) RETURNS longtext LANGUAGE SQL NOT DETERMINISTIC READS SQL DATA BEGIN DECLARE sstart INT UNSIGNED; DECLARE ends INT UNSIGNED; IF x IS NOT NULL THEN SET sstart = LOCATE('', x, sstart); SET x = CONCAT(SUBSTRING( x, 1 ,sstart -1) ,SUBSTRING(x, ends +1 )) ; SET sstart = LOCATE(..