2010-08-23 5 views
1

IDLIST = 1,2,3,4,5,6,7,8,9,10MySQL의 여러 업데이트

더 나은 (크기가 최대를?) :

Foreach(id in IdList) 
    Update MyTable set isDeleted = 1 where id = ?id 

또는

Update MyTable set isDeleted = 1 where id IN (?IdList) 

내 의사를 용서,하지만 난 분명히해야한다고 생각. IN 절에서 목록의 크기에 제한이 있음을 알고 있습니다. Oracle에서는 255였습니다.

나는 여러 개의 sqls가 느려질 것이라고 생각하고 있지만 아마도 IdList를 구문 분석하면 DB 서버에 더 많은 오버 헤드가 발생할 것이다. 목록을 정렬하면 더 좋을까요?

답변

1

데이터베이스에 대한 쿼리가 적을수록 좋습니다. SQL은 IN 절 값 쉼표로 구분 된 목록을 포함하는 변수를 지원하지 않기 때문에

Update MyTable set isDeleted = 1 where id IN (?IdList) 

... 동적 SQL을 필요 즉이했다.

제출하기 전에 문자열로 쿼리를 구성하는 경우 제출하기 전에 해당 문자열에 변수를 연결하십시오. 그렇지 않으면 MySQL's dynamic SQL syntax, called PreparedStatements을 사용해야합니다. this link for Oracle dynamic SQL 예 & 정보를 참조하십시오.

1

커서 기반 솔루션 (첫 번째)과 집합 기반 솔루션 (두 번째) 사이에서 선택하면 집합 기반의 이 대부분이됩니다.이 경우에 나는 확실히 포부를 느낍니다. 두 가지 옵션 중 두 번째 옵션 - 읽기/이해가 훨씬 더 쉽고 효율적입니다.