在Android 4.2中,使用SQLite 3.7.11,当我从Quizzes表中删除一行时,谁的架构在下面,QuizQuestions表中的相应行不会被删除。
我不知道出了什么问题。我试过把
db.execSQL("PRAGMA foreign_keys = ON;");
在创建表语句之前和之后。
创建表语句:
CREATE TABLE quizzes(quiz_name TEXT PRIMARY KEY COLLATE NOCASE);
CREATE TABLE quizQuestions(quiz_name TEXT, question_id INTEGER,
PRIMARY KEY(quiz_name, question_id),
FOREIGN KEY(quiz_name) REFERENCES quizzes(quiz_name) ON DELETE CASCADE,
FOREIGN KEY(question_id) REFERENCES questions(question_id) ON DELETE CASCADE);
最佳答案
您的数据库应该从 quizQuestions
中删除行,以防有人从 quizzes
或 questions
中删除行。如果关闭了外键支持并且您只有可以包含任何值的常规列,它将忽略 整个 外键约束。
每次您打开数据库时,SQLite 默认为 PRAGMA foreign_keys = OFF
。它不是表或模式的属性。
如果你使用 SQLiteOpenHelper
把它放在 onOpen
中。那是每次打开数据库时调用的地方。 onCreate
只在数据库创建时执行一次。
当你第一次调用 getWriteableDatabase
时 SQLiteOpenHelper
调用的是什么
onConfigure
每次,API Level >= 16 要求- 根据数据库文件的存在和版本,在事务中调用以下内容
onCreate
如果没有数据库文件。通常,这只会在应用的整个生命周期中发生一次。onUpgrade
如果数据库版本(PRAGMA user_version
- 保存在数据库文件中)低于 SQLiteOpenHelper 构造函数中提供的版本。每次您在代码中修改版本时都会发生这种情况。- 如果文件存在且版本匹配,则无。
onOpen
每次
如果 SQLiteOpenHelper
的同一个实例已经有一个打开的数据库,它只会返回它,并且不会发生上述任何事情。
关于android - SQLite删除级联不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13641250/