MySQL修复了类别的ID,如何确保它们是静态的

时间:2013-08-14 21:28:48

标签: mysql database

我的系统具有与事件相关联的类别。所有这些类别都很简单,它们具有id和名称。让我担心的一件事是,当我创建这些类别时,ID应始终保持不变,为静态。如果我删除了一个,让我们说id = 1的“政治”,所有这些事件都会有一个孤立的类别。我想到的一个解决方案是只为它们分配字符串ID,所以如果它们确实被删除了,那就不重要了。你推荐什么样的解决方案?

从我的角度来看,似乎你可以保留id并只是放一个不允许你删除记录的约束,只编辑它们。另一个是使用字符串ID,但这似乎是一种痛苦,虽然它似乎解决了担心被搞乱的问题。

1 个答案:

答案 0 :(得分:0)

是的,这就是外键约束的含义。它们还允许有关如何处理删除的规则 - 例如,允许删除通过依赖记录级联,这当然是非常危险的,而不是在这种情况下你想要的。一个简单的基本约束就可以了。

无论其!!!!这是了解mysql的重要事项。默认的mysql引擎(myisam)绝对不支持外键约束。您需要使用支持它们的引擎 - 最常见的是innodb。

如果在生成DDL时指定约束,myisam表将接受约束,但只是忽略它,因此在添加约束之前,请确保将所有相关表设置/更改为innodb表(s )。

如何添加约束?

ALTER TABLE `event` ADD CONSTRAINT `category_event` 
FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`);

在此示例中,它假定您的事件表中包含外键category_id,以创建链接。添加此约束后,如果您尝试从类别表中删除一行,并且现有事件行包含该键,则mysql将禁止DELETE并返回错误。这里将对此进行详细讨论:http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html