반응형
반응형
개요 하나의 UPDATE 쿼리에 여러 개의 테이블이 조인되어 있는 상황을 볼 수 있다. 이는 참조되어 있는 다른 테이블의 값을 확인하여 대상이 되는 테이블의 값을 수정하기 위함인데, 가끔 참조하는 테이블까지 같이 수정해야 하는 경우가 있다. 예를 들어, 이름과 주소가 각각 다른 테이블에 되어 있을 때, 공통되는 키를 참조하여 조인을 해서 번거롭게 여러 번의 UPDATE 쿼리문을 작성해야 한다. -- t1 : id, name UPDATE t1 SET name = 'eunbyeol'; -- t2 : id, address UPDATE t2 SET address = 'incheon'; 한 두 번이면 상관없지만... 반복되는 업데이트 쿼리문을 작성하기에는 솔직히 조금 귀찮다. 이 경우, 조인을 해서 한꺼번에 업데..
Error DATETIME 형식인 컬럼에 문자열로 된 날짜를 넣으려고 했는데 다음과 같은 에러가 출력되었다. insert into t1 select '08 31 2017 7:14PM' /* Error Code: 1292. Incorrect datetime value: '08 31 2017 7:14PM' for column 'col_date' at row 1 */ 해결 방법 MySQL이 DATETIME 형식을 인식할 수 있는 형식으로 변환해야 한다. 일반적으로 MySQL에서는 'YYYY-MM-DD HH:MM:SS' 형식을 따른다. DATETIME 형식을 변환하기 위해서는 STR_TO_DATE() 함수를 사용하면 된다. 입력하는 문자열의 형식을 DATETIME으로 변환할 수 있도록 형식을 매치시켜서 기입해주..
Error MS-SQL의 데이터를 MySQL의 데이터베이스에 마이그레이션 해야하는 작업이 있었다. M-SSQL SSMS에서 쿼리 결과를 CSV 파일로 만들었고, MySQL Workbench에서 CSV 파일을 Import 하려는 도중 아래와 같은 에러 문구가 출력되었다. Unhandled exception: 'cp949' codec can't decode byte : illegal multibyte sequence 해결 방법 결론부터 말하면 CSV 파일을 열어 그냥 CSV파일 확장자로 변경하면 된다. 오류가 출력되는 이유는 MySQL 자체에서 지원하지 않는 인코딩 형식이라는 것이다. 대개 한글이 포함된 파일의 경우 'CP949'의 인코딩 형식이 많다고 한다. 하지만 MySQL에서는 CSV 파일의 인코딩 형..
개요서비스 중인 데이터베이스의 테이블 값을 변경하려 할 때의 작업은 매우 조심스럽다. 사내 데이터베이스 구조는 스테이징 서버가 따로 없고, 개발 서버 > 운영 서버를 거치는 구조인데, 개발 서버 또한 사내에서 관련 작업을 하는 부서가 따로 있기 때문에... 트랜잭션으로 안전하게 하려고 테이블 락을 걸수도 없을 뿐더러, 테이블의 데이터를 마음대로 바꾸어서는 안된다. 때문에 나는 주로 임시로 사용할 temp 테이블을 복사할 때 Export Data / Import Data를 사용하여 서비스 중인 데이터베이스의 테이블을 복사하여 복사된 테이블에서 데이터를 가공한 후, 이상이 없는지 검증 후에 본 서버의 데이터베이스 테이블과 가공된 부분만 업데이트하는 작업을 추가로 한다. 어느 날, 특정 데이터베이스의 데이터를..
개요 상황에 따라서 내가 원하는 입력 순서대로 값을 출력해야될 때가 있다. 예를 들어 보자. 행의 값이 각각 '1', '2', '3'인 행이 있다. 이 중에서 임의로 '2' > '3' > '1' 의 순서로 결과를 조회해야 한다. 하지만 MSSQL에서는 '1' > '2' > '3' 순서대로 결과가 출력된다. 입력 쿼리 select * from number_table where number in (2, 3, 1) 조회 결과 내가 생각한대 순서대로 조회되지 않고 자동적으로 정렬되어서 나온다. 왜 그럴까? 그리고 어떻게 해야 할까? [ 결과 미리 보기 ] 1부터 9까지의 값이 있는 테이블이 있다. 나는 이 테이블을 2, 4, 6, 8, 9, 7, 5, 3, 1 순으로 조회를 해야 한다. [ 참고사항 ] 이 포스..
개요 데이터베이스에서 결과 셋의 행대로 번호를 매겨야 하는데 다음과 같은 에러가 출력되었다. select row_number() over(order by 1), username, address from testTable 에러 메시지 Msg 5308, Level 16, State 1, Line 22 기간 이동 함수, 집계 및 NEXT VALUE FOR 함수는 ORDER BY 절 식으로 정수 인덱스를 지원하지 않습니다. 이 에러가 무슨 뜻일까? 궁금증을 해결할 겸 ROW_NUMBER에 대해 알아보기로 했다. ROW_NUMBER ROW_NUMBER 이란? 결과 집합의 출력 번호를 지정한다. 즉, 모든 행의 번호를 순차적으로 지정하는 기능을 한다. ROW_NUMBER은 번호를 매기는 점에 있어서는 RANK와 유..