外键约束失败

时间:2013-06-03 12:42:18

标签: mysql foreign-keys

我有3张桌子:

create table comuni(
comune varchar(20) primary key,
cap char(5) not null,
abitanti int not null
)ENGINE=InnoDB;

create table mercati(
ubicazione varchar(20) not null,
comune varchar(20) not null,
primary key(ubicazione,comune),
foreign key(comune) references comuni(comune)
)ENGINE=InnoDB;

create table posteggi(
identificativo char(3) not null,
mq int not null,
CHECK(mq>=3),
acquistato bool not null DEFAULT 1,
ubicazione varchar(20) not null,
comune varchar(20) not null,
codice_fiscale char(16),
primary key(identificativo,ubicazione,comune),
foreign key(ubicazione,comune) references mercati(ubicazione,comune),
foreign key(codice_fiscale) references commercianti(codice_fiscale)
)ENGINE=InnoDB;

在第一张表中,我插入了两行

+-----------+-------+----------+
| comune    | cap   | abitanti |
+-----------+-------+----------+
|  tribano  | 35020 |     6000 |
| monselice | 35023 |     5020 |
+-----------+-------+----------+

然后在第二行,

+----------------+--------+------------+----------+----------+
| ubicazione     | giorno | ora_inizio | ora_fine | comune   |
+----------------+--------+------------+----------+----------+
| piazza mazzini | GI     | 07:00:00   | 13:00:00 |  tribano |
+----------------+--------+------------+----------+----------+

但是当我尝试执行

insert into posteggi(identificativo,mq,ubicazione,comune) 
values('10',10,'piazza mazzini','tribano'); 
存在于表mercati中的

我有这个错误:

  

错误1452(23000):无法添加或更新子行:外键约束失败(ntresold-ES.posteggi,CONSTRAINT posteggi_ibfk_1 FOREIGN KEY(ubicazione,comune)REFERENCES mercati(ubicazione,comune))< / I>

是的,问题是“tribano”之前的空间,我删除它并使用Pheonix的答案中的代码

1 个答案:

答案 0 :(得分:0)

SQL Fiddle

MySQL 5.5.30架构设置

create table comuni(
comune varchar(20) primary key,
cap char(5) not null,
abitanti int not null
);


create table mercati(
ubicazione varchar(20) not null,
comune varchar(20) not null,
primary key(ubicazione,comune),
foreign key(comune) references comuni(comune)
);

create table posteggi(
identificativo char(3) not null,
mq int not null,
CHECK(mq>=3),
acquistato bool not null DEFAULT 1,
ubicazione varchar(20) not null,
comune varchar(20) not null,
codice_fiscale char(16),
primary key(identificativo,ubicazione,comune),
foreign key(ubicazione,comune) references mercati(ubicazione,comune)
);