2014-10-24 3 views
2

글쎄, 나는 4 개의 테이블을 가지고 있는데, table1, table2, table3, table4라고 부를 수있다. table1에서 나는 "시간"이라고 불리는 칼럼을 가지고 있는데, 업데이트시 CURRENT_TIME으로 업데이트됩니다. MySQL, id 일치 및 타임 스탬프가 current_time보다 오래된 여러 테이블에서 삭제

그래서 내가 현재 데이터베이스에서 오래된 물건을 삭제하려면이 절차를 가지고 :

DELETE FROM `table1` WHERE `time` < (CURRENT_TIME() - INTERVAL 5 MINUTE); 

이것은 표 1, 표 2, 표 3과 표 4에 지금 표에 모든 업데이트를보다 오래된 오분을 삭제해야합니다 내가 ID's있어 서로 일치하는 직원이 직원 번호로 생각합니다. 그래서 table2, table3 및 table4에서 직원을 동시에 삭제할 수 있도록 table1에서 어떻게 일치시킬 수 있습니까?

또한이 모든 것이 4 개의 모든 테이블에 존재한다는 것을 100 % 나타내지 않습니다. 이것이 중요하다면 잘 모릅니다.

sidenote : 누구든지 절차가 실제로 실행되는 것을 알고 있습니까? : P 답변 해 주셔서 감사합니다. :)

편집 : 죄송합니다, mysql!

+0

당신은 'mysql'과 'sql-server'라는 태그를 모두 달았습니다 ... 어떤 SQL의 맛을 사용하고 있습니까? 나는 mysql을 추측하고 있는가? – TeamTam

+0

외래 키로 설정하고 삭제 캐스케이드를 사용하는 이유는 무엇입니까? – radar

답변

1

당신이 MySQL에 있다고 가정하면 아래의 가짜 코드를 사용하십시오. 나는 그것을 당신이 모든 것을 하나의 트랜잭션으로 감쌀 것을 제안한다.

START TRANSACTION 
BEGIN 

    SET @deleteSince = CURRENT_TIME() - INTERVAL 5 MINUTE; 

    DELETE FROM table4 WHERE table1ID IN (SELECT FROM table1 WHERE time < @deleteSince 
    DELETE FROM table3 WHERE table1ID IN (SELECT FROM table1 WHERE time < @deleteSince 
    DELETE FROM table2 WHERE table1ID IN (SELECT FROM table1 WHERE time < @deleteSince 
    DELETE FROM table1 WHERE time < @deleteSince 

COMMIT 

나는 상황을 처리하는 transaction를 사용하여 제안하는 경우 데이터의 불일치 상태로 이어질 것이 4 DELETE 문 중 하나를 사이에 다른 소스로부터 동시에 데이터가 변경. 이 link은이 아이디어를 더 자세히 설명합니다.

또는 ON DELETE CASCADE 기능을 사용할 수 있습니다. 이 link은이를 구현하는 방법에 대한 자습서입니다. 그러나이를 수행하려면 데이터베이스 스키마에서 외부 키와 테이블 정의를 변경해야 할 가능성이 큽니다.

실행하는 절차에 대한 질문을 올바르게 이해하면 MySQL Event Scheduler을 사용하거나 Cron 작업을 설정해야합니다.

+0

이것은 내가하고 싶은 일을하고있는 것처럼 보입니다. im은 SQL에서 새롭고 힘든 일입니다. 거래와 가짜 코드에 대해 설명해 주시겠습니까? 나는 이것을 프로 시저에 붙여 넣을 까? :) 당신의 repsone 주셔서 감사합니다! – Mordin

+0

Herman 님, 안녕하세요. 답변을 수정하고 자세한 설명을 제공해 드리겠습니다. 나는 SO에 관한 질문에 새로운 답변을했습니다! :-) – TeamTam

+0

re : 'psuedo-code'... 아니요, 데이터베이스 스키마를 추측하지 않으면이 코드를 붙여 넣을 수 없습니다. 실제 테이블/컬럼 이름을 제공하지 않았기 때문에 필요한 정확한 쿼리를 제공 할 수 없었습니다. – TeamTam

0

정말 그런 것들의 더 큰 함축을 고려해야합니다. 대규모 트랜잭션을 삭제하면 대규모 롤백, 큰 복제 지연 등이 발생합니다. 서브 테이블 당 행 수가 알려지지 않으면 복제 지연이 상당히 빨라질 수 있습니다. 이러한 트랜잭션을 롤백하면 모든 종류의 무질서가 발생할 것입니다. 영향을받는 행 수가 0이 될 때까지 일부 제한을 포함하고 해당 제한을 반복하려고합니다. TeamTam에서 제공하는 예제에서 mysql 5.6이 있는지 확인하거나 하위 쿼리를 사용하여 서버를 중단하고 구울 수 있습니다.