在sqlite3中删除CASCADE

Luc*_*uke 40 sql sqlite

我有以下结构:(抱歉尴尬的名字,这是因为它是我的iPhone应用程序的sqlite数据库尚未发布)

CREATE TABLE klb_log (
  id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
  log_comment varchar(512)
)

CREATE TABLE klb_log_food_maps (
  uid integer,
  did integer,
  PRIMARY KEY (uid,did),
  FOREIGN KEY (uid) references klb_log(id) ON DELETE CASCADE,
  FOREIGN KEY (did) references klb_food(id) ON DELETE CASCADE
)

CREATE TABLE klb_food (
  id integer,
  description varchar(255),
  PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)

klb_log_food_maps当我删除行时,是否有理由不删除行klb_log

Pau*_*vre 74

默认情况下,SQLite中未启用外键支持.每次使用pragma连接到数据库时,都需要手动启用它:

PRAGMA foreign_keys = ON
Run Code Online (Sandbox Code Playgroud)

  • 你好,我只是像普通查询一样运行它吗? (2认同)
  • 我发现在连接数据库之后我必须立即执行PRAGMA命令,而不是在每个数据库命令之前. (2认同)
  • 每个数据库会话一次(即每次调用 /usr/class/cs145/bin/sqlite 一次)。即使您之前在使用特定数据库时启用了外键约束检查,与该数据库的新会话也不会检查外键约束,除非您发出此 PRAGMA 命令。如果您不发出此命令,则允许违反外键约束,并且它将在完全安静的情况下发生。通过http://cs.stanford.edu/people/widom/cs145/sqlite/SQLiteRefIntegrity.html (2认同)

小智 14

您是否启用了外键支持?

查询PRAGMA foreign_keys = ON;打开它