2015-01-09 2 views
0

의 MyISAM과 여러 테이블에서 삭제를하지만 아무도 제대로 작동하지 = (이미 많은 조합을 많이 시도

나는이 두 개의 SQL 명령이 있습니다

$sql = "DELETE FROM infogt2000_partner_lead_invoice WHERE infogt2000_partner_lead_invoice_lead_id = ".$id_invoice; 
$sql = "DELETE FROM infogt2000_partner_lead WHERE infogt2000_partner_lead_id = ".$id; 

을 그리고 그들은 "함께"를 실행해야 내가 partner_lead에서 정보를 삭제합니다. 음, 또한. infogt2000_partner_lead_invoice에서 같은 정보를 삭제 infogt2000_partner_lead_id 및 infogt2000_partner_lead_invoice_lead_id의 ID가 동일 을 가지고 있지만 제대로 쓸 수 없습니다.

I을 현재 MySQL을 사용하고 있으며 타입이 MyISAM이다

+3

는 대신 이노을 사용할 수 있으며 외부 키에 대해 잘 알고 있습니까? – tsnorri

+0

외부 키를 계단식으로 배열하는 것은 원하는 것을 수행하기 위해 1 개의 쿼리 만 실행하는 적절한 방법입니다. 그렇지 않으면 2 개의 쿼리를 실행해야합니다. – geggleto

+0

이 두 개의 SQL 문 다음에 mysqli_query 또는 유사한 호출을 사용하고 있습니까? 두 문장을 둘러싼 코드를 보여줄 수 있습니까? –

답변

0

가입 :

DELETE infogt2000_partner_lead_invoice, infogt2000_partner_lead 
FROM infogt2000_partner_lead_invoice 
INNER JOIN infogt2000_partner_lead 
WHERE infogt2000_partner_lead_invoice.infogt2000_partner_lead_invoice_lead_id = infogt2000_partner_lead.infogt2000_partner_lead_id 
AND infogt2000_partner_lead_invoice_lead_id = $id 
+0

트릭을하는 것처럼 보입니다. 감사합니다! – user3817935

+0

네, 그렇습니다. 그리고 당신은 환영합니다! – goseo

0

데이터베이스 테이블을 InnoDB로 변환하여 삭제할 때 외래 키 제약 조건을 생성 할 수 있도록해야한다. 그렇지 않으면 상위 계층 테이블까지 작업하는 계층 구조 체인의 가장 낮은 항목부터 시작하여 여러 쿼리를 작성해야합니다. 예 : 손주, 자녀, 그리고 부모를 삭제합니다. 난 당신이 내부 사용해야합니다 gess

+0

나는 그것을했다. 첫 번째 명령은 자식 테이블이고 다른 하나는 부모입니다. 그러나 실행시 부모 만 삭제됩니다. – user3817935

+0

'선택 * FROM infogt2000_partner_lead_invoice WHERE infogt2000_partner_lead_invoice_lead_id = ". $ id_invoice; - 데이터가 있습니까? –

+0

InnoDB의 또 다른 이점은 트랜잭션 방식이므로 쿼리가 실패 할 경우 데이터 무결성을 보장하기 위해 롤백 할 수 있음 –

관련 문제