簡體   English   中英

jdbc中的外鍵問題

[英]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.

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