2012-09-23 2 views
0

삽입 또는 업데이트하고 다른 테이블에 새 로그를 삽입하고 싶습니다. 나는 다른 테이블에 준비 테이블의 정보,MySQL 삽입 table1 업데이트 table2, 하위 쿼리 또는 트랜잭션?

같은 중복 키 갱신에 을 선택 에 삽입을 끌어 멋진 작은 쿼리를 실행 해요

내가없이 할 싶습니다 무엇 PHP, 또는 트리거 (리드 dev에 엠 좋아하지 않아, 그리고 그들 중 하나 익숙하지 않아요) 로깅 테이블에 새 레코드를 삽입합니다. 업데이트되거나 삽입 된 데이터와 어떤 테이블에 대한보고에 필요합니다.

힌트 또는 예가 있습니까?

참고 : 50K 행을 처리하는 데 약 4 시간이 걸렸지 만 PHP로이 작업을 수행하고있었습니다. laravel php 프레임 워크를 사용하여 준비 업데이트 4의 각 항목에 대해 데이터 및 로그가있는 다른 테이블을 반복하면서 각 행당 8 개의 쿼리를 처리했습니다 (raw SQL이 아닌 laravel 모델을 사용함). 로그를 배열 및 일괄 처리로 푸시하여 최적화 할 수있었습니다. 그러나 모든 처리량을 우회하여 mysql에서 15 초의 처리 시간을 이길 수는 없습니다. 이제 나는 SQL 방식으로 멋진 일을하고있다.

+0

나는 당신이 묻는 것을 조금 혼란스럽게 생각합니다. 당신은 분명히 삽입을하는 법을 이미 알고 있으므로 업데이트/삽입을 기록하기 만하면됩니까? – Erik

+0

기본적으로 한 테이블의 모든 행을 반복하고 싶습니다. 그리고 각 행에 대해 여러 개의 쿼리를 작성할 수 있어야합니다. 나는 거래에 대해 좀 더 많은 인터넷 검색을 할 것이다. 비록 그들이 모두 또는 아무것도 접근하지 않는다고 생각할지라도, 거기에 여러 개의 질의를 지정할 수 있다는 것을 안다. – Lex

답변

1

개 이상의 쿼리 문을 실행 필요가있는 경우에 사용됩니다. 사용 트랜잭션을 참조한 다음 Atomicity (ACID 부분)을 보장하기 위해 트리거합니다. 벨로 코드는 MySql transaction에 대한 샘플입니다 : 거래 내부

START TRANSACTION; 
UPDATE ... 
INSERT ... 
DELETE ... 
Other query statement 
COMMIT; 

문 전부 또는 아무것도 실행됩니다.

0

기본 행을 삽입하고 로그 행을 삽입하는 두 가지 작업을 수행하려면 두 개의 명령문이 필요합니다. 두 번째는 트리거가 될 수 있습니다.

+1

고마워, 아마도 내가 방아쇠를 당길거야. – Lex

+0

그래, 상상할 수있는 유일한 방법은 커서가있는 저장 프로 시저를 사용하는 것입니다. 불행히도 나는 그것이 비행 할 것이라고 생각하지 않는다. – Lex

+0

아마 리드 개발자가 트리거를 좋아하지 않는 이유를 알았다면 우리는 당신이 그를 설득하도록 도울 수있다. –

0

트리거를 사용하는 것이 좋을 것이다, 그것은 종종 로깅 목적

관련 문제