mysql 错误1005_MySQL ERROR 1005:无法创建表(错误号: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)

) ;

但是我收到以下错误:

错误代码:1005无法创建表’teatrosql.messainscena'(错误号: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是独一无二的并且没有拼写错误(但是你也可以控制一个你永远不知道的控件:D).如您所见,引用字段是主键.字段和fk引用类型和维度之间重合..

我哪里错了?

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

) ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值