[英]foreign key problem in jdbc
我有兩個功能:
public void Populate_flights()
public void Populate_reservations()
航班和預訂是兩個表格。其中一個條目即航班號。 在預訂表中。 因此,這是一個外鍵。
現在,我需要通過jbdc填充數據庫。 所以我正在使用:在公共void Populate_reservations()函數中:
Statement s = conn.createStatement();
s.executeUpdate("DELETE FROM reservations");
公共無效Populate_flights()-:
Statement s = conn.createStatement();
s.executeUpdate("DELETE FROM flights");
因此,以這種方式,在填充數據庫之前,我之前的所有條目都被刪除了,並且那里沒有多余的數據。由於預訂表中有一個外鍵,所以我不能從航班上先刪除條目。 我必須先從預訂中刪除條目。 但是預訂功能在航班功能之后被調用,所以我該怎么做才能刪除所有條目。
所以應該是這樣的:
Statement s = conn.createStatement();
s.execute("SET FOREIGN_KEY_CHECKS=0");
s.executeUpdate("DELETE FROM flights");
s.execute("SET FOREIGN_KEY_CHECKS=1");
您可以在MySQL中暫時禁用外鍵檢查,以執行如果啟用以下檢查將失敗的操作:
// Disable foreign keys check
Statement stmt = conn.createStatement();
stmt.execute("SET FOREIGN_KEY_CHECKS=0");
stmt.close();
// Do your stuff
// Enable foreign keys check
Statement stmt = conn.createStatement();
stmt.execute("SET FOREIGN_KEY_CHECKS=1");
stmt.close();
請注意,這是每個連接的設置,因此您必須使用相同的conn
對象來完成所有工作。
因此,您希望在刪除時級聯外鍵引用。 您必須在外鍵約束上進行設置。 首先刪除舊約束,然后使用級聯指令重新創建它。 假設FK名稱為fk_flight
,這是一個示例:
ALTER TABLE reservations
DROP CONSTRAINT fk_flight;
ALTER TABLE reservations
ADD CONSTRAINT fk_flight
FOREIGN KEY (flight_id)
REFERENCES flight(id)
ON DELETE CASCADE;
這樣,如果您單獨刪除航班,所有參考預訂都將被刪除。
Statement s = conn.createStatement();;
s.addBatch("SET FOREIGN_KEY_CHECKS = 0");
s.addBatch("DELETE FROM reservations");
s.addBatch("DELETE FROM flights");
s.addBatch("SET FOREIGN_KEY_CHECKS = 1");
s.executeBatch();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.