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

    [Mysql] Chiarimento su Foreing Key

    vorrei un chiarimento sulle foreign key.
    supponiamo che ho questa tabella:
    codice:
    desc book;
    +-----------+--------------+------+-----+---------+----------------+
    | Field     | Type         | Null | Key | Default | Extra          |
    +-----------+--------------+------+-----+---------+----------------+
    | book_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | title     | varchar(100) | NO   | UNI | NULL    |                |
    | author_id | int(11)      | NO   | MUL | NULL    |                |
    | editor_id | int(11)      | NO   | MUL | NULL    |                |
    | price     | decimal(6,2) | YES  |     | 0.00    |                |
    | isbn      | varchar(50)  | YES  |     | NULL    |                |                                                                                                               
    | note      | text         | YES  |     | NULL    |                |                                                                                                               
    +-----------+--------------+------+-----+---------+----------------+
    che ha una FK verso la tabella autori:
    codice:
    desc author;
    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | author_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | author_name | varchar(150) | NO   | UNI | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+
    io vorrei questo comportamento:
    -se cancello un libro nn cancello l'autore
    -se cancello l'autore si cancellano tutt i suoi libri
    -se modifico il nome dell'autore mi ritrovo con i libri con il nome giusto (ma questo comportamento è fatto già praticamente di default se nn sbaglio visto che se modifico il nome nella tabella auhtor me lo ritrovo giusto nella query dei libri).
    che devo mettere in on cascade e on update??

  2. #2
    nessuno sa dirmi nulla al riguardo??

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    ciao se vuoi, automaticamente, cancellare tutti i libri cancellando l'autore quando crei la struttura della tabella book devi fare cosi:

    codice:
        author_id  INTEGER REFERENCES author(author_id) on delete cascade,
    che indica che quando elimina il record nella tabella autori elimina anche tutti i record nella tabella book che fanno riferimento all'autore eliminato.

    se non metti la clausola 'on cascade' risulterà impossibile eliminare un record autore se quell'autore e' presente nella tabella book.



    io vorrei questo comportamento:
    -se cancello un libro nn cancello l'autore

    e' gia così.



    -se cancello l'autore si cancellano tutt i suoi libri

    metti 'on delete cascade' come spiegato



    -se modifico il nome dell'autore mi ritrovo con i libri con il nome giusto (ma questo comportamento è fatto già praticamente di default se nn sbaglio visto che se modifico il nome nella tabella auhtor me lo ritrovo giusto nella query dei libri).

    ti sei già risposto.




    ciao

  4. #4
    ok, era questo che mi interessava.
    alla fine devo solo mettere delete 'on cascade'.
    grazie!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Originariamente inviato da fermat
    ok, era questo che mi interessava.
    alla fine devo solo mettere delete 'on cascade'.
    grazie!!
    fai attenzione mi sembra che la sintassi esatta sia:

    'on delete cascade'

    ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.