IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[MySQL] DELETE en cascade..ma requete ne marche pas


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 49
    Points
    49
    Par défaut [MySQL] DELETE en cascade..ma requete ne marche pas
    Bonjour à tous,

    J'ai un petit soucis de requete.
    Voila la conf de ma bdd (c'est ecrit RESTRICT mais c'est bien des on cascade DELETE dans la bdd, c la conf d'avant que je viens juste de changer):

    # MySQL Maestro 6.7.0.1
    # ----------------------------------------
    # Host :
    # Database : bibliotheque


    SET FOREIGN_KEY_CHECKS=0;

    CREATE DATABASE biblio /*!40100 DEFAULT CHARACTER SET latin1 */;

    USE biblio;

    #
    # Structure for table author:
    #

    CREATE TABLE author (
    id int(11) NOT NULL auto_increment,
    name varchar(45) default NULL,
    firstName varchar(45) default NULL,
    PRIMARY KEY (id)
    )TYPE=InnoDB;

    #
    # Structure for table book:
    #

    CREATE TABLE book (
    isbn varchar(45) NOT NULL,
    title varchar(45) default NULL,
    publication date default NULL,
    PRIMARY KEY (isbn)
    )TYPE=InnoDB;


    #
    # Structure for table category:
    #

    CREATE TABLE category (
    id int(11) NOT NULL auto_increment,
    name varchar(45) default NULL,
    description varchar(45) default NULL,
    code varchar(3) default NULL,
    PRIMARY KEY (id)
    )TYPE=InnoDB;

    #
    # Structure for table publisher:
    #

    CREATE TABLE publisher (
    id int(11) NOT NULL auto_increment,
    name varchar(45) default NULL,
    PRIMARY KEY (id)
    )TYPE=InnoDB;


    #
    # Structure for table author-book:
    #

    CREATE TABLE author_book (
    isbn varchar(45) NOT NULL,
    idauthor int(11) NOT NULL,
    PRIMARY KEY (idauthor,isbn),
    FOREIGN KEY (idauthor) REFERENCES author(id) ON DELETE RESTRICT ON UPDATE RESTRICT,
    FOREIGN KEY (isbn) REFERENCES book(isbn) ON DELETE RESTRICT ON UPDATE RESTRICT
    )TYPE=InnoDB;

    #
    # Structure for table category-book:
    #

    CREATE TABLE category_book (
    id int(11) NOT NULL,
    isbn varchar(45) NOT NULL,
    PRIMARY KEY (id,isbn),
    FOREIGN KEY (id) REFERENCES category(id) ON DELETE RESTRICT ON UPDATE RESTRICT,
    FOREIGN KEY (isbn) REFERENCES book(isbn) ON DELETE RESTRICT ON UPDATE RESTRICT
    )TYPE=InnoDB;


    #
    # Structure for table publisher-book:
    #

    CREATE TABLE publisher_book (
    isbn varchar(45) NOT NULL,
    idpublisher int(11) NOT NULL,
    PRIMARY KEY (idpublisher,isbn),
    FOREIGN KEY (idpublisher) REFERENCES publisher(id) ON DELETE RESTRICT ON UPDATE RESTRICT,
    FOREIGN KEY (isbn) REFERENCES book(isbn) ON DELETE RESTRICT ON UPDATE RESTRICT,
    INDEX(isbn),
    INDEX(idpublisher)
    )TYPE=InnoDB;

    set foreign_key_checks = 1;

    Voila mon problème :
    Je veux supprimer un auteur. Mon utilisateur recherche son auteur, et clique sur supprimer dans la liste des résultats que je retourne.
    Si je supprime un auteur avec l'identifiant 1 par exemple, il supprime dans author_book toutes les lignes ou idauthor est a 1 : Normal, c le delete on cascade.
    Le problème c'est que cela n'a pas de sens de laisser les livres dans la base s'il n'y a plus l'auteur. J'ai donc réaliser qu'il fallait que je fasse une deuxième requete pour supprimer les livres de la table book.

    il faut que l'isbn soit egal dans book et author_book et que idauthor = 1 et par la cascade, il va supprimer les référebces dans les tables publisher_book et category_book.

    Voila ma requete pour faire ca mais elle ne marche pas :

    DELETE FROM book b, author_book ab WHERE ab.idauthor='1' and b.isbn=ab.isbn

    2ème requete qui marche...Supprime l'auteur et la réf dans author_book
    DELETE FROM author a WHERE a.id='1'

    J'ai vu sur le net un paramètre using mais ca n'a pas marcher...Est-ce la solution ? Comment l'utiliser ?

    Pouvez-vous m'aider ??
    Merci d'avance !
    Deb

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM book b, author_book ab WHERE ab.idauthor='1' OR b.isbn=ab.isbn
    ??

  3. #3
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Merci pour la réponse rapide !

    MSQL Query Browser me dit :


    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE ab.idauthor='4' OR b.isbn=ab.isbn' at line 1

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    tu peux mettre le bout de code avec ta requête ?

  5. #5
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 80
    Points : 49
    Points
    49
    Par défaut
    J'ai trouvé ! J'ai décomposer ma requete plus simplement :

    DELETE FROM book WHERE isbn = (SELECT isbn FROM author_book WHERE idauthor='4')


    Merci de votre aide
    ++
    Deb

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] requete INSERT marche pas
    Par makamine dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 06/06/2011, 15h18
  2. [MySQL] ma requete ne marche pas
    Par fk04 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/02/2010, 13h00
  3. requete qui marche pas top
    Par kaking dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/01/2009, 08h27
  4. requete ne marche pas
    Par Stéph utilisateur d'acces dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 25/12/2008, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo