2011-10-24 3 views
0

이 문제에 대한 여러분의 의견을 듣고 싶습니다.삭제시 MySQL 상태 업데이트 트리거

내 프로젝트에 MySQL 데이터베이스를 사용하고 있으며 거의 ​​모든 테이블에서 상태 (ENUM ('활성', '비활성', '삭제됨'))이라는 열이 있습니다.

성능상의 이유로이 작업을 수행하므로 행이 필요하지 않으면 (삭제할 때마다) DB에서 실제로 삭제하는 대신 '삭제됨'으로 설정합니다. 이것은 상당히 좋은 것으로 입증되었습니다.

하지만 지금은 액티브에서 삭제 된 행을 업데이트하는 PHP 프로젝트를 항상 프로젝트에 작성해야합니다.

어떻게 생각합니까? MySQL 트리거를 사용하거나 다른 기술을 사용하여 어떻게 해결할 수 있습니까?

고맙습니다.

답변

1

행을 삭제하여 삭제하도록 설정하는 것이 잘못된 이유는 무엇입니까? 결국

,

UPDATE projects SET status = 'deleted' WHERE id = :id; 

DELETE FROM projects WHERE id = :id; 

는 많은 차이를하지 않거나은 무엇입니까?

1

필자는 글쓰기간에 많은 차이가 없다고 생각합니다.

DELETE FROM table WHERE id = 1 

또는

UPDATE table SET status = 'deleted' WHERE id = 1 

은 즉시 당신이 당신의 모든 테이블에서 같은 이름으로 같은 필드를 만들 때, 트리거 기능은 그다지 necessery을 보이지 않는다.

+0

을해야합니다 , 나는 실수로 당신의 대답을 편집했습니다. 방금 돌려 놨어. 잘 보니, 우리의 대답은 거의 같습니다. 그러므로, 나는주의하지 않았다 :). – middus

+0

@middus : 문제 없음 :) –

0

응용 프로그램 사용 사례를 구현하려면 항상 응용 프로그램 코드에서 데이터베이스로 요청해야합니다. 이것이 행에 대한 실제 DELETE 문인지, 상태를 'deleted'로 설정하는 UPDATE 문인지는 중요하지 않습니다. 어떤 종류의 방아쇠로 우회 할 수는 없습니다.

0

그것은 당신이 달성하려고하는지 달려있다 ..

당신이 다시 행을 필요가 없습니다 자사가 삭제되면, 당신은 그냥 삭제해야하는 경우 - 정말하지 않는 상태 열을 업데이트 당신을 위해 많이. 성능 측면에서 볼 때 행을 물리적으로 삭제하는 것이 더 나을 것입니다. (데이터베이스의 실제 구조에 따라 달라질 수 있습니다.)

삭제 된 후에도 기록을 유지해야하는 경우 , 주 테이블에서 레코드를 삭제할 때 레코드 사본을 작성하는 아카이브 테이블을 작성할 수 있습니다. 복사가 .. 온 - 삭제 트리거에 의해

어느 쪽이든을 기록 할 것입니다, 당신은 항상 .. 기록을 삭제 또는 삭제에 상태를 업데이트하거나, 데이터베이스 전화를 걸 죄송합니다