我的数据库中有两个表,其中包含以下模式:
locations (
location_id INT PRIMARY KEY,
location VARCHAR
)
和
venues (
venue_id INT PRIMARY KEY,
venue VARCHAR,
venue_location INT FOREIGN KEY locations(location_id)
ON DELETE CASCADE
)
当我需要删除位置而不是场地时,会引起一个大问题。如何仅使用相同的location_id
删除位置而不删除场地。我该怎么做才能达到这个要求。
示例数据:
/*locations table and data*/
locations(1, "Kathmandu");
locations(2, "Ilam");
locations(3, "Fikkal");
/*venues table and data*/
venues(1, "Green View Hotel and Lodge", 2);
venues(2, "Hyatt Hotel and Lodge", 1);
venues(3, "Abc Hotel", 3);
如何在不影响locations
“Abc Hotel”的情况下从venues
删除“Fikkal”位置。我知道ON DELETE CASCADE正在删除场地中的行,而我删除了相同ID的位置。但是如果我删除了ON DELETE CASCADE mysql说FK约束失败并且它也很明显。你会如何解决这样的问题。
我认为解决方案是在locations
表中创建一个默认位置,如下所示:
locations(0,“默认位置”);
执行ON DELETE SET DEFAULT
之类的操作,但实际上并不知道如何。
但我认为有一些professional
和standard
方法来处理这个问题。任何想法请。
谢谢
答案 0 :(得分:0)
您可以为venue_location
允许null,并将delete设置为null。显然,也可以有其他解决方案。但在你的情况下,这似乎是最简单的。
答案 1 :(得分:0)
如果场地没有找到位置,你可能会知道如何处理剩下的功能。
如果您希望能够删除与其相关的场所的位置,您应该这样做:
venues (
venue_id INT PRIMARY KEY,
venue VARCHAR,
venue_location INT FOREIGN KEY locations(location_id)
ON DELETE NO ACTION
)
我的意思是用“NO ACTION”替换“CASCADE”
答案 2 :(得分:0)
假设如果要在删除父记录后将位置ID 1添加为默认值,那么我们必须编写默认值1
地点( place_id INT主键, 场地VARCHAR, 场所位置INT默认值1外键位置(location_id) 删除默认设置 )