[SQL] Suppression en "cascade"
patrice86
Messages postés
1380
Date d'inscription
Statut
Membre
Dernière intervention
-
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
patrice86 Messages postés 1380 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je disposes d'une BDD avec des clients, des commandes...
Lorsque je supprime un client de la BDD, je souhaiterai que automatiquement soit supprimer toute les commandes effectuées par ce client.
Voici la création des tables:
CREATE TABLE personnes
(
num_pers serial NOT NULL,
nom_pers character varying(20) NOT NULL,
prenom_pers character varying(20) NOT NULL,
fix_pers integer,
port_pers integer,
rue_pers character varying(30),
cp_pers integer,
ville_pers character varying(20),
mail character varying(15),
CONSTRAINT personnes_pkey PRIMARY KEY (num_pers )
)
CREATE TABLE commandes
(
num_com serial NOT NULL,
total_com integer,
numpers_com integer NOT NULL,
CONSTRAINT pk_commandes PRIMARY KEY (num_com ),
CONSTRAINT fk_commandes FOREIGN KEY (numpers_com)
REFERENCES personnes (num_pers)
)
Les tables sont donc liées par num_pers, maintenant restes à savoir comment faire la suppression automatique dans commandes.
Merci de votre aide.
Je disposes d'une BDD avec des clients, des commandes...
Lorsque je supprime un client de la BDD, je souhaiterai que automatiquement soit supprimer toute les commandes effectuées par ce client.
Voici la création des tables:
CREATE TABLE personnes
(
num_pers serial NOT NULL,
nom_pers character varying(20) NOT NULL,
prenom_pers character varying(20) NOT NULL,
fix_pers integer,
port_pers integer,
rue_pers character varying(30),
cp_pers integer,
ville_pers character varying(20),
mail character varying(15),
CONSTRAINT personnes_pkey PRIMARY KEY (num_pers )
)
CREATE TABLE commandes
(
num_com serial NOT NULL,
total_com integer,
numpers_com integer NOT NULL,
CONSTRAINT pk_commandes PRIMARY KEY (num_com ),
CONSTRAINT fk_commandes FOREIGN KEY (numpers_com)
REFERENCES personnes (num_pers)
)
Les tables sont donc liées par num_pers, maintenant restes à savoir comment faire la suppression automatique dans commandes.
Merci de votre aide.
A voir également:
- Delete cascade sql
- Hiberfil.sys delete - Guide
- Liste déroulante en cascade - Guide
- Juste delete me - Guide
- Logiciel sql - Télécharger - Bases de données
- Sql lister les tables ✓ - Forum Programmation
2 réponses
Salut,
Il faudrait que tu précises le sgbd que tu utilises car les techniques varient.
Pour Oracle cela ce situe au niveau du create table, voir : https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php
cdlt
Il faudrait que tu précises le sgbd que tu utilises car les techniques varient.
Pour Oracle cela ce situe au niveau du create table, voir : https://www.techonthenet.com/oracle/foreign_keys/foreign_delete.php
cdlt
J'utilise une bdd sous postgre
J'ai essayé en faisant
CREATE TABLE commandes
(
num_com serial NOT NULL,
total_com integer,
numpers_com integer NOT NULL,
CONSTRAINT pk_commandes PRIMARY KEY (num_com ),
CONSTRAINT fk_commandes FOREIGN KEY (numpers_com)
REFERENCES personnes (num_pers) ON DELETE CASCADE
)
mais lorsque je veux ajouter une commande en sql:
insert into commandes values(default, 3000,6);
j'ai un jolie message d'erreur:
ERREUR: une instruction insert ou update sur la table « commandes » viole la contrainte de clé
étrangère « fkpers_com »
DETAIL: La clé (numpers_com)=(6) n'est pas présente dans la table « personnes ».
J'ai essayé en faisant
CREATE TABLE commandes
(
num_com serial NOT NULL,
total_com integer,
numpers_com integer NOT NULL,
CONSTRAINT pk_commandes PRIMARY KEY (num_com ),
CONSTRAINT fk_commandes FOREIGN KEY (numpers_com)
REFERENCES personnes (num_pers) ON DELETE CASCADE
)
mais lorsque je veux ajouter une commande en sql:
insert into commandes values(default, 3000,6);
j'ai un jolie message d'erreur:
ERREUR: une instruction insert ou update sur la table « commandes » viole la contrainte de clé
étrangère « fkpers_com »
DETAIL: La clé (numpers_com)=(6) n'est pas présente dans la table « personnes ».