sqlite - SQLite删除键上的外键不起作用

标签 sqlite cascade

我正在SQLite版本3.16.0上运行以下脚本wtf.sql

PRAGMA foreign_keys = ON;

CREATE TABLE 'ZIP'(
  'Zip' INTEGER PRIMARY KEY NOT NULL,
  'City' TEXT NOT NULL,
  'State' TEXT NOT NULL
);
CREATE TABLE 'ADDRESS'(
  'Address_id' INTEGER PRIMARY KEY AUTOINCREMENT,
  'Line_1' TEXT NOT NULL,
  'Line_2' TEXT,
  'Zip' INTEGER NOT NULL,
  FOREIGN KEY('Zip') REFERENCES ZIP('Zip') ON DELETE CASCADE
);

INSERT OR IGNORE INTO ZIP('Zip','City','State')
  VALUES ('90210','Beverly Hills','CA')
;
INSERT INTO ADDRESS('Line_1','Line_2','Zip')
  VALUES ('1234 Overpriced House Street','c/o Bob','90210')
;
DELETE FROM ADDRESS
  WHERE Zip = '90210'
;
SELECT *
  FROM ZIP
;


在bash中输入以下内容:

$ sqlite3 bits-n-books.db < wtf.sql


返回以下元组:

90210|Beverly Hills|CA


我需要怎么做才能正确地删除级联?

最佳答案

INSERT INTO ADDRESS(Line_1,Line_2,Zip)
  VALUES ('1234 Overpriced House Street','c/o Bob','90210'),
         ('667 Another Street','2nd row','90210');

DELETE FROM ADDRESS WHERE Line_2 = '2nd row';


现在应该怎么办?是否还应删除所有引用90210的其他地址?

当删除父行时,ON DELETE CASCADE action会删除所有子行。在这种情况下,这意味着从ZIP删除一行将删除所有相应的ADDRESS行。在另一个方向上没有类似的机制。

关于sqlite - SQLite删除键上的外键不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44821480/

相关文章:

JPA:级联删除不会删除子项

清除集合时 NHibernate 级联删除子项

c# - ef代码先复杂化级联删除场景

c++ - 赋值=运算符重载

android - 我的sqlite查询错了吗?

android - 如果时间戳与今天的日期匹配,SQLite 选择行

python - 使用 Python 和 SQL 在 SQL INSERT & "commit"之后未显示新行

python - 删除级联的 Django 在 PostgreSQL 中没有产生正确的约束

java - 从自定义适配器类刷新 ListView - Android

sqlite - SUM()函数在sqLite中不起作用