ack"->"cd"
* are declared.
*
* Perhaps things would change, if one would change the order of CREATE TABLE
...
*/
-- RESTRICT vs. CASCADE: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE CASCADE);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
-- CASCADE vs. RESTRICT: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE CASCADE
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE RESTRICT);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
-- CASCADE vs. SET NULL: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE CASCADE
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE SET NULL);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
-- SET NULL vs. CASCADE: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE SET NULL
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE CASCADE);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
-- RESTRICT vs. SET NULL: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE SET NULL);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
-- SET NULL vs. RESTRICT: RESTRICT wins
PRAGMA foreign_keys = ON;
CREATE TABLE artist (id PRIMARY KEY);
INSERT INTO artist VALUES(1);
CREATE TABLE cd (id PRIMARY KEY,artist,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE RESTRICT);
INSERT INTO cd VALUES(1,1);
CREATE TABLE track (artist,cd,
FOREIGN KEY (artist) REFERENCES artist(id) ON DELETE SET NULL
FOREIGN KEY (cd) REFERENCES cd(id) ON DELETE RESTRICT);
INSERT INTO track VALUES(1,1);
DELETE FROM artist /* Error: foreign key constraint failed */;
SELECT COUNT(*) AS result FROM artist ; /* Result: 1 */;
SELECT COUNT(*) AS result FROM cd WHERE artist = 1; /* Result: 1 */;
SELECT COUNT(*) AS result FROM track WHERE artist = 1 AND cd = 1; /* Result: 1
*/;
--
kind regards
- Roland Wilczek
Certified ScrumMaster (CSM)
Nachtigallenstraße 11
53179 Bonn
Tel.: 0228 / 336 70 40 9
Mobil: 0171 / 72 36 849
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users