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

    [MySQL] ERROR 1005: Can't create table (errno: 150)

    Ciao, sto provando a creare la seguente tabella

    codice:
    create table messaInScena
      (
        data               date,  
        ora                time,
        spazio             varchar(20),
        spettacolo         varchar(40),
        postiDisponibili   smallint,
        prezzoIntero       decimal(5,2),
        prezzoRidotto      decimal(5,2),
        prezzoStudenti     decimal(5,2),
        primary key (data, ora, spazio),
        foreign key (spazio) references spazio(nome)
     on update cascade on delete set null,
        foreign key (spettacolo) references spettacolo(titolo)
     on update cascade on delete set null,
        constraint RA3_1 check (postiDisponibili >= 0)     
      ) ;
    ma mi da il seguente errore:
    Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)

    Le tabelle a cui fanno riferimento le chiavi esterne sono:

    codice:
      create table spazio
      (
        nome             varchar(20) primary key, 
        indirizzo        varchar(40) not null,
        pianta           varchar(20),
        capienza         smallint
      );
    
    create table spettacolo
      (
        titolo             varchar(40) primary key,  
        descrizione        LONGBLOB,
        annoProduzione     char(4)
      );
    ho già verificato che le fk siano uniche e che non ci siano errori di battitura (ma date un controllo pure voi che non si sa mai ). Come si può vedere i campi di riferimento sono chiavi primarie. tra campi di riferimento e chiavi esterne i tipi e le dimensioni coincidono..

    dove sbaglio???

    ps. se serve posto tutte le tabelle

  2. #2

    Re: [MySQL] ERROR 1005: Can't create table (errno: 150)

    Originariamente inviato da ludodudu
    ma mi da il seguente errore:
    Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)

    Le tabelle a cui fanno riferimento le chiavi esterne sono:

    codice:
      create table spazio
      (
        nome             varchar(20) primary key, 
        indirizzo        varchar(40) not null,
        pianta           varchar(20),
        capienza         smallint
      );
    
    create table spettacolo
      (
        titolo             varchar(40) primary key,  
        descrizione        LONGBLOB,
        annoProduzione     char(4)
      );
    Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)
    e' solo questa la dicitura dell'errore?


    ps sicuramente si ma, le hai effettivamente create le 2 tabelle : spazio e spettacolo si?
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Si si le due tabelle ovviamente le ho create
    e la dicitura dell'errore è esattamente quella che ho inserito "Error Code: 1005
    Can't create table 'teatrosql.messainscena' (errno: 150)"

    [IMG]Tabelle db[/IMG]

  4. #4
    Ho risolto.
    Prima di tutto ho controllato lo stato di InnoDB, e la ragione del problema era "on delete set null" così ho cambiato la query in questo modo
    codice:
    create table messaInScena
      (
        data               date,  
        ora                time,
        spazio             varchar(20),
        spettacolo         varchar(40),
        postiDisponibili   smallint,
        prezzoIntero       decimal(5,2),
        prezzoRidotto      decimal(5,2),
        prezzoStudenti     decimal(5,2),
        primary key (data, ora, spazio),
        foreign key (spazio) references spazio(nome) on update cascade on delete cascade,
        foreign key (spettacolo) references spettacolo(titolo) on update cascade on delete cascade,
        constraint RA3_1 check (postiDisponibili >= 0)     
      ) ;
    ora funziona!

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    Originariamente inviato da ludodudu
    Ho risolto.
    Prima di tutto ho controllato lo stato di InnoDB, e la ragione del problema era "on delete set null" così ho cambiato la query in questo modo
    codice:
    create table messaInScena
      (
        data               date,  
        ora                time,
        spazio             varchar(20),
        spettacolo         varchar(40),
        postiDisponibili   smallint,
        prezzoIntero       decimal(5,2),
        prezzoRidotto      decimal(5,2),
        prezzoStudenti     decimal(5,2),
        primary key (data, ora, spazio),
        foreign key (spazio) references spazio(nome) on update cascade on delete cascade,
        foreign key (spettacolo) references spettacolo(titolo) on update cascade on delete cascade,
        constraint RA3_1 check (postiDisponibili >= 0)     
      ) ;
    ora funziona!
    mi fa piacere che funziona.

    Ma,cosi hai dato un senso diverso al tuo progetto...

  6. #6
    Originariamente inviato da mydb
    mi fa piacere che funziona.

    Ma,cosi hai dato un senso diverso al tuo progetto...
    Sono ancora in fase di creazione delle tabelle, quindi se hai una soluzione alternativa è ben accetta

  7. #7
    Per esempio usare degli id numerici come chiavi primarie
    STK/Unit: Unit Test framework per MariaDB
    http://stk.wikidot.com/stk-unit

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    287
    per me va bene il progetto dicevo solo che :

    prima avevi indicato : ON DELETE SET NULL
    ora hai indicato : ON DELETE CASCADE

    quindi hai mutato la logica ossia a seguito di delete accadono 2 cose diverse.

    Se per te va bene non ci sono problemi

  9. #9
    alla fine ho riguardato il diagramma e alla fine la modifica che ho fatto va bene anche per la logica complessiva...
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.