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

标签 android sqlite android-sqlite

我正在尝试级联删除,这样当我从 myFooTable 中删除一条记录时,myFooBarLinkTablemyBarTable 中的所有关联记录都将被删除以及。下面是我当前 DB 模式尝试的简化版本。当我从 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);" );

最佳答案

关于删除级联 works only one way ; myFooBarLinkTable 表定义中的这些子句仅在 referenced 表中的记录被删除时触发,即在 myFooTablemyBarTable 中

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

关于android - 在android/sqlite中跨多个表进行级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440721/

相关文章:

android - 如何将音量 slider 添加到 Android 操作栏?

android - Custom ArrayAdapter 中的 EditText TextChangedListener 没有给出列表项的正确位置。返回的位置值始终为 0。

java - 通过 SQLite Manager 更新我的 SQLite 数据库列后,为什么更改没有反射(reflect)在我的 Android 应用程序中?

java - 使用 SQlite 数据库在自定义基础适配器 ListView 中存储复选框状态

java - 如果数据库不为空,则在应用程序开始时下载数据

android - 删除 ListView 中的数据库项(从 ArrayAdapter 创建)

java - 从android中的json获取数组

c# - System.Data.Sqlite 中的事务处理

android - 如何在 SQLite 中查询等于今天的日期?

java - 检测键盘何时在 Web View 中处于 Activity 状态