2014-06-20 9 views
2

MySQL 5.1에서 5.5로 업데이트되었습니다. 나는 차이점을 알고 있었고 사이트는 하나를 제외하고 업그레이드를 허용했다.업그레이드 후 MySQL 구문 오류

그러나 쿼리가 나에게 어떤 문제가 있는지보고 너무 복잡 ... 아래

SELECT DISTINCT SQL_CACHE * 
FROM Regions 
WHERE (region_id IN 
     (SELECT SQL_CACHE included_region_id AS region_id 
      FROM Contains_areas 
      WHERE region_id = 
       (SELECT toplevel_region_id AS region_id 
       FROM Sites 
       WHERE site_url = 'http://www.domainname.com/' LIMIT 1)) 
     OR (region_id = 
      (SELECT toplevel_region_id AS region_id 
       FROM Sites 
       WHERE site_url = 'http://www.domainname.com/' LIMIT 1)) 
     AND user_id='1') 
ORDER BY region ASC 

하지만 5.5에서 5.1에서 작동하고, 오류가

"당신은 SQL 구문에 오류가 있습니다. 올바른 구문을 보려면 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. 'AS region_id FROM Contains_areas WHERE region_id IN (SELE'26 번 줄)

답변을 검색했지만 오류가 식별 될 수 있지만이 쿼리는 저를 넘어선다면 감사하겠습니다. 사전

+0

하위 쿼리에서 sql_cache를 제거하려고 할 수 있습니까? – CMPS

+0

중첩 된'SQL_CACHE'의 요점은 무엇입니까? – zerkms

답변

3

SQL_CACHE 및 하위 쿼리 SQL_NO_CACHE에서

덕분에 더 이상 MySQL은 5.5.3에서 허용되지 않습니다 :

Oracle link

SQL_CACHE 및 SQL_NO_CACHE 옵션은 쿼리 캐시가에 결과에 영향을 쿼리 캐시 (8.9.3 절. "MySQL 쿼리 캐시"참조). SQL_CACHE는 캐쉬 가능이고 query_cache_type 시스템 변수의 값이 2 또는 DEMAND 인 경우 쿼리 캐시에 결과를 저장하도록 MySQL에 지시합니다. SQL_NO_CACHE를 사용하면 서버가 쿼리 캐시를 사용하지 않습니다. 쿼리 캐시를 검사하여 결과가 이미 인지 여부를 확인하거나 쿼리 결과를 캐시하지 않습니다. (때문에 의 제한 파서에, 선행과 SQL_NO_CACHE에게 키워드를 따라야 공백 문자,기로 인해 공백이 아닌를 같은 줄 바꿈으로는 결과가 이미 캐시되어 있는지 여부를 확인하기 위해 쿼리 캐시를 확인하기 위해 서버를 발생합니다.)

뷰의 경우 SQL_NO_CACHE가 쿼리의 SELECT에 나타나면 적용됩니다. 캐싱 가능한 쿼리의 경우 쿼리에서 참조하는 뷰의 첫 번째 SELECT 에 SQL_CACHE가 나타나는 경우 SQL_CACHE가 적용됩니다.

MySQL 5.5.3에서이 두 옵션은 서로 배타적이며 두 값을 모두 지정하면 오류가 발생합니다. 또한이 옵션은 하위 쿼리 (FROM 절의 하위 쿼리 포함)에 이 허용되지 않으며 첫 번째 SELECT 이외의 유니온에서는 SELECT 문을 사용할 수 없습니다.

+0

아미르 감사합니다. 지금이 경우와 같이 검색어를 작성하는 대체 방법으로 무엇을 제안 하시겠습니까? – Gazza

+0

@Gazza는 서브 쿼리에서 sql_cache를 제거합니다. – CMPS

+0

간단합니까? – Gazza