【发布时间】:2014-05-01 07:52:51
【问题描述】:
我正在使用 MySQL InnoDB 数据库,其中有很多表。我想要做的是(从数据库中)强制执行一个约束,使得一个键可能存在于两列之一(在两个单独的表中)但不能同时存在。我会尽量让这一点更清楚。
假设我有两个表,TableA 和 TableB。这两个表都有很多列,但它们有一个共同的列,称为 SpecialID (int 255)。
现在,这两个表都有很多行,从 Web 应用程序的 PHP 端来看,TableA 中的 SpecialID 列不应包含 TableB 的 SpecialID 列中的整数,反之亦然.换句话说,任何时候都不能在 TableA 和 TableB 的 SpecialID 列中找到整数。
我相当有信心我已从 PHP 端强制执行此操作,但是我希望能够从数据库中强制执行此关系,只是要格外小心,就好像我最终得到相同的值一样在这两个表中,这将是灾难性的。
这甚至可能是不可能的,但我想我会把它扔掉,因为它看起来 可能。这有点像“外国唯一性约束”。我做了一些研究,但根本没有发现任何东西,甚至没有人要求这样的东西,所以也许我只是在寻找错误的东西?
【问题讨论】:
-
嗯,那里的很多答案都倾向于暗示触发器。我以前从未使用过它们,但看起来 可能 有效。如果您正在处理整数,其中一个 cmets 会提到有关 GUID 的内容。如果这是可能的,它可能会更整洁?虽然我也不知道它们。