2013-07-23 7 views
7

मैं निम्न तालिकाMySQL त्रुटि 1005: टेबल बनाया नहीं जा सकता (errno: 150)


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)  
) ; 

बनाने के लिए कोशिश कर रहा हूँ, लेकिन मैं निम्नलिखित त्रुटि मिलती है: teatrosql '1005 तालिका नहीं बना सकता: त्रुटि कोड .messainscena '(errno: 150)

टेबल है कि विदेशी कुंजी द्वारा संदर्भित कर रहे हैं:


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) 
); 

मैं पहले से ही सत्यापित किया है कि FK अद्वितीय हैं और कोई ग़लतियां (हैं कि लेकिन आपको एक नियंत्रण भी दिया गया है जिसे आप कभी नहीं जानते: डी)। जैसा कि आप देख सकते हैं संदर्भ फ़ील्ड प्राथमिक कुंजी हैं। फ़ील्ड और एफके संदर्भ प्रकारों और आयामों के बीच मेल खाता है ..

मैं कहाँ गलत हूं ??

डीबी

की अन्य तालिकाओं

create table teatro 
    (
    nome    varchar(20) primary key, 
    telefono   varchar(15), 
    fax    varchar(15), 
    indirizzo  varchar(40) not null, 
    email   varchar(30), 
    url    varchar(30) 
); 

create table biglietteria 
    (
    nome    varchar(20) primary key, 
    indirizzo  varchar(40) not null, 
    email   varchar(30), 
    telefono   varchar(15), 
    teatro   varchar(20), 
    foreign key (teatro) references teatro(nome) 
    on update cascade on delete set null 
); 

create table orario 
    (
    biglietteria  varchar(20), 
    giorno   varchar(10), 
    inizio   time, 
    fine    time, 
    primary key(biglietteria, giorno, inizio), 
    foreign key (biglietteria) references biglietteria(nome) 
    on update cascade on delete cascade 
); 

create table notizia 
    (
    data  date, 
    ora   time, 
    oggetto  varchar(100), 
    testo  LONGBLOB, 
    primary key(data, ora, oggetto) 
); 

create table newsletter 
    (
    teatro  varchar(20), 
    data  date, 
    ora   time, 
    oggetto  varchar(100), 
    primary key(teatro, data, ora, oggetto), 
    foreign key (teatro) references teatro(nome)on update cascade on delete cascade, 
    foreign key (data, ora, oggetto) references notizia(data, ora, oggetto) on update cascade on delete cascade 
); 

create table dipendente 
    (
    cf      char(16) primary key, 
    nome     varchar(20) not null, 
    cognome    varchar(20) not null, 
    dataDiNascita   date, 
    luogoDiNascita   varchar(20), 
    residenza    varchar(30), 
    telefonoFisso   varchar(15), 
    telefonoMobile   varchar(15), 
    email     varchar(30) 
); 

create table lavoro 
    (
    teatro    varchar(20), 
    dipendente   char(16), 
    dataAssunzione  date, 
    ruolo    varchar(5), 
    cda     boolean, 
    primary key(teatro, dipendente), 
    foreign key (teatro) references teatro(nome) on update cascade on delete cascade, 
    foreign key (dipendente) references dipendente(cf) on update cascade on delete cascade, 
    constraint RA1 check (
    cda = false or 
    (year(current_date) - year(dataAssunzione) > 10) or 
    (year(current_date) - year(dataAssunzione) = 10 and 
     month(current_date) > month(dataAssunzione)) or 
    (year(current_date) - year(dataAssunzione) = 10 and 
     month(current_date) = month(dataAssunzione) and 
     day(current_date) >= day(dataAssunzione)) 
    ), 
     check (ruolo in ('CA', 'POD', 'CUSRP', 'ACF')) 
); 

create table stipendio 
    (
    dipendente char(16), 
    inizio  date, 
    importo  decimal(6,2), 
    primary key(dipendente, inizio), 
    foreign key (dipendente) references dipendente(cf) on update cascade on delete cascade 
) ; 

create table luogo 
    (
    teatro  varchar(20), 
    spazio  varchar(20), 
    primary key(teatro, spazio), 
    foreign key (teatro) references teatro(nome) on update cascade on delete cascade, 
    foreign key (spazio) references spazio(nome) on update cascade on delete cascade 
) ; 

उत्तर

11

आप InnoDB (SHOW ENGINE INNODB STATUS) की स्थिति की जांच का सटीक कारण की कमी असफल रहे हैं निर्धारित करने के लिए कर सकते हैं। दूसरा विकल्प तालिका बनाने के बाद विदेशी कुंजी बाधाओं को जोड़ना है।

आपके मामले में, ऐसा लगता है कि आप इंजन प्रकार खो रहे हैं। स्तंभ प्रकार भी मेल खाना चाहिए। संदर्भित तालिकाओं की प्राथमिक कुंजी NOT NULL की संभावना है, और वे messaInScena में नहीं हैं।

create table spazio 
    (
    nome    varchar(20) NOT NULL primary key, 
    indirizzo  varchar(40) not null, 
    pianta   varchar(20), 
    capienza   smallint 
) ENGINE=InnoDB; 

create table spettacolo 
    (
    titolo    varchar(40) NOT NULL primary key, 
    descrizione  LONGBLOB, 
    annoProduzione  char(4) 
) ENGINE=InnoDB; 

create table messaInScena 
    (
    data    date, 
    ora    time, 
    spazio    varchar(20) NOT NULL, 
    spettacolo   varchar(40) NOT NULL, 
    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)  
) ENGINE=InnoDB; 
+1

मुझे एक ही समस्या थी, माइस्क्ल में रूट लॉगिन से "इंजन इंनोड स्थिति" दिखाएं, मैंने देखा कि संदर्भित टेबल 'कॉलम डेटा प्रकार उन लोगों के साथ मेल नहीं खा रहा था जो मैं था बनाना। धन्यवाद। –

0

आप एक genious हैं! सब से पहले मैं InnoDB की स्थिति की जाँच की, और समस्याओं के के कारण यह है कि मेरे द्वारा हटाए जाने पर अशक्त FK सेट करने की कोशिश की थी तो मैं इस तरह से


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)  
) ; 

और यह अमल में क्वेरी बदल दिया है। अब यह काम है। वैसे भी मैं उन परिवर्तनों को ले जाऊंगा जो आप मुझे सुझाते हैं

संबंधित मुद्दे