REFERENCES के साथ अपनी टेबल के बीच निरंतरता की गारंटी दें और ON DELETE व्यवहार को सोच-समझकर चुनें।
इस पाठ को Kodokon में खोलेंएक फ़ॉरेन की यह घोषित करती है कि कोई कॉलम किसी दूसरी टेबल की प्राइमरी की की ओर इशारा करता है। तब डेटाबेस किसी भी अनाथ वैल्यू को अस्वीकार कर देता है: आप ऐसी किताब नहीं बना सकते जिसका लेखक मौजूद न हो। सावधान, SQLite में यह जाँच डिफ़ॉल्ट रूप से बंद होती है: इसे अपनी स्क्रिप्ट के शीर्ष पर एक PRAGMA के साथ चालू करें।
PRAGMA foreign_keys = ON;
CREATE TABLE authors (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
author_id INTEGER NOT NULL
REFERENCES authors(id)
ON DELETE CASCADE
);
INSERT INTO authors (id, name) VALUES
(1, 'Ursula K. Le Guin'),
(2, 'Ted Chiang');
INSERT INTO books (id, title, author_id) VALUES
(1, 'A Wizard of Earthsea', 1),
(2, 'The Dispossessed', 1),
(3, 'Exhalation', 2);इस सुरक्षा की जाँच करें: एक अनाथ किताब डालें, फिर एक लेखक को हटाएँ। पहला कथन अस्वीकार कर दिया जाता है; दूसरा ON DELETE CASCADE की बदौलत अपनी किताबें भी अपने साथ ले जाता है।
INSERT INTO books (id, title, author_id)
VALUES (4, 'Orphan', 99);
DELETE FROM authors WHERE id = 1;
SELECT id, title FROM books;ON DELETE यह परिभाषित करता है कि जब पैरेंट गायब हो जाता है तो चाइल्ड पंक्तियों का क्या होगा। CASCADE उन्हें उसके साथ ही हटा देता है। SET NULL पंक्ति को रखता है लेकिन संदर्भ को मिटा देता है - इसलिए कॉलम को NULL स्वीकार करना ही चाहिए। किसी क्लॉज़ के बिना, SQLite NO ACTION लागू करता है: जब तक चाइल्ड मौजूद रहते हैं, पैरेंट को हटाना अस्वीकार कर दिया जाता है, यह व्यवहार RESTRICT के करीब है।
CREATE TABLE articles (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
reviewer_id INTEGER
REFERENCES authors(id)
ON DELETE SET NULL
);