2011-03-21 2 views
1

MySQL과 InnoDB를 사용하고 있습니다. 나는 모든 테이블의 레코드를 버전 화하고있다 - 최신 버전의 레코드는 'lv'라는 컬럼을 1로 설정하고 'lv'컬럼이 1로 설정된 ID에 대한 이전 레코드는 0으로 설정되어야한다. 새 버전이 있습니다. 이제 새 레코드 (버전)를 삽입 할 때마다 두 가지 쿼리를 수행하고 있습니다. InnoDB가 자동으로 그렇게 할 수있는 방법이 있습니까? 귀하의 의견을 보내 주셔서 감사합니다.InnoDB 자동 액션

답변

1

트리거를 사용할 수 있습니까?

이 검증되지 않은,하지만 난 이런 일이 가능하다고 생각 : 그것은 the manual

+0

: 당연히 I에 따라, 빠른 타입으로,

delimiter | CREATE TRIGGER newversion BEFORE INSERT ON yourTable FOR EACH ROW BEGIN UPDATE yourTable SET lv = 0 WHERE lv = 1; END; | delimiter ; 

거기에 약간의 실수가있을 수 있습니다 AND vid = NEW.vid를 추가하고 phpmyadmin을 통해 쿼리를 제출하면 시간 초과가 발생합니다. 이 테이블은 지금까지 단지 7 레코드입니다. – donkapone

+0

은 실제로 작동하지 않습니다. MySQL이 새로운 객체를 필요한 값으로 설정할 수있는 경우에만 수정 가능한 행을 변경하려는 경우를 제외하고는 트리거를 사용하여 동일한 테이블을 변경할 수 없기 때문입니다. 이 방법은 트리거의 일부가 아니기 때문에 다른 트리거를 전파하지 않습니다. 트리거를 발생시킨 SQL 쿼리의 일부입니다. – donkapone