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

Requêtes MySQL Discussion :

SQL ON DELETE SET NULL ON INDEX NON UNIQUE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut SQL ON DELETE SET NULL ON INDEX NON UNIQUE
    Bonjour très simple question liée aux contraintes ON DELETE.

    j'ai une relation entre utilisateurs et posts par utilisateurs_posts avec les deux clés primaire id des deux tables dans utilisateurs_posts.

    je souhaite être capable de supprimer un utilisateur, je le supprime et tombe sur une contrainte de clé étrangère, normal je corrige en voulant placer un on delete set null sur utilisateurs_posts.utilisateurs_id mais phpmyadmin me dit imposssible à moins de placer des index uniques sur la(les) clé étrangère ce que je ne veux pas puisque je veux permettre à un utilisateur d'avoir plusieurs posts(en gardant à l'idée qu'un seul post puisse appartenir à plusieurs utilisateurs) donc il me reste à faire un delete mais dans ce cas je ne garde pas le posts qui sera comptabilisé depuis la(les) table, je devrais penser à lister les posts autrement ou il existe une autre façon de faire ?

    Peut-être dois-je me contenter d'ajouter un id comme clé primaire de la table utilisateurs_posts et ainsi ajouter mes null ou delete...

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ce serait tellement plus clair avec le DDL complet de vos tables et index

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 4
    Par défaut re
    En fait j'ai 33 tables et elles n'ont rien à voir(obligé de faire un screen pour 3 tables qui en prennent une vingtaine en une disposition) sauf pour utilisateur_id et à chaque fois je fais un on delete cascade ou set null qui fonctionne bien mais dans ce cas ci j'ai toujours un problème pour placer un on delete set null comme j'ai dis .. je ne vois pas du tout sauf réessayer quelques pistes:

    -remplacer l'idée on delete null par on delete cascade(je n'aime pas car sinon plus d'intêret de retrouver un post, c'est comme un article)
    -ajouter un index unique sur une nouvelle clé primaire remplaçant les deux autres clés en une



    table utilisateurs
    ---------------------
    id
    nom
    ...

    table utilisateurs_posts
    --------------------------
    utilisateurs_id (on delete null refusé)
    posts_id

    posts
    -------
    id
    ...

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 880
    Par défaut
    Salut Senethril1.

    Pas très clair vos explications.

    Vous avez trois tables, dont deux tables mères (table utilisateur et table post) et une table associative qui est aussi table fille (table utilisateur_post).
    Pour désirez supprimer un utilisateur.
    Si vous mettez "on delete cascade", à la suppression de cet utilisateur, toutes les lignes en relation avec cette utilisateur dans la table fille seront supprimées.
    Si vous mettez "on delete set null", la suppression ne se fera pas, mais dans la clef étrangère, la valeur sera remplacé par un NULL.

    L'important est de savoir comment vous avez déclaré dans votre table ce qui fait office de clef primaire.
    Deux cas peuvent se présenter.

    1) vous avez une clef primaire auto incrémenté.
    Dans les deux cas ci-dessus, vous n'aurez aucun problème, la suppression ou le NULL se feront normalement, sans contrainte.

    2) vous créez une clef primaire composé de vos deux clef étrangère.
    La suppression fonctionne normalement, mais pas le NULL, car celui-ci est interdit dans la clef primaire.

    Citation Envoyé par Senethril1
    je veux permettre à un utilisateur d'avoir plusieurs posts(en gardant à l'idée qu'un seul post puisse appartenir à plusieurs utilisateurs)
    La création d'une clef primaire composé du couple (identifiant utilisateur ; utilisateur post) doit être unique sans NULL.
    Est-ce que cette clef primaire vous convient ?

    Et que désirez-vous faire en cas de suppression d'un utilisateur ou d'un post ?
    Désirez-vous supprimer toutes les lignes dans la table fille ayant cet utilisateur ou ce post ?

    Que signifie pour vous un utilisateur ou un post à NULL dans la table fille ?

    @+

Discussions similaires

  1. [1.x] Création d'un index non unique
    Par ldv dans le forum Symfony
    Réponses: 1
    Dernier message: 03/11/2011, 15h25
  2. Que contiennent les index Non Cluster dans SQL 2005
    Par ygrim dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/03/2008, 16h01
  3. Ajouter la contrainte ON DELETE SET NULL a postériori
    Par EvilAngel dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 24/09/2006, 11h36
  4. ON DELETE SET autre chose que null
    Par minirom dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/07/2006, 15h32
  5. [sql] du DELETE et du NULL
    Par eizo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/02/2006, 09h36

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