database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29893 게시물 읽기
No. 29893
말도 안되는 쿼리가 작동을 해버렸네요...물론 실행결과는...
작성자
송승우(milksong)
작성일
2011-01-17 20:28
조회수
8,224

update lec_data set total_a = '10' and ordera = '10' and ordera = '1291' and dis_kind = '10' and idx < 6047745 and total_idx <> 0;

데이터값을 csv로 받아 일괄처리 하는도중에 where대신에 and ordera가 들어가서 문법상 오류가 났음에도 불구하고

쿼리가 실행이 되어버리네요 앞뒤엔 정상적인 쿼리가 있어서 정상 실행됐구요

결과는 참담하게 거의 모든 total_a 란 컬럼에 '0'이란 값이 셋팅이 됐구요 (아닌경우도 있음)

생각같아서는 실행 된다는거 자체가 말이 안되는거 같은데 결론적으로는 실행도 되고 이상한 내용으로 업데이트가 되어버렸네요

로그를 아무리 뒤져봐도 total_a를 '0'으로 만드는 부분은 전혀 없구요

혹시나 해서 위 쿼리를 던지면 실행되어버리네요

수동으로 복구하는데 하루종일 걸렸습니다

이유를 아신다면 어떤 이유로 저런 현상이 발생하는건지 궁금합니다

total_a  vachar(5) defult '0'
mysql version is 5.1.54

이 글에 대한 댓글이 총 1건 있습니다.

 정상적인 쿼리입니다.

쿼리를 크게 둘로 나눠보면 다음과 같습니다.

update lec_data set total_a = '10' and ordera = '10' and ordera = '1291' and dis_kind = '10' and idx < 6047745 and total_idx <> 0;

 

따라서, 파란색으로 표시된 부분의 결과가 lec_data테이블의 모든 행의 total_a 로 들어가게 되지요.

값은 AND 연산에 의해 0 또는 1이 나오고, 위의 쿼리는 쿼리 옵티마이저에 의해 다음와 같이 바뀌게 됩니다.

 

UPDATE lec_data SET total_a = ( idx < 6047745 AND total_idx <> 0 )

 

 

 

박현우(lqez)님이 2011-01-18 20:10에 작성한 댓글입니다.
이 댓글은 2011-01-18 20:13에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
29899jsp mysql(버젼5) jdk버젼(1.6) 커넥션풀 관련 [3]
문수영
2011-01-25
9337
29897특정문자 잘라내기 [2]
최영민
2011-01-24
8611
29895sql문 작성하는 것좀 도와주세요~~~ [3]
안혜진
2011-01-19
8727
29893말도 안되는 쿼리가 작동을 해버렸네요...물론 실행결과는... [1]
송승우
2011-01-17
8224
29892mysql workbench 데이터 수 제한 [1]
안혜진
2011-01-15
16302
29891서브(?) 쿼리 질문!
devil
2011-01-13
8650
29890JDBC를 이용한 Select ~ where ~ in 절 [1]
고민중
2011-01-12
8763
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다