关于删除在SQLite中不起作用的级联

关于删除在SQLite中不起作用的级联,sqlite,Sqlite,在SQLite for iOS 3.7.7中,我运行以下查询: PRAGMA foreign_keys = ON; create table venue(id integer primary key not null, name text not null); create table event(id integer primary key not null, name text not null, venue_id integer references venue(id) on del

在SQLite for iOS 3.7.7中,我运行以下查询:

PRAGMA foreign_keys = ON;

create table venue(id integer primary key not null, name text not null);

create table event(id integer primary key not null, name text not null, 
venue_id integer references venue(id) on delete cascade);

但是当我删除一个地点时,子事件不会被删除。有什么想法吗?

问题似乎是在不同的线程中使用多个句柄,尽管它们是同步的。由于iOS中包含的sqlite足够新,只要线程正确同步,就可以跨线程使用一个句柄,因此使用一个句柄而不是几个句柄应该不会有问题。但是我很想知道其他人是如何以及是否解决了这个问题。

问题似乎是在不同线程中使用多个句柄,尽管它们是同步的。由于iOS中包含的sqlite足够新,只要线程正确同步,就可以跨线程使用一个句柄,因此使用一个句柄而不是几个句柄应该不会有问题。但是我很想知道其他人是如何解决这个问题的,以及他们是否解决了这个问题。

我遵循了Catcall所说的,这对我来说很有效:通过运行设置外键

stmt.execute("PRAGMA foreign_keys = ON");

每次我建立到数据库的连接时。

我都遵循Catcall所说的,它对我起作用:通过运行设置外键

stmt.execute("PRAGMA foreign_keys = ON");

每次我与数据库建立连接时。

我无法在3.7.4中重现这种行为。是否确实在删除场地之前设置了PRAGMA foreign_keys=ON?这是一个连接设置,而不是数据库设置。这很奇怪。我确实犯了一个错误,没有在每个连接上设置它,但当我修复它时,它没有帮助。你在iPhone模拟器中试过这个吗?因为我让它在navicat for sqlite中工作,但在模拟器中不工作。好的,我只是在模拟器中用最简单的代码尝试了它,它工作了,所以错误一定在其他地方。谢谢。当你弄明白的时候,回答你自己的问题,并接受你的答案。可能发生在其他人身上。而且,我没有使用iPhone模拟器。当事情出错时,分而治之。使用SQLite命令解释器是一种简单的方法,可以将问题隔离到数据库或其他任何地方。我无法在3.7.4中重现这种行为。是否确实在删除场地之前设置了PRAGMA foreign_keys=ON?这是一个连接设置,而不是数据库设置。这很奇怪。我确实犯了一个错误,没有在每个连接上设置它,但当我修复它时,它没有帮助。你在iPhone模拟器中试过这个吗?因为我让它在navicat for sqlite中工作,但在模拟器中不工作。好的,我只是在模拟器中用最简单的代码尝试了它,它工作了,所以错误一定在其他地方。谢谢。当你弄明白的时候,回答你自己的问题,并接受你的答案。可能发生在其他人身上。而且,我没有使用iPhone模拟器。当事情出错时,分而治之。使用SQLite命令解释器是一种简单的方法,可以将问题隔离到数据库或其他任何地方。