SQLite FOREIGN KEY ON DELETE CASCADE not working

旧时模样 提交于 2020-01-05 07:01:09

问题


I'm running the following script, wtf.sql, on SQLite Version 3.16.0:

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
;

Typing the following into bash:

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

Returns the following tuple:

90210|Beverly Hills|CA

What do I need to do to have deletes cascade properly?


回答1:


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';

What should happen now? Should all other addresses referring to 90210 also be deleted?

An ON DELETE CASCADE action deletes any child rows when a parent row is deleted. In this case, this means that deleting a row from ZIP will delete all corresponding ADDRESS rows. There is no similar mechanism in the other direction.



来源:https://stackoverflow.com/questions/44821480/sqlite-foreign-key-on-delete-cascade-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!