【问题标题】:ON DELETE CASCADE not working in SQLiteON DELETE CASCADE 在 SQLite 中不起作用
【发布时间】:2011-12-20 14:26:37
【问题描述】:

在 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);

但是当我删除一个场地时,子事件并没有被删除。有什么想法吗?

【问题讨论】:

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

标签: sqlite


【解决方案1】:

我遵循 Catcall 所说的,它对我有用:通过运行设置 foreign_keys

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多