Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Creare una relazione tra tabelle con MySql

    non sono molto pratico di db e di mysql, ma da quello che ho letto due tabelle dovrebbero in qualche modo essere relazionate nella creazione del database

    ad esempio se ho una tabella cliente con campi : idcliente, nome, cognome, idordine
    e una tabella ordine con campi: idordine, prezzo, data

    vorrei come creare la relazione tra idordine della tabella cliente e idordine della tabella ordine?
    ora ho solo creato le tabelle e i campi, ma se provo a inserire una riga nella tabella cliente, ad esempio

    (idcliente=1, nome=pippo, cognome=pluto, idordine=120)
    mi aspetto che compaia anche una riga anche nella tabella ordine
    con idordine = 120

    o non devo fare due insert (o due delete nella cancellazione) affinchè appaia?


    ho provato a usare una istruzione FOREIGN KEY:

    FOREIGN KEY (idordine) REFERENCES cliente(idordine)

    nella creazione della tabella 'cliente' ,
    ma così facendo quando cerco di creare una riga nella tabella ordine
    mi dà un errore del tipo (mentre se creo la riga nella tabella cliente prima se la prende):

    "Cannot add or update a child row: a foreign key constraint fails ..."
    ??


    ciao

  2. #2
    il funzionamento è corretto, non puoi inserire un ordine nella tabella cliente se questo ordine non esiste già nella tabella ordini(la foreign key è utilizzata proprio per questo motivo).

    Quello che devi fare è inserire prima la riga nella tabella ordini, la chiave primaria che dovrai inserire è la stessa che verrà inserita come chiave esterna nella tabella cliente.
    Forex: forum dedicato al mercato del trading forex

  3. #3
    ok quindi in pratica la relazione è tipo father - child (padre figlio) come suggeriva l'errore

    per gli insert credo siano due visto che se il funzionamento è corretto così farò due insert
    (nel mio immaginario pensavo che si potesse inserire su due tabelle in una volta sola a partire dalla chiave primaria uguale )
    grazie

  4. #4
    Originariamente inviato da leonard_shelby
    ok quindi in pratica la relazione è tipo father - child (padre figlio) come suggeriva l'errore

    per gli insert credo siano due visto che se il funzionamento è corretto così farò due insert
    (nel mio immaginario pensavo che si potesse inserire su due tabelle in una volta sola a partire dalla chiave primaria uguale )
    grazie
    mi sembra proprio che funzioni così...Una cosa che ti può essere utile è il caso opposto cioè quando vai a eliminare una riga della tabella ordini...

    Se non specifichi nulla e tenti di cancellare una riga con chiave primaria in uso nella tabella clienti come chiave esterna ti verrà sollevato un errore simile a quello riportato in precedenza...In questo caso però puoi specificare quando crei la tabella in che modo comportarti in queste situazioni....

    ora non mi ricordo tutte le possibilità te ne riporto un paio:
    on delete cascade
    on delete set null
    ecc..
    Forex: forum dedicato al mercato del trading forex

  5. #5
    Originariamente inviato da carlo10
    mi sembra proprio che funzioni così...Una cosa che ti può essere utile è il caso opposto cioè quando vai a eliminare una riga della tabella ordini...

    Se non specifichi nulla e tenti di cancellare una riga con chiave primaria in uso nella tabella clienti come chiave esterna ti verrà sollevato un errore simile a quello riportato in precedenza...In questo caso però puoi specificare quando crei la tabella in che modo comportarti in queste situazioni....

    ora non mi ricordo tutte le possibilità te ne riporto un paio:
    on delete cascade
    on delete set null
    ecc..

    Da internet:

    ON DELETE CASCADE
    Specifica che se si tenta di eliminare una riga contenente una chiave a cui fanno riferimento chiavi esterne in righe esistenti in altre tabelle, verranno inoltre eliminate tutte le righe contenenti tali chiavi esterne.
    quindi usando ON DELETE CASCADE ottengo che cancellando da una tabella , mi si cancella anche in un'altra la riga?

  6. #6
    quindi usando ON DELETE CASCADE ottengo che cancellando da una tabella , mi si cancella anche in un'altra la riga?
    esatto ti si cancellano tutte le righe della tabella cliente che hanno come chiave esterna la chiave primaria cancellata
    Forex: forum dedicato al mercato del trading forex

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.