mysql上的删除设置默认

时间:2013-07-22 05:16:11

标签: mysql database

我的数据库中有两个表,其中包含以下模式:

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之类的操作,但实际上并不知道如何。

但我认为有一些professionalstandard方法来处理这个问题。任何想法请。

谢谢

3 个答案:

答案 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) 删除默认设置 )