簡體   English   中英

如何使用其他表中的外鍵刪除具有主鍵的行?

[英]How do I delete row with primary key using foreign key from other table?

我有一張叫“議程”的表//翻譯:乳制品

具有以下行:

idagenda // primary key
title
waar
organisatie
...
etc.
...

我還有一張表,用於記錄日記項目/事件的日期,稱為議程

具有以下行:

id // primary key
idagenda // id from other table
van //from
tot // till
datum // date

當“ tot”字段是“今天”的日期時,它將刪除數據庫中的行,但“議程”表中的行保持不變。 他們沒有被刪除,因為我沒有給他們打電話。

我的刪除查詢如下所示:

DELETE FROM agendadatum WHERE tot < NOW(); 

如何從“議程”表中刪除具有相同ID的行,然后刪除議程表中的外鍵?

在創建表中,您需要提及外鍵約束,例如

FOREIGN KEY (product_id) REFERENCES products (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE,

之后,如果您運行delete查詢,則將自動刪除引用表ID的行。

您可以查看級聯刪除中的說明

如果您使用的是php,則可以嘗試以下操作

//get all agentadatum data with date now and before
$select_agendadatum = mysql_query("SELECT * FROM agendadatum WHERE tot <= NOW()") or die (mysql_error());
//loop through rows
while($row_agendadatum = mysql_fetch_assoc($select_agendadatum))
{
     //delete agendadatum row
     $delete_agendadatum = mysql_query("DELETE FROM agendadatum WHERE id = '".$row_agendadatum['id']."'") or die (mysql_error());
    //delete agenda row
    $delete_agenda= mysql_query("DELETE FROM agenda WHERE idagenda = '".$row_agendadatum['idagenda']."'") or die (mysql_error());
}

如果您的邏輯上每個agenta接受一個以上的議事日程,則可以在刪除該agenta之前簡單地計算一個特定agenta中是否有超過1個議事日程...

希望這可以幫助

您可以在一個查詢中從多個表中刪除:

DELETE agenda.*, agendadatum.*
FROM agenda
JOIN agendadatum USING (idagenda)
WHERE tot < NOW();

這將從議程和議程基准中刪除所有行,並且僅刪除那些與條件匹配的行(如果將DELETE替換為SELECT則返回與查詢相同的行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM