我有这个表结构(三个表:image,image_room,room)
image
image_id(PK) | image_name
image_room
image_id(PK) | room_id (PK)
room
room_id(PK) | room_name
所有图片ID和房间ID都在image_room中找到。
当我从图像表中删除图像时,我想在image_room中删除具有相同ID的行。这在image_room
中使用此外键可以正常工作columns | reference Table | Foreign Columns | On Delete
image_id | image | image_id | CASCADE
当我删除一个房间时,我想在image_room中删除具有匹配房间ID的行,并且图像表中的所有行都与我从image_room中删除的id匹配。
我在image_room中有这个外键,可以从image_room中删除房间
columns | reference Table | Foreign Columns | On Delete
room_id | room | room_id | CASCADE
删除房间时,如何从image_room中的image_id中删除图像表中的行?现在我猜测我在image table之前删除了image_room表中的行。
我已在图像表中使用此外键进行测试
columns | reference Table | Foreign Columns | On Delete
image_id | image_room | image_id | CASCADE
得到错误"无法添加或更新子行,外键约束失败"。
我可以用On delete cascade来解决这个问题吗?否则,我使用PHP作为后端。
答案 0 :(得分:0)
不,你不能。对于“图像”表,删除级联从“图像”到“image_room”。 (从“image”中删除一行,dbms删除引用该行的“image_room”中的所有行。)无法在另一个方向级联删除。当我删除房间时,我想在image_room中删除具有匹配房间ID的行,并且图像表中的所有行都与我从image_room中删除的id匹配。
[剪断]
我可以用On delete cascade来解决这个问题吗?
您必须通过在MySQL中编写触发器或在PHP中编写应用程序代码来更改设计或使用过程代码。
如果图像名称是唯一的,则可以将图像名称存储在“image_room”中,而不是存储图像ID号。完成后,确保您已正确更新数据后,您可以删除表“image”,让单个外键到“room”进行所有清理。