2013-01-21 54 views
1

我試圖級聯刪除,以便當我從myFooTable刪除記錄時,myFooBarLinkTablemyBarTable中的所有關聯記錄也被刪除。下面是我當前數據庫模式嘗試的簡化版本。當我從myFooTable刪除記錄時,myFooBarTable中的關聯記錄被刪除;但myBarTable中的記錄仍然存在。在android/sqlite中跨多個表的級聯刪除

public class MyDatabaseManager extends SQLiteOpenHelper { 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE myFooTable (fooID INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "fooText1 TEXT," + 
       "fooText2 TEXT " +  
       ");"); 

    db.execSQL("CREATE TABLE myBarTable (barID INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "barText1 TEXT, " + 
       "barText2 TEXT);"); 

    db.execSQL("CREATE TABLE myFooBarLinkTable (fooBarLinkID INTEGER PRIMARY KEY AUTOINCREMENT, " + 
       "fooLinkID REFERENCES myFooTable(fooID) ON DELETE CASCADE, " + 
       "barLinkID REFERENCES myBarTable(barID) ON DELETE CASCADE);"); 

回答

1

ON DELETE CASCADEworks only one way; myFooBarLinkTable表格定義中的這些條款僅在參考表中的記錄被刪除時觸發,即,在myFooTablemyBarTable中。

如果您希望以其他方式進行刪除,則必須編寫自己的觸發器,或者從您的應用程序執行單獨的DELETE命令。

+1

是否有理由更喜歡使用觸發器或手動刪除? –

+0

否;無論什麼最適合你。 (您必須以任何方式編寫'DELETE'命令。) –