Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    [MySql] Errore can't create table

    Ciao, devo creare due tabelle collegate fra loro, lo faccio con queste istruzioni (uso Java):

    codice:
                    st.executeUpdate("CREATE TABLE IF NOT EXISTS Menu (\n"
                    + "\n"
                    + "menuId INT UNSIGNED NOT NULL AUTO_INCREMENT,\n"
                    + "\n"
                    + "productId INT UNSIGNED NOT NULL,\n"
                    + "\n"
                    + "menuName VARCHAR (20) NOT NULL,\n"
                    + "\n"
                    + "FOREIGN KEY (productId) REFERENCES Products (productId),\n"
                    + "\n"
                    + "PRIMARY KEY (menuId)\n"
                    + ");");
            st.executeUpdate("CREATE TABLE IF NOT EXISTS Products (\n"
                    + "\n"
                    + "productId INT UNSIGNED NOT NULL AUTO_INCREMENT,\n"
                    + "\n"
                    + "menuId INT NOT NULL,\n"
                    + "\n"
                    + "productName VARCHAR (40) NOT NULL,\n"
                    + "\n"
                    + "productPrice REAL(4,2) UNSIGNED NOT NULL,\n"
                    + "\n"
                    + "FOREIGN KEY (menuId) REFERENCES Menu (menuId),\n"
                    + "\n"
                    + "PRIMARY KEY (productId)\n"
                    + "\n"
                    + ");");
    Ma ottengo questo errore:
    java.sql.SQLException: Can't create table 'TableManager.Menu' (errno: 150)
    Mi sapete dire qual è il problema? Credo abbia a che fare con la FOREIGN KEY perché prima quando non l'avevo messa funzionava.
    Il punto è che le due tabelle devono essere collegate, in quanto Menu non è altro che un contenitore di Products...
    Io inserisco un menu e poi in questo menu devono esserci un certo numero di prodotti, quindi ho pensato di usare le foreign key per fare questa join ma sto sbagliando qualcosa
    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    prova a creare prima Products... come puoi avere una FK con reference a una tabella che non esiste?
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    E' lo stesso...avevo già provato a scambiare l'ordine di creazione delle tabelle.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    forse perché hai FK de Menu in Products e FK di Products in Menu?... che tipo di dipendenza hai tra quelle due tabelle? 1 a n? n a m?...

    mi sembra di aver capito che è... 1 menu - N prodotti vero?... allora devi avere Products.menuId...
    Ultima modifica di minos88; 20-03-2014 a 00:56
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    1 menu - N prodotti, giusto
    "allora devi avere Products.menuId"
    cosa significa esattamente?

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    residenza
    Lima, Perù
    Messaggi
    212
    Significa che solo nella tabella Products ci deve essere FK menuId... E nella tabella Menu non ci deve essere nessun FK di Products...
    Jamie Ynonan - Web Developer / Desarrollador Web - HTML5 - CSS3 - Javascript/jQuery - PHP/CodeIgniter/Laravel - SQL/MySQL - Wordpress
    Telelavoro / Teleworking - jamiea31[at]gmail.com - Lima - Perù - GMT -5

  7. #7
    l'effetto "1 menu contiene N prodotti" si ottiene specificando nel prodotto il menu di appartenenza (ammesso che un singolo prodotto appartenga a un solo menu). quindi la FK va messa solo nei prodotti

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ok ho provato a fare così:

    codice:
                    st.executeUpdate("CREATE TABLE IF NOT EXISTS Menu (\n"
                    + "\n"
                    + "menuId INT UNSIGNED NOT NULL AUTO_INCREMENT,\n"
                    + "\n"
                    + "menuName VARCHAR (20) NOT NULL,\n"
                    + "\n"
                    + "PRIMARY KEY (menuId)\n"
                    + ");");
                    
                    st.executeUpdate("CREATE TABLE IF NOT EXISTS Products (\n"
                    + "\n"
                    + "productId INT UNSIGNED NOT NULL AUTO_INCREMENT,\n"
                    + "\n"
                    + "productName VARCHAR (40) NOT NULL,\n"
                    + "\n"
                    + "productPrice REAL(4,2) UNSIGNED NOT NULL,\n"
                    + "\n"
                    + "menuId INT NOT NULL,\n"
                    + "\n"
                    + "PRIMARY KEY (productId),\n"
                    + "\n"
                    + "FOREIGN KEY (menuId) REFERENCES Menu (menuId)\n"
                    + "\n"       
                    + ");");
    Ma mi dice sempre che non può creare la tabella products, come mai? Cosa sbaglio ancora?
    menuId nella tabella products deve esserci? Se lo tolgo l'errore cambia, diventa:

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorEx ception: Key column 'menuId' doesn't exist in table

    ma se lo lascio mi dice che non può creare la tabella...

    EDIT: OK ho risolto, il problema stava nel fatto che menuId dovesse essere UNSIGNED anche nella tabella prodotti.

    Adesso ho un altro dilemma però.
    Quando l'utente da interfaccia grafica inserisce un prodotto nel menu, non deve preoccuparsi di inserire l'id del menu a cui appartiene (in quanto gli id sono solo ad uso interno e non visibili all'utente).
    Questa cosa deve avvenire in automatico semplicemente perché l'utente inserisce un prodotto nel menu *attualmente visibile* nella maschera. Spero di essermi spiegata... è fattibile?
    Ultima modifica di Jamie04; 20-03-2014 a 11:54

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    cioe per capire graficamente come sara?

    tu apri un MENU e all'interno di esso inserisci N prodotti?

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Quote Originariamente inviata da mydb Visualizza il messaggio
    cioe per capire graficamente come sara?

    tu apri un MENU e all'interno di esso inserisci N prodotti?

    apro (o inserisco o modifico) un menu e all'interno di esso inserisco N prodotti
    quindi l'utente non deve inserire l'id del menu a cui il prodotto appartiene, per capirci

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