#1 Le 09/09/2010, à 18:59
- sputnick
[résolu][sqlite3] marche pas : "ON DELETE CASCADE ON UPDATE CASCADE"
Salut,
j'étudie pas mal les BDD en ce moment dont sqlite3.
Je m'entraine sur les clefs étrangères avec des contraintes.
Je n'arrive pas à réaliser de CASCADE. Exemple concret de création de BDD sqlite3 :
rm -f /tmp/fooDB.sqlite
sqlite3 /tmp/fooDB.sqlite<<EOF
-- http://www.sqlite.org/foreignkeys.html
-- BEGIN
PRAGMA foreign_keys=ON;
BEGIN TRANSACTION;
-- SCHEMA
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
trackid INTEGER,
trackname TEXT,
trackartist INTEGER REFERENCES artist(artistid) ON UPDATE CASCADE ON DELETE CASCADE
);
-- INSERT
INSERT INTO "artist" VALUES(1,'the doors');
INSERT INTO "artist" VALUES(2,'the cure');
INSERT INTO "artist" VALUES(3,'the stranglers');
INSERT INTO "track" VALUES(100,'the end',1);
INSERT INTO "track" VALUES(101,'boyz dont cry',2);
INSERT INTO "track" VALUES(102,'peaches',3);
-- DONE
COMMIT;
EOF
Maintenant que notre BDD est peuplée d'héros déjantés des années 60-70-80, si j'essaye de provoquer une CASCADE ben ça marche pas :
sqlite3 /tmp/fooDB.sqlite <<EOF
UPDATE artist SET artistid = 9999 WHERE artistname = 'the doors';
SELECT * FROM artist;
SELECT * FROM track;
EOF
Le champ "artistid" de la table "artist" est bien changé en 9999 bien sur, mais le champ "trackartist" de la table "track" devrais être modifié !
Je suis sur que j'oublie quelque chose de tout simple, mais quoi ???!!!
Dernière modification par sputnick (Le 09/09/2010, à 23:05)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#2 Le 09/09/2010, à 23:05
- sputnick
Re : [résolu][sqlite3] marche pas : "ON DELETE CASCADE ON UPDATE CASCADE"
Bon j'ai trouvé tout seul : il faut lancer
PRAGMA foreign_keys = ON;
avant de faire un UPDATE ! Je pensait qu'il suffisait de le faire uniquement lors de la crétion du schema...
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne