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

    [Mysql] Problema con aggiunta foreign key

    ho un problema con l'aggiunta di una foreign key.
    codice:
    mysql> desc book;
    +----------+--------------+------+-----+---------+----------------+
    | Field    | Type         | Null | Key | Default | Extra          |
    +----------+--------------+------+-----+---------+----------------+
    | book_id  | int(11)      | NO   | PRI | NULL    | auto_increment |
    | title    | varchar(50)  | NO   |     | NULL    |                |
    | author   | int(11)      | NO   | MUL | NULL    |                |
    | editor   | int(11)      | NO   | MUL | NULL    |                |
    | price    | decimal(7,2) | NO   |     | NULL    |                |
    | position | int(11)      | NO   | MUL | NULL    |                |
    +----------+--------------+------+-----+---------+----------------+
    6 rows in set (0.00 sec)
    
    mysql> desc position;
    +---------------+-------------+------+-----+---------+----------------+
    | Field         | Type        | Null | Key | Default | Extra          |
    +---------------+-------------+------+-----+---------+----------------+
    | position_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
    | position_name | varchar(20) | YES  |     | NULL    |                |
    +---------------+-------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    ho provato da terminale, da mysql-query-browser e phpmyadmin.
    vi riporto l'errore di quest'ultimo:
    codice:
     ALTER TABLE `book` ADD FOREIGN KEY ( `position` ) REFERENCES `book`.`position` (
    `position_id`
    ) ON DELETE NO ACTION ON UPDATE NO ACTION ;
    
    Messaggio di MySQL: Documentazione
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`book`.<result 2 when explaining filename '#sql-f66_95'>, CONSTRAINT `#sql-f66_95_ibfk_3` FOREIGN KEY (`position`) REFERENCES `position` (`position_id`) ON DELETE NO ACTION ON UPDATE NO ACTION) 
    
    ERRORE
    ALTER TABLE `book` ADD FOREIGN KEY ( `position` ) REFERENCES `book`.`position` (
    `position_id`
    ) ON DELETE NO ACTION ON UPDATE NO ACTION ;
    nn riesco a capire perchè le altre due foreign key le ha aggiunte senza problemi e le strutture delle tabella sono identiche.

    ps: la tabella principale si chiama come il db, poca fantasia......

  2. #2
    ho ricreato il db dall'inizio.
    ho creato queste tre tabelle:
    codice:
    mysql> desc author;
    +-------------+--------------+------+-----+---------+----------------+
    | Field       | Type         | Null | Key | Default | Extra          |
    +-------------+--------------+------+-----+---------+----------------+
    | author_id   | int(11)      | NO   | PRI | NULL    | auto_increment |
    | author_name | varchar(100) | NO   |     | NULL    |                |
    +-------------+--------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    
    mysql> desc editor;
    +-------------+-------------+------+-----+---------+----------------+
    | Field       | Type        | Null | Key | Default | Extra          |
    +-------------+-------------+------+-----+---------+----------------+
    | editor_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
    | editor_name | varchar(50) | NO   |     | NULL    |                |
    +-------------+-------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    
    mysql> desc position;
    +---------------+-------------+------+-----+---------+----------------+
    | Field         | Type        | Null | Key | Default | Extra          |
    +---------------+-------------+------+-----+---------+----------------+
    | position_id   | int(11)     | NO   | PRI | NULL    | auto_increment |
    | position_name | varchar(20) | NO   |     | NULL    |                |
    +---------------+-------------+------+-----+---------+----------------+
    2 rows in set (0.00 sec)
    poi ho provato a creare la tabella book:
    codice:
    mysql> create table book (
        -> title varchar(100) not null,
        -> author int not null,
        -> editor int not null,
        -> price decimal(7,3),
        -> position int not null,
        -> primary key book_key (book_id),
        -> index author_key (author),
        -> index editor_key (editor),
        -> index position_key (position),
        -> foreign key (author) references author(author_id) on delete no action on update no action,
        -> foreign key (editor) references editor(editor_id) on delete no action on update no action,
        -> foreign key (position) references position(position_id) on delete no action on update no action) //linea 13
        -> TYPE=InnoDB;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'position(position_id) on delete no action on update no action)
    TYPE=InnoDB' at line 13
    nn riesco a capire dove sbaglio.
    le tabelle sono uguali come le foreign key.

  3. #3
    Puoi togliere i behaviour on ... in quanto il default è già no action. Non usare la parola type per specificare l'egine in quanto è deprecata, usa "engine". Non c'e' bisogno di aggiungere gli indici esplicitamente sulle colonne visto che di default quando crei una foreign key ti viene automaticamente creato l'indice sottostante.

    Queste sono le cose che mi saltano all'occhio, ora non ho il tempo di fare un test del tuo codice ma comunque nel manuale ufficiale dovresti trovare degli utili riferimenti
    http://dev.mysql.com/doc/refman/5.0/...nstraints.html
    Saluti a tutti
    Riccardo

  4. #4
    Originariamente inviato da riccardone
    Puoi togliere i behaviour on ... in quanto il default è già no action. Non usare la parola type per specificare l'egine in quanto è deprecata, usa "engine". Non c'e' bisogno di aggiungere gli indici esplicitamente sulle colonne visto che di default quando crei una foreign key ti viene automaticamente creato l'indice sottostante.

    Queste sono le cose che mi saltano all'occhio, ora non ho il tempo di fare un test del tuo codice ma comunque nel manuale ufficiale dovresti trovare degli utili riferimenti
    http://dev.mysql.com/doc/refman/5.0/...nstraints.html
    con i tuoi accorgimenti sono riuscito a creare la tabella.
    dove fosse nell specifico il problema nn lo so, però alla fine ce l'ho fatta.
    grazie!!

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