2016-09-24 2 views
0

데이터베이스 내에 많은 테이블이 있습니다. 이상한 것은 mySQL을 다시 시작한 후에 하나의 테이블이 항상 비워진다는 것입니다. 그것은 TEMP 테이블 인 것처럼 보이지만 나는 그것을 의심합니다. TEMP 테이블인지 또는이 이벤트를 트리거하는 다른 것이 있는지 확인할 수 있습니다.mySQL 서버를 다시 시작한 후 테이블이 비어 있습니다.

트리거에 대해 말하면, 값을 업데이트하는 다른 테이블 내에서 트리거가 발생하지만 이것이 원인이라고 생각하지 않습니다.

는 [편집]

내 트리거 쿼리는

BEGIN 
IF NEW.Discount <> OLD.Discount || NEW.Price <> OLD.Price || NEW.FirstYearDiscount <> OLD.FirstYearDiscount 
THEN 
INSERT INTO InvoiceTotal SET 
         PriceExcl = (SELECT 
         SUM((Price - (Price * (IF(Discount > FirstYearDiscount || Discount < 0, Discount, FirstYearDiscount)/100))) * InvoicePeriod) 
         FROM InvoiceItem WHERE InvoiceID = NEW.InvoiceID), 
         InvoiceID = NEW.InvoiceID 
       ON DUPLICATE KEY UPDATE 
       PriceExcl = (SELECT 
         SUM((Price - (Price * (IF(Discount > FirstYearDiscount || Discount < 0, Discount, FirstYearDiscount)/100))) * InvoicePeriod) 
         FROM InvoiceItem WHERE InvoiceID = NEW.InvoiceID); 
END IF; 
END 

이 트리거 줘야 업데이트 값을 변경하는 경우입니다.

주문을 할 때 새로운 값을 삽입하는 cronjob도 있습니다.

+0

내 첫 번째 추측은 트랜잭션에서 데이터를로드하고 트랜잭션을 커밋하지 않는 것입니다. –

+0

다른 테이블과 마찬가지로 테이블에 데이터를 삽입합니다. 내 테이블 안에 다른 테이블처럼이 테이블을 만들었습니다. –

+0

"SQL 재설정"은 어떻게하나요? 그게 무슨 뜻 이죠? MySQL 서버를 다시 시작한다는 의미입니까? 아니면 데이터베이스 연결을 끊고 연결하고 있습니까? 어떤 종류의 SQL 문을 실행하고 있습니까? – spencer7593

답변

1

나는 각 테이블에 대해 약간의 파고를했으며 Operations (상단 탭과 섞여 있음)을 클릭하고 Storage Engine이라는 속성에 주목했습니다. 그것은 처음에 메모리으로 설정되어 있었는데, 그것은 나에게 떨어져 보였다. 그래서 나는 다른 데이터베이스를 확인하고 그들이 모두 MyISAM으로 설정되었다는 것을 알아 차렸다. 그래서 문제가있는 데이터베이스에서 테이블을 MyISAM으로 변경하고 테스트를 위해 서버를 다시 시작했습니다. 데이터가 문제없이 저장되었습니다!

같은 문제가있는 다른 사람들에게 도움이되기를 바랍니다 (Y)

PS. 답장을 보내 주셔서 감사합니다

+2

아마도 * MyISAM 대신 InnoDB를 원할 것입니다. 더 많은 연구. –

관련 문제