Autant que je sache, il n'y a pas de possibilité directe d'avoir des contraintes de clé étrangère dans SQLite 3. J'ai une table many-to-many qui en a besoin, alors ' m créer un déclencheur qui déclenche un ABORT lorsque la contrainte de clé étrangère est violée. Ma déclaration ressemble à ceci:Comment créer un déclencheur sur plusieurs clés sur sqlite3
CREATE TRIGGER fkFooBar
BEFORE INSERT ON Foo_Bar
FOR EACH ROW BEGIN
SELECT RAISE (ABORT, 'Insert on Foo_Bar violates foreign key')
WHERE ((SELECT id as fId FROM FOO WHERE fId = NEW.fooId) IS NULL) || ((SELECT id as bId FROM BAR WHERE bId = NEW.barId) IS NULL);
END;
Mais ceci ne fait que contraindre le barId étant présent, pas le fooId. Je ne suis que vaguement familier avec SQL, et je n'ai pas traité de déclencheurs avant, donc je suis un peu perdu sur ça. Pourquoi ça ne marche pas? Est-ce que je vais à ce sujet dans le mauvais sens? Est-ce que cela devrait être beaucoup plus simple? (c'est-à-dire dans une instruction SELECT)
Alors, quel est l'outil RIGHT? –
Code. Plain ancien code. Dans quelle langue votre application est-elle écrite? Utilisez cette langue. Si vous disposez d'une couche Object-Relational Mapping (ORM), votre code "trigger" s'y trouve, pas la base de données. –