我正在尝试级联删除,这样当我从myFooTable
删除记录时,myFooBarLinkTable
和myBarTable
中的所有相关记录也会被删除。我当前的数据库模式尝试的简化版本如下。当我从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);" );
答案 0 :(得分:1)
ON DELETE CASCADE
works only one way; myFooBarLinkTable
表定义中的这些子句仅在引用的表中的记录被删除时触发,即在myFooTable
或myBarTable
中。
如果您希望以其他方式进行删除,则必须编写自己的触发器,或从应用程序执行单独的DELETE
命令。