J'ai deux tables (renommées/refactorisées à des fins d'illustration) avec une relation plusieurs-à-plusieurs dans une base de données HSQL. Je veux que tout soit effacé lorsque je supprime d'un côté d'une relation Many-to-Many (sans interroger la table, ce qui est la performance critique)Aide en cascade de suppression SQL (question spécifique)
Voici mes tableaux principaux:
CREATE TABLE PERSON
(
PERSON_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
NAME VARCHAR(50)
)
CREATE TABLE JOB
(
JOB_ID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
NAME VARCHAR(50)
)
ici est ma table de jointure:
CREATE TABLE JOB_PERSON
(
PERSON_ID INTEGER,
JOB_ID INTEGER
)
Voici mes contraintes:
ALTER TABLE JOB_PERSON ADD
CONSTRAINT FK_PERSON_JOB FOREIGN KEY(PERSON_ID)
REFERENCES PERSON ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE JOB_PERSON ADD
CONSTRAINT FK_JOB_PERSON FOREIGN KEY(JOB_ID)
REFERENCES JOB ON DELETE CASCADE ON UPDATE CASCADE
Je essentiellement wa nt pour faire ceci: "supprimer de la personne où person_id = 0" et lui faire supprimer tout de PERSON, JOB_PERSON et JOB si l'entité JOB sera orphelin (n'est plus référencé dans la table many to many)
Est-ce possible sans interroger la base de données? Quand je supprime, il supprime seulement de PERSON et JOB_PERSON. Comme vous pouvez probablement le dire, mes compétences sql manquent.
Voici les données mannequin Je joue autour avec:
insert into person values(null,'Arthur');
insert into person values(null,'James');
insert into job values(null, 'Programmer')
insert into job values(null, 'Manager')
insert into job_person values(0,0);
insert into job_person values(0,1);
insert into job_person values(1,1);
Donc, si j'entre ces deux déclarations:
delete from person where person_id=0
delete from person where person_id=1
Je voudrais tout avoir dans les 3 tables supprimées . Possible?