2017-12-04 17 views
1

MySQL의 임시 테이블에 저장 프로 시저를 실행할 수 있습니까? 이론적으로 다른 사용자를 위해 동시에 데이터를 가져올 수있는 시스템을 만들려고합니다. 다른 사용자가 동일한 작업을 수행하는 동안 한 사용자가 임시 테이블에 파일을 가져 오는 경우 프로 시저에서 참조하는 테이블이 임시 테이블과 일치하므로 두 사용자가 동일한 공유 프로 시저를 호출 할 수 있습니까? munging 및 업데이트 테이블 newdata 임시 테이블에 저장 프로 시저 호출

  • 저장 프로 시저를 완료 newdata
  • 저장 프로 시저가 호출 임시 테이블에

    과 같을 것이다 개별 사용자의 워크 플로우 ...

    1. 데이터로드 newdata에서 라이브/영구 테이블로 데이터를 이동합니다.

    ... 다른 사용자가 동일한 일을 할 수있는 동안.

  • +0

    예 가능할 것입니다. –

    답변

    1

    예, 저장 프로 시저에서 임시 테이블을 참조 할 수 있습니다 :

    mysql> create procedure p() select * from t; 
    Query OK, 0 rows affected (0.03 sec) 
    
    mysql> create temporary table t as select 123 union select 456; 
    Query OK, 2 rows affected (0.02 sec) 
    Records: 2 Duplicates: 0 Warnings: 0 
    
    mysql> call p; 
    +-----+ 
    | 123 | 
    +-----+ 
    | 123 | 
    | 456 | 
    +-----+ 
    

    (MySQL은 5.6.31에서 테스트)

    그러나, 가장 경험이 풍부한 MySQL의 사용자가 당신이 계획하는 일을 피하려고 , 그들은 복제를 사용하는 경우. 이유는 슬레이브가 어떤 이유로 다시 시작될 때 임시 테이블을 삭제하기 때문입니다. 따라서 임시 테이블을 참조하는 후속 UPDATEINSERT...SELECT은 임시 테이블이 더 이상 존재하지 않으므로 오류가 발생합니다. 복제 스트림에 오류가 있으면 복제가 중지됩니다.

    슬레이브가 갑자기 다시 시작하는 경우는 드문 경우가 있지만 앱이 임시 테이블을 자주 만드는 경우 슬레이브가 다시 시작될 때 임시 테이블이 나타날 가능성이 높습니다. 임시 테이블의

    가장 사용 성명에서 임시 데이터를 작성하고 만 (복제되지 않습니다) SELECT 쿼리에서 임시 테이블을 사용하는 것입니다.

    +0

    감사합니다. Bill. 복제 전선에 대한 좋은 생각/조언 ... 나는 그것을 고려하지 않았다. – TravisVOX