Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di edeaj
    Registrato dal
    May 2001
    Messaggi
    81

    il cascade che non funziona

    salve a tutti, ho un piccolo problema con il vincolo di chiave esterna, a cui attribuisco la politica 'on delete cascade' ma che tuttavia non funziona...

    in pratica, ho due tabelle, la prima:
    TAB_BLOG (id_blog, ...)

    la seconda
    TAB_TESTI(id_testi, idb, ...)

    premetto che entrambe le tabelle sono perfettamente funzionanti.
    il campo idb, della seconda tabella, si collega al campo id_blog della prima, questo a seguito di una modifica fatta alla tabella TAB_TESTI, in quanto non avevo specificato il vincolo da subito...

    alter table TAB_TESTI add constraint foreign key (idb) references TAB_BLOG(id_blog)

    solo in un terzo momento ho aggiunto la politica CASCADE per la cancellazione di tuple, pertanto ho prima rimosso il vincolo:

    alter table TAB_TESTI drop KEY 'idb'

    e successivamente riscritto il vincolo completo:

    alter table TAB_TESTI add constraint foreign key (idb) references TAB_BLOG(id_blog) ON DELETE CASCADE


    Specifico tutto questo perchè non so se il mancato funzionamento di cascade deriva da tutte queste modifiche successive... magari avrò saltato un passaggio..
    comunque, il punto è che se cancello una tupla dalla tabella principale TAB_BLOG non viene cancellata anche la/le relativa/e tupla/e della tabella secondaria TAB_TESTI laddove TAB_TESTI.idb=TAB_BLOG.id_blog

    in parole povere, questo cascade non funziona.. d'altra parte non viene nemmeno applicata un'altra politica, come potrebbe essere quella di default che se non sbaglio è NO ACTION, per la quale la cancellazione di una tupla dalla tabella principale che è relata a tuple in altre tabelle non dovrebbe essere consentita...

    sinceramente non so dove sbattere la testa.
    per i miei inciarmi sql dispongo del pannello phpMyAdmin 2.10.0.2, non so se può servire a qualcuno saperlo...
    aiutatemi vi prego, non solo perchè mi servirebbe che questo benedetto cascade funzionasse, ma anche perchè sono curiosa di capire dove sta l'errore...


  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    483
    Il motore delle tue tabelle è INNODB ? ? ?


    ciao

  3. #3
    Utente di HTML.it L'avatar di edeaj
    Registrato dal
    May 2001
    Messaggi
    81
    ciao ipnotic!
    no è MyISAM

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da edeaj
    ciao ipnotic!
    no è MyISAM
    non sono un guru, ma credo che serva il motore innodb per le foreign keys
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    483
    Originariamente inviato da Andrea1979
    non sono un guru, ma credo che serva il motore innodb per le foreign keys

    esatto.. ha ragione Andrea....

  6. #6
    Utente di HTML.it L'avatar di edeaj
    Registrato dal
    May 2001
    Messaggi
    81
    ok, vi ringrazio, tra poco provo... comunque non mi è chiaro se il motore InnoDB devono averle entrambe le tabelle relate, solo quella principale o solo quella slave...

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    se non ricordo male, tutte le tabelle in cui definisci una foreign key e tutte le tabelle che usano foreign keys
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Utente di HTML.it L'avatar di edeaj
    Registrato dal
    May 2001
    Messaggi
    81
    m... ok.. però ora

    alter table NOMETABELLA add constraint foreign key (nomecampo) references TABELLAPROPRIETARIA(nomecampo) on delete cascade

    mi da l'errore
    #1216 - Cannot add or update a child row: a foreign key constraint fails


    ...

  9. #9
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Evidentemente il contenuto attuale delle tabelle non rispetta le condizioni delle foreign keys

  10. #10
    Utente di HTML.it L'avatar di edeaj
    Registrato dal
    May 2001
    Messaggi
    81
    ciao a tutti ho risolto!
    Si luca in effetti era così, sui campi foreign key non avevo prima specificato il vincolo index... affinchè possa a mio volta essere utile a qualcun altro, ho riscontrato anche l'errore

    ERROR 1005: Can't create table (...) (errno: 150)

    dovuto al fatto che apportando queste modifiche a tabelle già popolate, per alcune tuple il vincolo di chiave esterna non veniva soddisfatto...

    ho risolto ripulendo la tabella slave da quelle tuple che non avevano una corrispondenza con la tabella proprietaria.

    grazie a tutti per l'aiuto!

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.