Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    eliminazione utente da tabella con chiave primaria inserita in una tabella differente

    ciao , ho un problema,
    io ho due tabelle una Utenti e l'altra Accessi

    nella tabella Accessi esiste una chiave secondaria che fa riferimento all'id della tabella Utenti.
    Ora volessi cancellare un'utente non me lo fa fare , visto che la sua chiave primaria è inserita ,come secondaria , nella tabella Accessi.
    esiste un modo per ovviare a questo problema ?
    se non esistesse, qualcuno potrebbe consigliarmi un modo per poter togliere dalla tabella Utenti un record e registrare gli accessi effettuati?

    grazie

  2. #2
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Immagino che con chiave secondaria tu intenda chiave esterna.
    Comunque, prettendo che usi MySQL e come engine InnoDB (è l'unico che supporta l'integrità referenziale) devi dare il seguente comando:

    codice:
    ALTER TABLE Access ADD COSTAINT fk_Utenti FOREIGN KEY (tuachiaveesternainAccessi) REFERENCES Utenti(chiavediUtenti) ON DELETE: NO ACTION ON UPDATE: CASCADE;
    Se avevi già impostatop un vincolo di chiave esterna (e credo sia così perchè altrimenti non ti dava questo errore) devi cancellarlo.

  3. #3

    Re: eliminazione utente da tabella con chiave primaria inserita in una tabella differente

    Originariamente inviato da tapu
    ciao , ho un problema,
    io ho due tabelle una Utenti e l'altra Accessi

    nella tabella Accessi esiste una chiave secondaria che fa riferimento all'id della tabella Utenti.
    Ora volessi cancellare un'utente non me lo fa fare , visto che la sua chiave primaria è inserita ,come secondaria , nella tabella Accessi.
    esiste un modo per ovviare a questo problema ?
    se non esistesse, qualcuno potrebbe consigliarmi un modo per poter togliere dalla tabella Utenti un record e registrare gli accessi effettuati?

    grazie
    bisognerebbe sapere che tipo di motore usi, se InnoDB o MyIsam e come viene fatto il controllo di congruita' tra le tabelle.

    In linea di massima dovresti cancellare dagli accessi tutti i riferimenti dell'utente e poi successivamente rimuovere l'utente. Se vuoi salvare la lista degli accessi di utenti cessati potresti sempre farne una copia (utenti e accessi) su altre tabelle storiche..

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da r1cky`
    Immagino che con chiave secondaria tu intenda chiave esterna.
    Comunque, prettendo che usi MySQL e come engine InnoDB (è l'unico che supporta l'integrità referenziale) devi dare il seguente comando:

    codice:
    ALTER TABLE Access ADD COSTAINT fk_Utenti FOREIGN KEY (tuachiaveesternainAccessi) REFERENCES Utenti(chiavediUtenti) ON DELETE: NO ACTION ON UPDATE: CASCADE;
    Se avevi già impostatop un vincolo di chiave esterna (e credo sia così perchè altrimenti non ti dava questo errore) devi cancellarlo.
    azz... oggi ti corro dietro....

    Mi pare di capire che non voglia eliminare il riferimento, ma eliminare un utente con riferimenti.
    Un controllo di congruita' referenziale lo puoi fare con qualsiasi tipo di tabella, basta una select prima di un delete.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    Utilizzo Mysql con innoDB.

    Si , voglio eliminare un'utente dalla tabella Utenti , solo che nella tabella accessi ho la chiave esterna di Utenti.

    Alla fine ho risolto inserendo una tabella storicoutenti , e da li vado a prendere l'idutenti da inserire nella tabella accessi; anche perche mi piacerebbe aver tutti gli accessi effettuati dagli utenti che si sono registrati. ma se usassi alter table e poi elimino l'utente la tabella accessi m rimarrebbe invariata o verrebbero eliminati i record dell'utente eliminato ?

    grazie mille dlla disponibilità.
    ciao

  6. #6
    Originariamente inviato da tapu
    Utilizzo Mysql con innoDB.

    Si , voglio eliminare un'utente dalla tabella Utenti , solo che nella tabella accessi ho la chiave esterna di Utenti.

    Alla fine ho risolto inserendo una tabella storicoutenti , e da li vado a prendere l'idutenti da inserire nella tabella accessi; anche perche mi piacerebbe aver tutti gli accessi effettuati dagli utenti che si sono registrati. ma se usassi alter table e poi elimino l'utente la tabella accessi m rimarrebbe invariata o verrebbero eliminati i record dell'utente eliminato ?

    grazie mille dlla disponibilità.
    ciao
    avresti un riferimento "orfano" cioe' un valore a cui non corrisponde piu' alcun utente. Al posto tuo lascerei tutto come sta aggiungendo un campo dove chiarisco lo stato utente in modo da gestirlo comunque. es:

    stato = 0 non attivo
    stato = 1 attivo
    stato = 2 bannato
    etc etc.....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.