MySQL ERREUR 1005: ne Peut pas créer de table (errno: 150)
Je suis en train de créer le tableau suivant
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)
) ;
mais j'obtiens l'erreur suivante:
Code d'erreur: 1005 ne Peut pas créer la table 'teatrosql.messainscena' (errno: 150)
Les tables référencées par des clés étrangères sont les suivants:
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)
);
J'ai déjà vérifié que les fk sont uniques et qu'il n'y a pas de fautes (mais donné un contrôle aussi que vous ne savez jamais :D). Comme vous pouvez le voir les champs de référence sont des clés primaires. entre les champs et fk types de référence et les dimensions coïncident ..
où je me trompe??
les autres tables de la DB
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
) ;
OriginalL'auteur user2610920 | 2013-07-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vérifier le statut de InnoDB (
SHOW ENGINE INNODB STATUS
) afin de déterminer la raison exacte pour laquelle les contraintes sont défaillants. L'autre option est d'ajouter les contraintes de clé étrangère après la création de la table.Dans votre cas, il semble que vous êtes absent le type de moteur. Les types de colonne doivent également correspondre. La clé primaire sur les tables de référence sont les plus susceptibles
NOT NULL
, et ils ne sont pas dansmessaInScena
.OriginalL'auteur Kermit
vous êtes un génie!
tout d'abord j'ai vérifié l'état de InnoDB, et la raison du problème est que j'ai essayé de mettre à null les fk sur supprimer donc j'ai changé la requête de cette façon
et de l'exécuter. maintenant, c'est le travail.
de toute façon maintenant je vais effectuer les modifications que vous me suggérer
OriginalL'auteur user2610920