这是我的桌子:
create table caddy(
Pnr char(13),
tips varchar(20),
name varchar(20),
primary key(Pnr)
)engine innodb;
create table golfbag(
brand varchar(20),
type varchar(20),
spelarePnr char(13),
caddyPnr char(13),
primary key(brand, spelarePnr),
foreign key(spelarePnr) references spelare(Pnr),
foreign key(caddyPnr) references caddy(Pnr)
)engine innodb;
如您所见,球童和高尔夫球袋之间有连接。连接必须是这种方式,而不能相反。
这就是我想要做的:
delete from caddy
where caddy.pnr="141414-1414" and caddy.name="Jeppe";
但是我只收到错误代码1451。问题是什么?
答案 0 :(得分:0)
您必须定义删除父表时要执行的操作。在您的情况下,您可能需要删除并按以下方式进行定义:
create table golfbag(
brand varchar(20),
type varchar(20),
spelarePnr char(13),
caddyPnr char(13),
primary key(brand, spelarePnr),
foreign key(spelarePnr) references spelare(Pnr) on delete cascade,
foreign key(caddyPnr) references caddy(Pnr) on delete cascade
)engine innodb;
答案 1 :(得分:-1)
从该错误开始,存在一个外键约束问题,这意味着表golfbag中存在一个或多个行,其中包含要从表球童中删除的行的主键作为其外键。
尽管有一种强制删除的方法,但是不建议这样做,因为这会导致在高尔夫球桌上的孤儿记录。
您可以在删除查询之前暂时禁用外键检查,并在执行删除操作后将其重新启用。
要禁用外键检查,请使用
SET FOREIGN_KEY_CHECKS = 0;
并启用它,请使用
SET FOREIGN_KEY_CHECKS = 1;