在android / sqlite中跨多个表级联删除

时间:2013-01-21 14:26:48

标签: android sqlite android-sqlite

我正在尝试级联删除,这样当我从myFooTable删除记录时,myFooBarLinkTablemyBarTable中的所有相关记录也会被删除。我当前的数据库模式尝试的简化版本如下。当我从myFooTable删除记录时,myFooBarTable中的相关记录将被删除;但myBarTable中的记录仍然存在。

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 个答案:

答案 0 :(得分:1)

ON DELETE CASCADE works only one way; myFooBarLinkTable表定义中的这些子句仅在引用的表中的记录被删除时触发,即在myFooTablemyBarTable中。

如果您希望以其他方式进行删除,则必须编写自己的触发器,或从应用程序执行单独的DELETE命令。