Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133

    ON DELETE CASCADE MySQL

    Salve a tutti...non capisco perchè, non riesco a capire come mai non mi funziona l'evento ON DELETE CASCADE quando creo una chiave esterna su una tabella. Con un esempio sarà più facile.

    Diciamo di creare queste due tabelle:

    CREATE TABLE utenti (nome VARCHAR(20), cognome VARCHAR(20), id INT(255) AUTO_INCREMENT PRIMARY KEY)

    CREATE TABLE messaggi (testo VARCHAR(255), mid INT(255) AUTO_INCREMENT PRIMARY KEY, uid INT(255), FOREIGN KEY messaggi (uid) REFERENCES utenti (id) ON DELETE CASCADE)

    diciamo di avere un utente con id = 1, e avere nella tabella messaggi tre messaggi con uid = 1, quindi, in teoria, scritti dall'utente con id = 1...nel caso in cui io cancelli dalla tabella utenti l'utente con id=1, non mi si dovrebbero cancellare tutti e tre i messaggi presenti nella tabella messaggi con uid=1 data la presenza della chiave esterna con ON DELETE CASCADE?

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133
    up

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133
    up

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    133
    Mi rispondo da solo, nel caso in cui qualcuno si dovesse trovare nel mio stesso problema :

    Ho scoperto dov'era l'errore. Io uso Xampp, e per far funzionare i vincoli di chiavi esterne l'ENGINE del database deve essere InnoDB. Per fare ciò bisogna editare il file my dentro la cartella xampp/mysql/bin, decommentando tutte le linee sotto l'area skip InnoDB e commentare la stessa riga skip-InnoDB fino ad ottenere ciò:

    #skip-innodb
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir = C:/Programmi/xampp/mysql/data/
    innodb_data_file_path = ibdata1:10M:autoextend
    innodb_log_group_home_dir = C:/Programmi/xampp/mysql/data/
    innodb_log_arch_dir = C:/Programmi/xampp/mysql/data/
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    set-variable = innodb_buffer_pool_size=16M
    set-variable = innodb_additional_mem_pool_size=2M
    # Set .._log_file_size to 25 % of buffer pool size
    set-variable = innodb_log_file_size=5M
    set-variable = innodb_log_buffer_size=8M
    innodb_flush_log_at_trx_commit=1
    set-variable = innodb_lock_wait_timeout=50

    a questo punto sarà necessario terminare ogni query relativa alla creazione di nuove tavole con vincoli di chiave esterna con type=InnoDB

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.