如何使用附加约束设置外键

时间:2018-04-16 16:57:03

标签: mysql foreign-keys

我有一个带有下表(InnoDB)的mysql数据库:

products
--id
--name 
--description
--parentid

categories2products
--id
--productid

我想将categories2products.productid的外键用于prodoucts.id,其中parentid = null我该怎么做? (这是可能的)我知道如何设置外键只是不知道如何用parentid = null来做。

感谢

2 个答案:

答案 0 :(得分:0)

关于什么是parentid,问题有点不清楚。如果是一种指向"产品的自我关系"表,只是在mysql中将其设置为可为空。 foreing键与此无关,您可以正常设置。

如果您的意思是您希望外键仅在parentid为null时可用,那么应由使用该数据库的应用程序进行管理。需要定义外键约束,并且应用程序将在没有父项时填充它,或者在有父项时将其保留为空。

希望有所帮助。如果我理解不正确,请编辑问题以使其更清晰。

答案 1 :(得分:0)

外键无法实现您想要的约束;你可以经常使用BEFORE触发器来实现更复杂的约束(比如你正在尝试的约束),当不满足约束时“抛出错误”。

然而,这可能很容易超出实用性。在引用表上使用BEFORE INSERT触发器以防止插入不正确的数据将非常简单,BEFORE UPDATE触发器也可以防止不适当的更新......但是如果引用的记录在更改中发生了什么,您必须解决不符合参考资格的方式。 如果要模拟外键的级联功能,还需要在引用的表上实现触发器。