外键mysql

时间:2011-08-05 11:38:15

标签: php mysql sql

我有以下表格:

PROFILE table {
user_id INT, 
apitype enum('facebook' , 'main')
}

USER table {
id INT
}

PROFILE.user_id是指向USER表中ID的外键,但仅限于PROFILE.apitype = 'main'

所以基本上PROFILE.user_id如果PROFILE.apitype != 'main'

,则不会引用USER表中的ID

如何在MYSQL中完成此任务?

3 个答案:

答案 0 :(得分:1)

您可以使用在插入/更新之前触发的trigger并检查apitype的值。甚至有一些方法可以在MySQL触发器中抛出错误,例如:检查this

答案 1 :(得分:0)

嗯,因为这是逻辑,它应该在应用程序中处理,而不是数据库。

您可以将profile-table中的user_id添加为nullable,使连接可选,并且根据您使用的存储引擎,您可以尝试触发器(虽然在mysql中不太了解它们)。

答案 2 :(得分:0)

我认为你无法在Mysql中轻松实现这一目标。

例如,在Postgres中你有一个检查约束,你可以检查apitype是否为main,那么user_id必须为null。

在Mysql中你只能用触发器来做这件事并不容易。我认为对您而言最简单的方法可能是在您的应用程序中检查它。但是你仍然可以在user_id上设置一个外键,即使它有时是空的