Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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... lol


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne